test
Dependencies: EthernetInterface Milkcocoa_EthernetIF mbed-rtos mbed
Fork of MilkcocoaSample_Eth by
Diff: main.cpp
- Revision:
- 9:561182aac695
- Parent:
- 7:25a9bc3ca875
--- a/main.cpp Mon Jun 06 03:40:05 2016 +0000 +++ b/main.cpp Tue Oct 31 09:26:44 2017 +0000 @@ -1,61 +1,618 @@ #include "mbed.h" +#include "LEDStrip.h" +#include "ConfigFile.h" #include "MQTTEthernet.h" #include "MQTTClient.h" #include "Milkcocoa.h" #include "MClient.h" -// The default setting is for the Simple IoT Board(mbed LPC1114FN28) -// Please change to fit the platform -Serial pc(USBTX, USBRX); -DigitalOut myled(LED1); +#define LED_NUM 60 +#define LED_DATA_NUM 3 +#define PI 3.14159265359f +#define MAX_COUNT 60 +#define STAR_LINE_MAX 60 + +#if 0 +#define DBG(x) x +#else +#define DBG(x) +#endif /************************* Your Milkcocoa Setup *********************************/ -#define MILKCOCOA_APP_ID "...YOUR_MILKCOCOA_APP_ID..." -#define MILKCOCOA_DATASTORE "mbed" - +#define MILKCOCOA_APP_ID "juicej2vchzis" +#define MILKCOCOA_DATASTORE "halloween" + /************* Milkcocoa Setup (you don't need to change this!) ******************/ - + #define MILKCOCOA_SERVERPORT 1883 /************ Global State (you don't need to change this!) ******************/ - + const char MQTT_SERVER[] = MILKCOCOA_APP_ID ".mlkcca.com"; const char MQTT_CLIENTID[] = __TIME__ MILKCOCOA_APP_ID; - + extern void onpush(MQTT::MessageData& md); +Serial pc(USBTX, USBRX); +LocalFileSystem local("local"); +Ticker flipper; +ConfigFile cfg; +DigitalIn SW1(p25); +DigitalIn SW2(p26); +DigitalOut stat_led1(LED1); +DigitalOut stat_led2(LED2); +DigitalOut stat_led3(LED3); +DigitalOut stat_led4(LED4); + + + +void flip(); + +bool completed = false; +int t_timer = 0; +int like_count = 0; +int max_count = 0; +int demo_count = 0; + +const unsigned char _RED[3] = { 0xFF, 0 , 0 }; +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 _DARK_GLAY[3] = { 0x2, 0x2, 0x2 }; +const unsigned char _OFF[3] = { 0, 0, 0 }; + +unsigned char led_data[60][3]; + +unsigned char base_led_data[60][3]; + +unsigned char star_line[STAR_LINE_MAX] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,39, + 40,41,42,43,44,45,46,47,48,49, + 50,51,52,53,54,55,56,57,58,59 +}; + +unsigned char color_line[STAR_LINE_MAX][3] = +{ + { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, + { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, + { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 }, + { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, + { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, + { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 }, + { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, + { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, + { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 }, + { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, + { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, + { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 }, + { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, + { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, + { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 } + +}; + +extern void send_led(); + +int DownLight(unsigned char *dat,int value) +{ + for(int i=0;i<LED_DATA_NUM;i++) + { + if( dat[i] > value ) + { + dat[i] = dat[i] - value; + } + } + return(0); +} + +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); +} + +int flow_star(int from,int to,const unsigned char *dat,const unsigned char *base_dat,int speed) +{ + int i,j; + + if( from < to ) + { + for(i=from;i<to;i++) + { + memcpy( led_data[star_line[i]] , base_dat , 3 ); + } + + send_led(); + wait_ms(speed); + + for(i=from;i<to;i++) + { + for(j=from;j<to;j++) + { + if(j==i) + { + memcpy( led_data[star_line[j]] , dat , 3 ); + } + else + { + near( led_data[star_line[j]] , base_dat , 5 ); + } + } + send_led(); + wait_ms(speed); + + } + + i = 0; + j = 1; + while(i!=(abs(from-to))) + { + i = 0; + for(j=from;j<to;j++) + { + i += near( led_data[star_line[j]] , base_dat , 10 ); + } + send_led(); + wait_ms(speed); + } + } + else + { + for(i=from;i>to;i--) + { + memcpy( led_data[star_line[i]] , base_dat , 3 ); + } + + send_led(); + wait_ms(speed); + + for(i=from;i>to;i--) + { + for(j=from;j>to;j--) + { + if(j==i) + { + memcpy( led_data[star_line[j]] , dat , 3 ); + } + else + { + near( led_data[star_line[j]] , base_dat , 5 ); + } + } + send_led(); + wait_ms(speed); + } + + i = 0; + j = 1; + while(i!=(abs(from-to))) + { + i = 0; + for(j=from;j>to;j--) + { + i += near( led_data[star_line[j]] , base_dat , 5 ); + } + send_led(); + wait_ms(speed); + } + } + + return(0); +} + +int flow_star(int from,int to,const unsigned char *dat,int speed) +{ + int i,j; + + if( from < to ) + { + for(i=from;i<to;i++) + { + memcpy( led_data[star_line[i]] , base_led_data[star_line[i]] , 3 ); + } + + send_led(); + wait_ms(speed); + + for(i=from;i<to;i++) + { + for(j=from;j<to;j++) + { + if(j==i) + { + memcpy( led_data[star_line[j]] , dat , 3 ); + } + else + { + near( led_data[star_line[j]] , base_led_data[star_line[j]] , 5 ); + } + } + send_led(); + wait_ms(speed); + + } + + i = 0; + j = 1; + while(i!=(abs(from-to))) + { + i = 0; + for(j=from;j<to;j++) + { + i += near( led_data[star_line[j]] , base_led_data[star_line[j]] , 10 ); + } + send_led(); + wait_ms(speed); + } + } + else + { + for(i=from;i>to;i--) + { + memcpy( led_data[star_line[i]] , base_led_data[star_line[i]] , 3 ); + } + + send_led(); + wait_ms(speed); + + for(i=from;i>to;i--) + { + for(j=from;j>to;j--) + { + if(j==i) + { + memcpy( led_data[star_line[j]] , dat , 3 ); + } + else + { + near( led_data[star_line[j]] , base_led_data[star_line[j]] , 5 ); + } + } + send_led(); + wait_ms(speed); + } + + i = 0; + j = 1; +#if 0 + while(i!=(abs(from-to))) + { + i = 0; + for(j=from;j>to;j--) + { + i += near( led_data[star_line[j]] , base_led_data[star_line[j]] , 5 ); + } + send_led(); + wait_ms(speed); + } +#endif + } + + return(0); +} + +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); + } +} + +void back_base(void) +{ + for(int i=0;i<LED_NUM;i++) + { + near( led_data[i] , base_led_data[i] , 5 ); + send_led(); + } +} + +int glad(int i,unsigned char *dat) +{ + i = i % 0x2FE; + + if( i < 0xFF ) + { + dat[0] = 0xFF * cos(PI/(510.0f/(double)i)); + dat[1] = 0xFF * sin(PI/(510.0f/(double)i)); + dat[2] = 0; + } + else if((i >= 0xFF)&&( i < 0x1FE )) + { + i -= 0xFF; + dat[0] = 0; + dat[1] = 0xFF * cos(PI/(510.0f/(double)i)); + dat[2] = 0xFF * sin(PI/(510.0f/(double)i)); + } + else if((i >= 0x1FE )&&( i < 0x2FD )) + { + i -= 0x1FE; + dat[0] = 0xFF * sin(PI/(510.0f/(double)i)); + dat[1] = 0; + dat[2] = 0xFF * cos(PI/(510.0f/(double)i)); + } + return(0); + +} + +void idle_cycle(int like) { + static int old_like_count_i = 0; + static int cycle = 0; + static int gorl_flag = 0; + static int gol_count = 0; + int point = STAR_LINE_MAX - like; //STAR_LINE_MAX - (int)((float)like / ((float)max_count / (float)STAR_LINE_MAX)); + + cycle++; + + if( old_like_count_i != like ) { + + flipper.detach(); + + if( like < max_count ) { + for(int j=0;j<60;j++) { + memcpy( led_data[j] , base_led_data[j] , 3 ); + } + printf("COUNT!! %d\r\n",point); + flow_star(0,point+1,_YELLOW,20); + flow_star(point,point+1,color_line[point],_WHITE,50); + flow_star(point,point+1,color_line[point],_WHITE,50); + flow_star(point,point+1,_WHITE,color_line[point],50); + memcpy(base_led_data[star_line[point]] , color_line[point] , 3 ); + } + else if(gorl_flag == 0) { + gorl_flag = 1; + flow_star(0,STAR_LINE_MAX,_RED,10); + flow_star(0,STAR_LINE_MAX,_PURPLE,10); + flow_star(0,STAR_LINE_MAX,_BLUE,10); + flow_star(0,STAR_LINE_MAX,_AQUA,10); + flow_star(0,STAR_LINE_MAX,_RED,10); + flow_star(0,STAR_LINE_MAX,_GREEN,10); + flow_star(0,STAR_LINE_MAX,_YELLOW,_OFF,30); + } + else { + flow_star(0,STAR_LINE_MAX,_YELLOW,30); + } + + flipper.attach(&flip, 2.0); + } + old_like_count_i = like; + + if(gorl_flag == 1) { + for(int j=0;j<60;j++) { + glad(gol_count+(j*80),base_led_data[j]); + memcpy( led_data[j] , base_led_data[j] , 3 ); + } + } + else { + for(int i=0;i<STAR_LINE_MAX;i++) { + if( i >= point ) { + memcpy(base_led_data[star_line[i]] , color_line[i] , 3 ); + } + } + } + + back_base(); + + gol_count += 30 ; + if( gol_count >= 0x2FD ) { + gol_count = 0; + } + +} + +void like_change(int like) +{ + +} + +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 flip() { + // like_count += 1; + led_data[star_line[demo_count]][0] /= 2; + led_data[star_line[demo_count]][1] /= 2; + led_data[star_line[demo_count]][2] /= 2; + + demo_count += 1; + + if( demo_count >= STAR_LINE_MAX ) + { + demo_count = 0; + } +} + int main() { -// void setup() { - pc.baud(9600); + int old_like_count = 1; + char tag[64]; + char tmp[5]; + char tmp2[5]; + + SW1.mode(PullUp); + SW2.mode(PullUp); + + if( SW1 == 0 ) { // DEMO MODE + tapeInit(0, LED_NUM+2); + + while(1) { + flow_star(0,STAR_LINE_MAX,_RED ,_OFF,30); + wait(0.5); + flow_star(0,STAR_LINE_MAX,_PURPLE,_OFF,30); + wait(0.5); + flow_star(0,STAR_LINE_MAX,_BLUE ,_OFF,30); + wait(0.5); + flow_star(0,STAR_LINE_MAX,_AQUA ,_OFF,30); + wait(0.5); + flow_star(0,STAR_LINE_MAX,_GREEN ,_OFF,30); + wait(0.5); + flow_star(0,STAR_LINE_MAX,_YELLOW,_OFF,30); + wait(0.5); + } + } +#if 0 + cfg.read("/local/env.ini"); + + if (cfg.getValue("TAG", &tag[0], sizeof(tag))) { + printf("'%s'='%s'\n\r", "TAG", tag); + } + else + { + sprintf(tag,"ma9"); + } + if (cfg.getValue("COUNT", &tmp[0], sizeof(tmp))) { + printf("'%s'='%s'\n\r", "COUNT", tmp); + like_count = atoi(tmp); + } + else + { + like_count = 0; + } + if (cfg.getValue("MAX", &tmp2[0], sizeof(tmp2))) { + printf("'%s'='%s'\n\r", "MAX", tmp2); + max_count = atoi(tmp2); + } + else + { + max_count = 0; + } +#endif + like_count = 0; + max_count = 60; + + printf("ini file read\r\n"); + printf("HashTag:%s\r\n",tag); + printf("Now Count:%d\r\n",like_count); + printf("Max Count:%d\r\n",max_count); + + stat_led1 = 1; + + for(int i=0;i<LED_NUM;i++) { + memcpy( led_data[i] , _OFF , 3 ); + memcpy( base_led_data[i] , _DARK_GLAY , 3 ); + } + + tapeInit(0, LED_NUM+2); + + send_led(); + + slow_light_all(_DARK_GLAY , 50); + MQTTEthernet *ipstack = new MQTTEthernet(); MClient *client = new MClient(ipstack); Milkcocoa *milkcocoa = new Milkcocoa(client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID); pc.printf("Milkcocoa mbed ver demo\n\r\n\r\n\r"); + + + wait(2); milkcocoa->connect(); - pc.printf("\n\rEther connected\n\r"); + while(milkcocoa->getConnectStatus()!=1) { + pc.printf("\n\rEther connected error\n\r"); + pc.printf("\n\rEther re connect\n\r"); + ipstack->reconnect(); + wait(2); + milkcocoa->connect(); + } + + stat_led2 = 1; - pc.printf("%d\n\r",milkcocoa->on(MILKCOCOA_DATASTORE, "push", onpush)); + int ret = milkcocoa->on(MILKCOCOA_DATASTORE, "push", onpush); + pc.printf("%d\n\r",ret); + while(ret != 1){ + wait(1); + pc.printf("%d\n\r",ret); + ret = milkcocoa->on(MILKCOCOA_DATASTORE, "push", onpush); + } + + stat_led3 = 1; -// } - while(1) { -// void loop() { - milkcocoa->loop(); + while(1) + { + milkcocoa->loop(); + + if(like_count != old_like_count) + { + printf("%04d\r\n",like_count); + sprintf(&tmp[0],"%d",like_count); + //cfg.setValue("COUNT", tmp); + if(cfg.write("/local/env.ini")) + { + printf("SET COUNT\r\n"); + } + else + { + printf("SET ERR\r\n"); + } + old_like_count = like_count; + } + + idle_cycle(like_count); - DataElement elem = DataElement(); - elem.setValue("v", 1); - - milkcocoa->push(MILKCOCOA_DATASTORE, elem); - wait(7.0); + stat_led4 = !stat_led4; + } } void onpush(MQTT::MessageData& md) { MQTT::Message &message = md.message; - DataElement de = DataElement((char*)message.payload); - pc.printf("onpush\n\r"); - pc.printf("%d\n\r",de.getInt("v")); -} \ No newline at end of file + DataElement de = DataElement((char*)message.payload); + printf("onpush\n\r"); + like_count++; +} + +