Only Yesterday 制御プログラム

Dependencies:   mbed FATFileSystem

Fork of OnlyYestaerday by Junichi Katsu

Revision:
0:5975af170e43
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Apr 02 01:43:55 2014 +0000
@@ -0,0 +1,430 @@
+/* Sample code for mbed eDISP Library
+ * Copyright (c) 2010 todotani
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+
+#include "mbed.h"
+#include "eDisp.h"
+#include "SDFileSystem.h"
+#include "wave_player.h"
+#include "LEDStrip.h"
+
+#define LED_NUM         16
+#define LED_DATA_NUM    3
+
+AnalogIn sensor(p20);
+Serial pc(USBTX, USBRX); // tx, rx
+SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+AnalogOut DACout(p18);
+wave_player waver(&DACout);
+Serial tempe(p9, p10);  // tx, rx
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+
+unsigned char led_data[LED_NUM][3];
+
+float ss;
+int sensor_on_f = 0;
+
+
+// RGB color code table
+int RGB_color[16] = {
+    RGB_Navy,
+    RGB_Silver,
+    RGB_Blue,
+    RGB_Maroon,
+    RGB_Purple,
+    RGB_Red,
+    RGB_Fuchsia,
+    RGB_Green,
+    RGB_Teal,
+    RGB_Lime,
+    RGB_Aqua,
+    RGB_Olive,
+    RGB_Gray,
+    RGB_Yellow,
+    RGB_White,
+    RGB_Black };
+
+// RGB color name table
+char* colorName[16] = {
+    "Navy",
+    "Silver",
+    "Blue",
+    "Maroon",
+    "Purple",
+    "Red",
+    "Fuchsia",
+    "Green",
+    "Teal",
+    "Lime",
+    "Aqua",
+    "Olive",
+    "Gray",
+    "Yellow",
+    "White",
+    "Black" };
+
+
+const unsigned char _RED[3] =   { 0xFF, 0   , 0    };
+const unsigned char _ORENGE[3] =   { 0xFF, 0x8F   , 0    };
+const unsigned char _ORENGE1[3] =   { 0xAF, 0x8F   , 0    };
+const unsigned char _GEN[3] =   { 0xFF, 0x8F   , 0x8F    };
+const unsigned char _GREEN[3] =     { 0   , 0xFF, 0    };
+const unsigned char _BLUE[3] =  { 0   , 0   , 0xFF };
+const unsigned char _YELLOW[3] = { 0xFF, 0xFF, 0    };
+const unsigned char _PURPLE[3] = { 0xFF, 0   , 0xFF };
+const unsigned char _AQUA[3] =  { 0   , 0xFF, 0xFF };
+const unsigned char _WHITE[3] =     { 0xFF, 0xFF, 0xFF };
+const unsigned char _GLAY[3] =  { 0x80, 0x80, 0x80 };
+const unsigned char _OFF[3] =   { 0, 0, 0 };
+
+unsigned char _todat[3];
+
+eDisp display(p28, p27, 115200);     // tx, rx, baud
+Ticker flipper;
+Ticker flipper1;
+extern int sound_stop;
+int ni_end = 0;
+
+#define MAX_PHOTONO 10
+
+void send_led()
+{
+    for(int i=0;i<LED_NUM;i++)
+    {
+        tapeSet(i,led_data[i][0] << 16 | led_data[i][1] << 8 | led_data[i][2]);
+    }
+    tapeSend();
+}
+
+void send_led2()
+{
+    static int i = 0;
+
+    tapeSet(i,led_data[i][0] << 16 | led_data[i][1] << 8 | led_data[i][2]);
+    i++;
+    if( i >= LED_NUM )
+    {
+        i = 0;
+        tapeSend();
+    }
+}
+
+
+void voice(char* file_path)
+{
+    FILE *wave_file;
+    
+    wave_file=fopen(file_path,"r");
+    waver.play(wave_file);
+    fclose(wave_file);
+}
+
+// color 0~100 weather 0:sun 1:ran 2: cloude 
+void tempescope( int color , int weather , int lightning )
+{
+    pc.printf("Zr,%d,%d,%d\n\r",color,weather,lightning);
+  //  for(int i = 0 ; i < 10 ; i++ )
+  //  {
+        tempe.printf("Zr,%d,%d,%d\r\n",color,weather,lightning);
+  //      wait(0.1);
+  //  }
+}
+
+void flip() {
+    ss = sensor;
+    
+    if( ss > 0.2 )
+    {
+        if( sensor_on_f == 0 )
+        {
+            waver.set_s_stop();
+            led2 = 1;
+            sensor_on_f = 1;
+        }
+    }
+    else
+    {
+        sensor_on_f = 0;
+    }
+    led1 = !led1;
+    //send_led();
+
+}
+
+int near(unsigned char *from_dat,const unsigned char *to_dat,int wide)
+{
+    int ret_code_l = 1;
+    
+    for( int i=0;i<LED_DATA_NUM;i++)
+    {
+        if( from_dat[i] < to_dat[i] )
+        {
+            if( (from_dat[i]+wide) < to_dat[i] )
+            {
+                from_dat[i] = from_dat[i] + wide;
+                ret_code_l = 0;
+            }
+            else
+            {
+                from_dat[i] = to_dat[i];
+
+            }
+        }
+        else if( from_dat[i] > to_dat[i] )
+        {
+            if( (from_dat[i]-wide) > to_dat[i])
+            {
+                from_dat[i] -= wide;
+                ret_code_l = 0;
+            }
+            else
+            {
+                from_dat[i] = to_dat[i];
+            }
+        }
+    }
+    
+    return(ret_code_l);
+}
+
+void flip2() {
+    ni_end = 0;
+    
+    for(int j=0;j<LED_NUM;j++)
+    {
+        ni_end += near( led_data[j] , _todat , 10 );
+    }
+}
+
+void slow_light_all(const unsigned char *base_dat,int speed)
+{
+    int i,j;
+    while(i!=LED_NUM)
+    {
+        i = 0;
+        for(j=0;j<LED_NUM;j++)
+        {
+            i += near( led_data[j] , base_dat , 5 );
+        }
+        send_led();
+        wait_ms(speed);
+    }
+}
+
+int main() {
+    int i;
+    int photo_no = 0;
+    int old_photo_no = 1;
+    
+    wait(2);
+    
+    //tempescope( 100 , 1 , 0 );
+    
+    for(int i=0;i<LED_NUM;i++)
+    {
+        memcpy( &led_data[i][0] , &_WHITE[0] , LED_DATA_NUM );
+//        for(int j=0;j<LED_DATA_NUM;j++)
+//        {
+//           led_data[i][j] = _AQUA;
+//        }
+    }
+    
+    tapeInit(0, LED_NUM);
+    
+//    slow_light_all(_AQUA , 100);
+    
+    memcpy( _todat , _AQUA , 3);
+    
+    wait(2);
+    
+    send_led();
+        
+    display.pic(0,1);
+    wait(1.0);
+    display.pic(1,2);
+    wait(1.0);
+    display.pic(2,3);
+    wait(1.0);
+    display.pic(3,4);
+    wait(1.0);
+    flipper1.attach(&flip2, 0.1);
+    
+while(1)
+{
+    ss = sensor;
+    pc.printf("sensor:%f\r\n",ss);
+    
+    if( old_photo_no != photo_no )
+    {
+        display.pic(0,photo_no+1);
+        while(ni_end!=LED_NUM)
+        {
+            send_led();
+        }
+        flipper1.detach();
+        old_photo_no = photo_no;
+        display.chg_buff(0);
+        flipper.attach(&flip, 0.1);
+        switch( photo_no )
+        {
+        case 0:
+            voice("/sd/1.wav");
+            break;
+        case 1:
+            voice("/sd/2.wav");
+            break;
+        case 2:
+            voice("/sd/3.wav");
+            break;
+        case 3:
+            voice("/sd/4.wav");
+            break;
+        case 4:
+            voice("/sd/5.wav");
+            break;
+        case 5:
+            voice("/sd/6.wav");
+            break;
+        case 6:
+            voice("/sd/7.wav");
+            break;
+        case 7:
+            voice("/sd/8.wav");
+            break;
+        case 8:
+            voice("/sd/9.wav");
+            break;
+        case 9:
+            voice("/sd/10.wav");
+            break;
+        }   
+
+        flipper.detach();
+        led2 = 0;
+        sensor_on_f = 0;
+        flipper1.attach(&flip2, 0.1);
+    }
+    
+    if( ss > 0.2 )
+    {
+        if( sensor_on_f == 0 )
+        {
+            photo_no++;
+            if( photo_no >= MAX_PHOTONO )
+            {
+                photo_no = 0;
+            }
+            switch( photo_no )
+            {
+            case 0:
+                memcpy( _todat , _WHITE , 3);
+                tempescope( 23 , 2 , 0 );
+                break;
+            case 1:
+                memcpy( _todat , _ORENGE , 3);
+                tempescope( 0 , 2 , 0 );
+                break;
+            case 2:
+                memcpy( _todat , _ORENGE1 , 3);
+                tempescope( 100 , 0 , 0 );
+                break;
+            case 3:
+                memcpy( _todat , _BLUE , 3);
+                tempescope( 70 , 1 , 0 );
+                break;
+            case 4:
+                memcpy( _todat , _ORENGE , 3);
+                tempescope( 50 , 0 , 0 );
+                break;
+            case 5:
+                memcpy( _todat , _GLAY, 3);
+                tempescope( 0 , 0 , 0 );
+                break;
+            case 6:
+                memcpy( _todat , _AQUA , 3);
+                tempescope( 100 , 0 , 0 );
+                break;
+            case 7:
+                memcpy( _todat , _OFF , 3);
+                tempescope( 0 , 1 , 1 );
+                break;
+            case 8:
+                memcpy( _todat , _ORENGE , 3);
+                tempescope( 10 , 2 , 0 );
+                break;
+            case 9:
+                memcpy( _todat , _RED , 3);
+                tempescope( 100 , 0 , 0 );
+                break;
+            }   
+
+        }
+        sensor_on_f = 1;
+    }
+    else
+    {
+        sensor_on_f = 0;
+    }
+    send_led();
+    wait(0.1); 
+}
+
+#if 1
+    wait(2);
+    
+    display.pic(0,1);
+    wait(1.0);
+    display.pic(1,2);
+    wait(1.0);
+    
+    while(1)
+    {
+        display.chg_buff(0);
+        wait(1.0);
+        display.chg_buff(1);
+        wait(1.0);
+    }
+    
+    while(1);
+#endif
+    
+    while (1) {
+        // Test-1
+        // clear graphics screen
+        display.fillRect(0, 320, 240, 0, 0, RGB_Black); 
+        display.reset();
+        for (i = 0; i < 15; i++) {
+            display.fillRect(0, 320, 16, 0, i*16, RGB_color[i]);
+            display.locate(0, i);
+            display.printf("%s", colorName[i] );
+        }
+        wait(2);
+
+        // Test-2
+        display.fillRect(0, 320, 240, 0, 0, RGB_Black);
+        display.cls();
+        for (i = 0; i < 15; i++) {
+            display.drawLine(0, 1, i*16+1, 319, i*16+1, RGB_color[i]);
+            display.drawLine(0, i*21+1, 0, i*21+1, 239, RGB_color[i]);
+        }
+        wait(2);
+
+        // Test-3
+        for (i = 0; i < 15; i++) {
+            display.fillRect(0, 320, 240, 0, 0, RGB_color[i]);
+            wait(0.2);      // wait until completion of draw
+        }
+        wait(2);
+        
+        // Test-4
+        display.fillRect(0, 320, 240, 0, 0, RGB_Black);
+        display.cls();
+        for (i = 0; i < 15; i++) {
+            display.textColor(RED + i%7);
+            display.printf("�����\��OK �`A�aB�bC\n");
+        }
+        wait(2);
+    }
+}