test

Dependencies:   EthernetInterface Milkcocoa_EthernetIF mbed-rtos mbed

Fork of MilkcocoaSample_Eth by Junichi Katsu

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++;
+}
+
+