データの保存、更新、取得ができるWebサービス「milkcocoa」に接続し、データのプッシュ、送信、取得ができるライブラリを使ったサンプルです。 EthernetIF版 https://mlkcca.com/
Dependencies: EthernetInterface Milkcocoa_EthernetIF mbed-rtos mbed
main.cpp@9:561182aac695, 2017-10-31 (annotated)
- Committer:
- jksoft
- Date:
- Tue Oct 31 09:26:44 2017 +0000
- Revision:
- 9:561182aac695
- Parent:
- 8:25a9bc3ca875
??
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jksoft | 0:92848fdd9379 | 1 | #include "mbed.h" |
jksoft | 9:561182aac695 | 2 | #include "LEDStrip.h" |
jksoft | 9:561182aac695 | 3 | #include "ConfigFile.h" |
jksoft | 0:92848fdd9379 | 4 | #include "MQTTEthernet.h" |
jksoft | 0:92848fdd9379 | 5 | #include "MQTTClient.h" |
jksoft | 0:92848fdd9379 | 6 | #include "Milkcocoa.h" |
jksoft | 0:92848fdd9379 | 7 | #include "MClient.h" |
jksoft | 0:92848fdd9379 | 8 | |
jksoft | 9:561182aac695 | 9 | #define LED_NUM 60 |
jksoft | 9:561182aac695 | 10 | #define LED_DATA_NUM 3 |
jksoft | 9:561182aac695 | 11 | #define PI 3.14159265359f |
jksoft | 9:561182aac695 | 12 | #define MAX_COUNT 60 |
jksoft | 9:561182aac695 | 13 | #define STAR_LINE_MAX 60 |
jksoft | 9:561182aac695 | 14 | |
jksoft | 9:561182aac695 | 15 | #if 0 |
jksoft | 9:561182aac695 | 16 | #define DBG(x) x |
jksoft | 9:561182aac695 | 17 | #else |
jksoft | 9:561182aac695 | 18 | #define DBG(x) |
jksoft | 9:561182aac695 | 19 | #endif |
jksoft | 0:92848fdd9379 | 20 | |
jksoft | 0:92848fdd9379 | 21 | /************************* Your Milkcocoa Setup *********************************/ |
jksoft | 9:561182aac695 | 22 | #define MILKCOCOA_APP_ID "juicej2vchzis" |
jksoft | 9:561182aac695 | 23 | #define MILKCOCOA_DATASTORE "halloween" |
jksoft | 9:561182aac695 | 24 | |
jksoft | 0:92848fdd9379 | 25 | /************* Milkcocoa Setup (you don't need to change this!) ******************/ |
jksoft | 9:561182aac695 | 26 | |
jksoft | 0:92848fdd9379 | 27 | #define MILKCOCOA_SERVERPORT 1883 |
jksoft | 8:25a9bc3ca875 | 28 | |
jksoft | 0:92848fdd9379 | 29 | /************ Global State (you don't need to change this!) ******************/ |
jksoft | 9:561182aac695 | 30 | |
jksoft | 0:92848fdd9379 | 31 | const char MQTT_SERVER[] = MILKCOCOA_APP_ID ".mlkcca.com"; |
jksoft | 0:92848fdd9379 | 32 | const char MQTT_CLIENTID[] = __TIME__ MILKCOCOA_APP_ID; |
jksoft | 9:561182aac695 | 33 | |
jksoft | 0:92848fdd9379 | 34 | extern void onpush(MQTT::MessageData& md); |
jksoft | 0:92848fdd9379 | 35 | |
jksoft | 9:561182aac695 | 36 | Serial pc(USBTX, USBRX); |
jksoft | 9:561182aac695 | 37 | LocalFileSystem local("local"); |
jksoft | 9:561182aac695 | 38 | Ticker flipper; |
jksoft | 9:561182aac695 | 39 | ConfigFile cfg; |
jksoft | 9:561182aac695 | 40 | DigitalIn SW1(p25); |
jksoft | 9:561182aac695 | 41 | DigitalIn SW2(p26); |
jksoft | 9:561182aac695 | 42 | DigitalOut stat_led1(LED1); |
jksoft | 9:561182aac695 | 43 | DigitalOut stat_led2(LED2); |
jksoft | 9:561182aac695 | 44 | DigitalOut stat_led3(LED3); |
jksoft | 9:561182aac695 | 45 | DigitalOut stat_led4(LED4); |
jksoft | 9:561182aac695 | 46 | |
jksoft | 9:561182aac695 | 47 | |
jksoft | 9:561182aac695 | 48 | |
jksoft | 9:561182aac695 | 49 | void flip(); |
jksoft | 9:561182aac695 | 50 | |
jksoft | 9:561182aac695 | 51 | bool completed = false; |
jksoft | 9:561182aac695 | 52 | int t_timer = 0; |
jksoft | 9:561182aac695 | 53 | int like_count = 0; |
jksoft | 9:561182aac695 | 54 | int max_count = 0; |
jksoft | 9:561182aac695 | 55 | int demo_count = 0; |
jksoft | 9:561182aac695 | 56 | |
jksoft | 9:561182aac695 | 57 | const unsigned char _RED[3] = { 0xFF, 0 , 0 }; |
jksoft | 9:561182aac695 | 58 | const unsigned char _GREEN[3] = { 0 , 0xFF, 0 }; |
jksoft | 9:561182aac695 | 59 | const unsigned char _BLUE[3] = { 0 , 0 , 0xFF }; |
jksoft | 9:561182aac695 | 60 | const unsigned char _YELLOW[3] = { 0xFF, 0xFF, 0 }; |
jksoft | 9:561182aac695 | 61 | const unsigned char _PURPLE[3] = { 0xFF, 0 , 0xFF }; |
jksoft | 9:561182aac695 | 62 | const unsigned char _AQUA[3] = { 0 , 0xFF, 0xFF }; |
jksoft | 9:561182aac695 | 63 | const unsigned char _WHITE[3] = { 0xFF, 0xFF, 0xFF }; |
jksoft | 9:561182aac695 | 64 | const unsigned char _GLAY[3] = { 0x80, 0x80, 0x80 }; |
jksoft | 9:561182aac695 | 65 | const unsigned char _DARK_GLAY[3] = { 0x2, 0x2, 0x2 }; |
jksoft | 9:561182aac695 | 66 | const unsigned char _OFF[3] = { 0, 0, 0 }; |
jksoft | 9:561182aac695 | 67 | |
jksoft | 9:561182aac695 | 68 | unsigned char led_data[60][3]; |
jksoft | 9:561182aac695 | 69 | |
jksoft | 9:561182aac695 | 70 | unsigned char base_led_data[60][3]; |
jksoft | 9:561182aac695 | 71 | |
jksoft | 9:561182aac695 | 72 | unsigned char star_line[STAR_LINE_MAX] = { |
jksoft | 9:561182aac695 | 73 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, |
jksoft | 9:561182aac695 | 74 | 10,11,12,13,14,15,16,17,18,19, |
jksoft | 9:561182aac695 | 75 | 20,21,22,23,24,25,26,27,28,29, |
jksoft | 9:561182aac695 | 76 | 30,31,32,33,34,35,36,37,38,39, |
jksoft | 9:561182aac695 | 77 | 40,41,42,43,44,45,46,47,48,49, |
jksoft | 9:561182aac695 | 78 | 50,51,52,53,54,55,56,57,58,59 |
jksoft | 9:561182aac695 | 79 | }; |
jksoft | 9:561182aac695 | 80 | |
jksoft | 9:561182aac695 | 81 | unsigned char color_line[STAR_LINE_MAX][3] = |
jksoft | 9:561182aac695 | 82 | { |
jksoft | 9:561182aac695 | 83 | { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, |
jksoft | 9:561182aac695 | 84 | { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, |
jksoft | 9:561182aac695 | 85 | { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 }, |
jksoft | 9:561182aac695 | 86 | { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, |
jksoft | 9:561182aac695 | 87 | { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, |
jksoft | 9:561182aac695 | 88 | { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 }, |
jksoft | 9:561182aac695 | 89 | { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, |
jksoft | 9:561182aac695 | 90 | { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, |
jksoft | 9:561182aac695 | 91 | { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 }, |
jksoft | 9:561182aac695 | 92 | { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, |
jksoft | 9:561182aac695 | 93 | { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, |
jksoft | 9:561182aac695 | 94 | { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 }, |
jksoft | 9:561182aac695 | 95 | { 0xFF, 0x00, 0x00 },{ 0xFF, 0x80, 0x00 },{ 0xFF, 0xFF, 0x00 },{ 0x80, 0xFF, 0x00 }, |
jksoft | 9:561182aac695 | 96 | { 0x00, 0xFF, 0x00 },{ 0x00, 0xFF, 0x80 },{ 0x00, 0xFF, 0xFF },{ 0x00, 0x80, 0xFF }, |
jksoft | 9:561182aac695 | 97 | { 0x00, 0x00, 0xFF },{ 0x80, 0x00, 0xFF },{ 0xFF, 0x00, 0xFF },{ 0xFF, 0x00, 0x80 } |
jksoft | 9:561182aac695 | 98 | |
jksoft | 9:561182aac695 | 99 | }; |
jksoft | 9:561182aac695 | 100 | |
jksoft | 9:561182aac695 | 101 | extern void send_led(); |
jksoft | 9:561182aac695 | 102 | |
jksoft | 9:561182aac695 | 103 | int DownLight(unsigned char *dat,int value) |
jksoft | 9:561182aac695 | 104 | { |
jksoft | 9:561182aac695 | 105 | for(int i=0;i<LED_DATA_NUM;i++) |
jksoft | 9:561182aac695 | 106 | { |
jksoft | 9:561182aac695 | 107 | if( dat[i] > value ) |
jksoft | 9:561182aac695 | 108 | { |
jksoft | 9:561182aac695 | 109 | dat[i] = dat[i] - value; |
jksoft | 9:561182aac695 | 110 | } |
jksoft | 9:561182aac695 | 111 | } |
jksoft | 9:561182aac695 | 112 | return(0); |
jksoft | 9:561182aac695 | 113 | } |
jksoft | 9:561182aac695 | 114 | |
jksoft | 9:561182aac695 | 115 | int near(unsigned char *from_dat,const unsigned char *to_dat,int wide) |
jksoft | 9:561182aac695 | 116 | { |
jksoft | 9:561182aac695 | 117 | int ret_code_l = 1; |
jksoft | 9:561182aac695 | 118 | |
jksoft | 9:561182aac695 | 119 | for( int i=0;i<LED_DATA_NUM;i++) |
jksoft | 9:561182aac695 | 120 | { |
jksoft | 9:561182aac695 | 121 | if( from_dat[i] < to_dat[i] ) |
jksoft | 9:561182aac695 | 122 | { |
jksoft | 9:561182aac695 | 123 | if( (from_dat[i]+wide) < to_dat[i] ) |
jksoft | 9:561182aac695 | 124 | { |
jksoft | 9:561182aac695 | 125 | from_dat[i] = from_dat[i] + wide; |
jksoft | 9:561182aac695 | 126 | ret_code_l = 0; |
jksoft | 9:561182aac695 | 127 | } |
jksoft | 9:561182aac695 | 128 | else |
jksoft | 9:561182aac695 | 129 | { |
jksoft | 9:561182aac695 | 130 | from_dat[i] = to_dat[i]; |
jksoft | 9:561182aac695 | 131 | |
jksoft | 9:561182aac695 | 132 | } |
jksoft | 9:561182aac695 | 133 | } |
jksoft | 9:561182aac695 | 134 | else if( from_dat[i] > to_dat[i] ) |
jksoft | 9:561182aac695 | 135 | { |
jksoft | 9:561182aac695 | 136 | if( (from_dat[i]-wide) > to_dat[i]) |
jksoft | 9:561182aac695 | 137 | { |
jksoft | 9:561182aac695 | 138 | from_dat[i] -= wide; |
jksoft | 9:561182aac695 | 139 | ret_code_l = 0; |
jksoft | 9:561182aac695 | 140 | } |
jksoft | 9:561182aac695 | 141 | else |
jksoft | 9:561182aac695 | 142 | { |
jksoft | 9:561182aac695 | 143 | from_dat[i] = to_dat[i]; |
jksoft | 9:561182aac695 | 144 | } |
jksoft | 9:561182aac695 | 145 | } |
jksoft | 9:561182aac695 | 146 | } |
jksoft | 9:561182aac695 | 147 | |
jksoft | 9:561182aac695 | 148 | return(ret_code_l); |
jksoft | 9:561182aac695 | 149 | } |
jksoft | 9:561182aac695 | 150 | |
jksoft | 9:561182aac695 | 151 | int flow_star(int from,int to,const unsigned char *dat,const unsigned char *base_dat,int speed) |
jksoft | 9:561182aac695 | 152 | { |
jksoft | 9:561182aac695 | 153 | int i,j; |
jksoft | 9:561182aac695 | 154 | |
jksoft | 9:561182aac695 | 155 | if( from < to ) |
jksoft | 9:561182aac695 | 156 | { |
jksoft | 9:561182aac695 | 157 | for(i=from;i<to;i++) |
jksoft | 9:561182aac695 | 158 | { |
jksoft | 9:561182aac695 | 159 | memcpy( led_data[star_line[i]] , base_dat , 3 ); |
jksoft | 9:561182aac695 | 160 | } |
jksoft | 9:561182aac695 | 161 | |
jksoft | 9:561182aac695 | 162 | send_led(); |
jksoft | 9:561182aac695 | 163 | wait_ms(speed); |
jksoft | 9:561182aac695 | 164 | |
jksoft | 9:561182aac695 | 165 | for(i=from;i<to;i++) |
jksoft | 9:561182aac695 | 166 | { |
jksoft | 9:561182aac695 | 167 | for(j=from;j<to;j++) |
jksoft | 9:561182aac695 | 168 | { |
jksoft | 9:561182aac695 | 169 | if(j==i) |
jksoft | 9:561182aac695 | 170 | { |
jksoft | 9:561182aac695 | 171 | memcpy( led_data[star_line[j]] , dat , 3 ); |
jksoft | 9:561182aac695 | 172 | } |
jksoft | 9:561182aac695 | 173 | else |
jksoft | 9:561182aac695 | 174 | { |
jksoft | 9:561182aac695 | 175 | near( led_data[star_line[j]] , base_dat , 5 ); |
jksoft | 9:561182aac695 | 176 | } |
jksoft | 9:561182aac695 | 177 | } |
jksoft | 9:561182aac695 | 178 | send_led(); |
jksoft | 9:561182aac695 | 179 | wait_ms(speed); |
jksoft | 9:561182aac695 | 180 | |
jksoft | 9:561182aac695 | 181 | } |
jksoft | 9:561182aac695 | 182 | |
jksoft | 9:561182aac695 | 183 | i = 0; |
jksoft | 9:561182aac695 | 184 | j = 1; |
jksoft | 9:561182aac695 | 185 | while(i!=(abs(from-to))) |
jksoft | 9:561182aac695 | 186 | { |
jksoft | 9:561182aac695 | 187 | i = 0; |
jksoft | 9:561182aac695 | 188 | for(j=from;j<to;j++) |
jksoft | 9:561182aac695 | 189 | { |
jksoft | 9:561182aac695 | 190 | i += near( led_data[star_line[j]] , base_dat , 10 ); |
jksoft | 9:561182aac695 | 191 | } |
jksoft | 9:561182aac695 | 192 | send_led(); |
jksoft | 9:561182aac695 | 193 | wait_ms(speed); |
jksoft | 9:561182aac695 | 194 | } |
jksoft | 9:561182aac695 | 195 | } |
jksoft | 9:561182aac695 | 196 | else |
jksoft | 9:561182aac695 | 197 | { |
jksoft | 9:561182aac695 | 198 | for(i=from;i>to;i--) |
jksoft | 9:561182aac695 | 199 | { |
jksoft | 9:561182aac695 | 200 | memcpy( led_data[star_line[i]] , base_dat , 3 ); |
jksoft | 9:561182aac695 | 201 | } |
jksoft | 9:561182aac695 | 202 | |
jksoft | 9:561182aac695 | 203 | send_led(); |
jksoft | 9:561182aac695 | 204 | wait_ms(speed); |
jksoft | 9:561182aac695 | 205 | |
jksoft | 9:561182aac695 | 206 | for(i=from;i>to;i--) |
jksoft | 9:561182aac695 | 207 | { |
jksoft | 9:561182aac695 | 208 | for(j=from;j>to;j--) |
jksoft | 9:561182aac695 | 209 | { |
jksoft | 9:561182aac695 | 210 | if(j==i) |
jksoft | 9:561182aac695 | 211 | { |
jksoft | 9:561182aac695 | 212 | memcpy( led_data[star_line[j]] , dat , 3 ); |
jksoft | 9:561182aac695 | 213 | } |
jksoft | 9:561182aac695 | 214 | else |
jksoft | 9:561182aac695 | 215 | { |
jksoft | 9:561182aac695 | 216 | near( led_data[star_line[j]] , base_dat , 5 ); |
jksoft | 9:561182aac695 | 217 | } |
jksoft | 9:561182aac695 | 218 | } |
jksoft | 9:561182aac695 | 219 | send_led(); |
jksoft | 9:561182aac695 | 220 | wait_ms(speed); |
jksoft | 9:561182aac695 | 221 | } |
jksoft | 9:561182aac695 | 222 | |
jksoft | 9:561182aac695 | 223 | i = 0; |
jksoft | 9:561182aac695 | 224 | j = 1; |
jksoft | 9:561182aac695 | 225 | while(i!=(abs(from-to))) |
jksoft | 9:561182aac695 | 226 | { |
jksoft | 9:561182aac695 | 227 | i = 0; |
jksoft | 9:561182aac695 | 228 | for(j=from;j>to;j--) |
jksoft | 9:561182aac695 | 229 | { |
jksoft | 9:561182aac695 | 230 | i += near( led_data[star_line[j]] , base_dat , 5 ); |
jksoft | 9:561182aac695 | 231 | } |
jksoft | 9:561182aac695 | 232 | send_led(); |
jksoft | 9:561182aac695 | 233 | wait_ms(speed); |
jksoft | 9:561182aac695 | 234 | } |
jksoft | 9:561182aac695 | 235 | } |
jksoft | 9:561182aac695 | 236 | |
jksoft | 9:561182aac695 | 237 | return(0); |
jksoft | 9:561182aac695 | 238 | } |
jksoft | 9:561182aac695 | 239 | |
jksoft | 9:561182aac695 | 240 | int flow_star(int from,int to,const unsigned char *dat,int speed) |
jksoft | 9:561182aac695 | 241 | { |
jksoft | 9:561182aac695 | 242 | int i,j; |
jksoft | 9:561182aac695 | 243 | |
jksoft | 9:561182aac695 | 244 | if( from < to ) |
jksoft | 9:561182aac695 | 245 | { |
jksoft | 9:561182aac695 | 246 | for(i=from;i<to;i++) |
jksoft | 9:561182aac695 | 247 | { |
jksoft | 9:561182aac695 | 248 | memcpy( led_data[star_line[i]] , base_led_data[star_line[i]] , 3 ); |
jksoft | 9:561182aac695 | 249 | } |
jksoft | 9:561182aac695 | 250 | |
jksoft | 9:561182aac695 | 251 | send_led(); |
jksoft | 9:561182aac695 | 252 | wait_ms(speed); |
jksoft | 9:561182aac695 | 253 | |
jksoft | 9:561182aac695 | 254 | for(i=from;i<to;i++) |
jksoft | 9:561182aac695 | 255 | { |
jksoft | 9:561182aac695 | 256 | for(j=from;j<to;j++) |
jksoft | 9:561182aac695 | 257 | { |
jksoft | 9:561182aac695 | 258 | if(j==i) |
jksoft | 9:561182aac695 | 259 | { |
jksoft | 9:561182aac695 | 260 | memcpy( led_data[star_line[j]] , dat , 3 ); |
jksoft | 9:561182aac695 | 261 | } |
jksoft | 9:561182aac695 | 262 | else |
jksoft | 9:561182aac695 | 263 | { |
jksoft | 9:561182aac695 | 264 | near( led_data[star_line[j]] , base_led_data[star_line[j]] , 5 ); |
jksoft | 9:561182aac695 | 265 | } |
jksoft | 9:561182aac695 | 266 | } |
jksoft | 9:561182aac695 | 267 | send_led(); |
jksoft | 9:561182aac695 | 268 | wait_ms(speed); |
jksoft | 9:561182aac695 | 269 | |
jksoft | 9:561182aac695 | 270 | } |
jksoft | 9:561182aac695 | 271 | |
jksoft | 9:561182aac695 | 272 | i = 0; |
jksoft | 9:561182aac695 | 273 | j = 1; |
jksoft | 9:561182aac695 | 274 | while(i!=(abs(from-to))) |
jksoft | 9:561182aac695 | 275 | { |
jksoft | 9:561182aac695 | 276 | i = 0; |
jksoft | 9:561182aac695 | 277 | for(j=from;j<to;j++) |
jksoft | 9:561182aac695 | 278 | { |
jksoft | 9:561182aac695 | 279 | i += near( led_data[star_line[j]] , base_led_data[star_line[j]] , 10 ); |
jksoft | 9:561182aac695 | 280 | } |
jksoft | 9:561182aac695 | 281 | send_led(); |
jksoft | 9:561182aac695 | 282 | wait_ms(speed); |
jksoft | 9:561182aac695 | 283 | } |
jksoft | 9:561182aac695 | 284 | } |
jksoft | 9:561182aac695 | 285 | else |
jksoft | 9:561182aac695 | 286 | { |
jksoft | 9:561182aac695 | 287 | for(i=from;i>to;i--) |
jksoft | 9:561182aac695 | 288 | { |
jksoft | 9:561182aac695 | 289 | memcpy( led_data[star_line[i]] , base_led_data[star_line[i]] , 3 ); |
jksoft | 9:561182aac695 | 290 | } |
jksoft | 9:561182aac695 | 291 | |
jksoft | 9:561182aac695 | 292 | send_led(); |
jksoft | 9:561182aac695 | 293 | wait_ms(speed); |
jksoft | 9:561182aac695 | 294 | |
jksoft | 9:561182aac695 | 295 | for(i=from;i>to;i--) |
jksoft | 9:561182aac695 | 296 | { |
jksoft | 9:561182aac695 | 297 | for(j=from;j>to;j--) |
jksoft | 9:561182aac695 | 298 | { |
jksoft | 9:561182aac695 | 299 | if(j==i) |
jksoft | 9:561182aac695 | 300 | { |
jksoft | 9:561182aac695 | 301 | memcpy( led_data[star_line[j]] , dat , 3 ); |
jksoft | 9:561182aac695 | 302 | } |
jksoft | 9:561182aac695 | 303 | else |
jksoft | 9:561182aac695 | 304 | { |
jksoft | 9:561182aac695 | 305 | near( led_data[star_line[j]] , base_led_data[star_line[j]] , 5 ); |
jksoft | 9:561182aac695 | 306 | } |
jksoft | 9:561182aac695 | 307 | } |
jksoft | 9:561182aac695 | 308 | send_led(); |
jksoft | 9:561182aac695 | 309 | wait_ms(speed); |
jksoft | 9:561182aac695 | 310 | } |
jksoft | 9:561182aac695 | 311 | |
jksoft | 9:561182aac695 | 312 | i = 0; |
jksoft | 9:561182aac695 | 313 | j = 1; |
jksoft | 9:561182aac695 | 314 | #if 0 |
jksoft | 9:561182aac695 | 315 | while(i!=(abs(from-to))) |
jksoft | 9:561182aac695 | 316 | { |
jksoft | 9:561182aac695 | 317 | i = 0; |
jksoft | 9:561182aac695 | 318 | for(j=from;j>to;j--) |
jksoft | 9:561182aac695 | 319 | { |
jksoft | 9:561182aac695 | 320 | i += near( led_data[star_line[j]] , base_led_data[star_line[j]] , 5 ); |
jksoft | 9:561182aac695 | 321 | } |
jksoft | 9:561182aac695 | 322 | send_led(); |
jksoft | 9:561182aac695 | 323 | wait_ms(speed); |
jksoft | 9:561182aac695 | 324 | } |
jksoft | 9:561182aac695 | 325 | #endif |
jksoft | 9:561182aac695 | 326 | } |
jksoft | 9:561182aac695 | 327 | |
jksoft | 9:561182aac695 | 328 | return(0); |
jksoft | 9:561182aac695 | 329 | } |
jksoft | 9:561182aac695 | 330 | |
jksoft | 9:561182aac695 | 331 | void slow_light_all(const unsigned char *base_dat,int speed) |
jksoft | 9:561182aac695 | 332 | { |
jksoft | 9:561182aac695 | 333 | int i,j; |
jksoft | 9:561182aac695 | 334 | while(i!=LED_NUM) |
jksoft | 9:561182aac695 | 335 | { |
jksoft | 9:561182aac695 | 336 | i = 0; |
jksoft | 9:561182aac695 | 337 | for(j=0;j<LED_NUM;j++) |
jksoft | 9:561182aac695 | 338 | { |
jksoft | 9:561182aac695 | 339 | i += near( led_data[j] , base_dat , 5 ); |
jksoft | 9:561182aac695 | 340 | } |
jksoft | 9:561182aac695 | 341 | send_led(); |
jksoft | 9:561182aac695 | 342 | wait_ms(speed); |
jksoft | 9:561182aac695 | 343 | } |
jksoft | 9:561182aac695 | 344 | } |
jksoft | 9:561182aac695 | 345 | |
jksoft | 9:561182aac695 | 346 | void back_base(void) |
jksoft | 9:561182aac695 | 347 | { |
jksoft | 9:561182aac695 | 348 | for(int i=0;i<LED_NUM;i++) |
jksoft | 9:561182aac695 | 349 | { |
jksoft | 9:561182aac695 | 350 | near( led_data[i] , base_led_data[i] , 5 ); |
jksoft | 9:561182aac695 | 351 | send_led(); |
jksoft | 9:561182aac695 | 352 | } |
jksoft | 9:561182aac695 | 353 | } |
jksoft | 9:561182aac695 | 354 | |
jksoft | 9:561182aac695 | 355 | int glad(int i,unsigned char *dat) |
jksoft | 9:561182aac695 | 356 | { |
jksoft | 9:561182aac695 | 357 | i = i % 0x2FE; |
jksoft | 9:561182aac695 | 358 | |
jksoft | 9:561182aac695 | 359 | if( i < 0xFF ) |
jksoft | 9:561182aac695 | 360 | { |
jksoft | 9:561182aac695 | 361 | dat[0] = 0xFF * cos(PI/(510.0f/(double)i)); |
jksoft | 9:561182aac695 | 362 | dat[1] = 0xFF * sin(PI/(510.0f/(double)i)); |
jksoft | 9:561182aac695 | 363 | dat[2] = 0; |
jksoft | 9:561182aac695 | 364 | } |
jksoft | 9:561182aac695 | 365 | else if((i >= 0xFF)&&( i < 0x1FE )) |
jksoft | 9:561182aac695 | 366 | { |
jksoft | 9:561182aac695 | 367 | i -= 0xFF; |
jksoft | 9:561182aac695 | 368 | dat[0] = 0; |
jksoft | 9:561182aac695 | 369 | dat[1] = 0xFF * cos(PI/(510.0f/(double)i)); |
jksoft | 9:561182aac695 | 370 | dat[2] = 0xFF * sin(PI/(510.0f/(double)i)); |
jksoft | 9:561182aac695 | 371 | } |
jksoft | 9:561182aac695 | 372 | else if((i >= 0x1FE )&&( i < 0x2FD )) |
jksoft | 9:561182aac695 | 373 | { |
jksoft | 9:561182aac695 | 374 | i -= 0x1FE; |
jksoft | 9:561182aac695 | 375 | dat[0] = 0xFF * sin(PI/(510.0f/(double)i)); |
jksoft | 9:561182aac695 | 376 | dat[1] = 0; |
jksoft | 9:561182aac695 | 377 | dat[2] = 0xFF * cos(PI/(510.0f/(double)i)); |
jksoft | 9:561182aac695 | 378 | } |
jksoft | 9:561182aac695 | 379 | return(0); |
jksoft | 9:561182aac695 | 380 | |
jksoft | 9:561182aac695 | 381 | } |
jksoft | 9:561182aac695 | 382 | |
jksoft | 9:561182aac695 | 383 | void idle_cycle(int like) { |
jksoft | 9:561182aac695 | 384 | static int old_like_count_i = 0; |
jksoft | 9:561182aac695 | 385 | static int cycle = 0; |
jksoft | 9:561182aac695 | 386 | static int gorl_flag = 0; |
jksoft | 9:561182aac695 | 387 | static int gol_count = 0; |
jksoft | 9:561182aac695 | 388 | int point = STAR_LINE_MAX - like; //STAR_LINE_MAX - (int)((float)like / ((float)max_count / (float)STAR_LINE_MAX)); |
jksoft | 9:561182aac695 | 389 | |
jksoft | 9:561182aac695 | 390 | cycle++; |
jksoft | 9:561182aac695 | 391 | |
jksoft | 9:561182aac695 | 392 | if( old_like_count_i != like ) { |
jksoft | 9:561182aac695 | 393 | |
jksoft | 9:561182aac695 | 394 | flipper.detach(); |
jksoft | 9:561182aac695 | 395 | |
jksoft | 9:561182aac695 | 396 | if( like < max_count ) { |
jksoft | 9:561182aac695 | 397 | for(int j=0;j<60;j++) { |
jksoft | 9:561182aac695 | 398 | memcpy( led_data[j] , base_led_data[j] , 3 ); |
jksoft | 9:561182aac695 | 399 | } |
jksoft | 9:561182aac695 | 400 | printf("COUNT!! %d\r\n",point); |
jksoft | 9:561182aac695 | 401 | flow_star(0,point+1,_YELLOW,20); |
jksoft | 9:561182aac695 | 402 | flow_star(point,point+1,color_line[point],_WHITE,50); |
jksoft | 9:561182aac695 | 403 | flow_star(point,point+1,color_line[point],_WHITE,50); |
jksoft | 9:561182aac695 | 404 | flow_star(point,point+1,_WHITE,color_line[point],50); |
jksoft | 9:561182aac695 | 405 | memcpy(base_led_data[star_line[point]] , color_line[point] , 3 ); |
jksoft | 9:561182aac695 | 406 | } |
jksoft | 9:561182aac695 | 407 | else if(gorl_flag == 0) { |
jksoft | 9:561182aac695 | 408 | gorl_flag = 1; |
jksoft | 9:561182aac695 | 409 | flow_star(0,STAR_LINE_MAX,_RED,10); |
jksoft | 9:561182aac695 | 410 | flow_star(0,STAR_LINE_MAX,_PURPLE,10); |
jksoft | 9:561182aac695 | 411 | flow_star(0,STAR_LINE_MAX,_BLUE,10); |
jksoft | 9:561182aac695 | 412 | flow_star(0,STAR_LINE_MAX,_AQUA,10); |
jksoft | 9:561182aac695 | 413 | flow_star(0,STAR_LINE_MAX,_RED,10); |
jksoft | 9:561182aac695 | 414 | flow_star(0,STAR_LINE_MAX,_GREEN,10); |
jksoft | 9:561182aac695 | 415 | flow_star(0,STAR_LINE_MAX,_YELLOW,_OFF,30); |
jksoft | 9:561182aac695 | 416 | } |
jksoft | 9:561182aac695 | 417 | else { |
jksoft | 9:561182aac695 | 418 | flow_star(0,STAR_LINE_MAX,_YELLOW,30); |
jksoft | 9:561182aac695 | 419 | } |
jksoft | 9:561182aac695 | 420 | |
jksoft | 9:561182aac695 | 421 | flipper.attach(&flip, 2.0); |
jksoft | 9:561182aac695 | 422 | } |
jksoft | 9:561182aac695 | 423 | old_like_count_i = like; |
jksoft | 9:561182aac695 | 424 | |
jksoft | 9:561182aac695 | 425 | if(gorl_flag == 1) { |
jksoft | 9:561182aac695 | 426 | for(int j=0;j<60;j++) { |
jksoft | 9:561182aac695 | 427 | glad(gol_count+(j*80),base_led_data[j]); |
jksoft | 9:561182aac695 | 428 | memcpy( led_data[j] , base_led_data[j] , 3 ); |
jksoft | 9:561182aac695 | 429 | } |
jksoft | 9:561182aac695 | 430 | } |
jksoft | 9:561182aac695 | 431 | else { |
jksoft | 9:561182aac695 | 432 | for(int i=0;i<STAR_LINE_MAX;i++) { |
jksoft | 9:561182aac695 | 433 | if( i >= point ) { |
jksoft | 9:561182aac695 | 434 | memcpy(base_led_data[star_line[i]] , color_line[i] , 3 ); |
jksoft | 9:561182aac695 | 435 | } |
jksoft | 9:561182aac695 | 436 | } |
jksoft | 9:561182aac695 | 437 | } |
jksoft | 9:561182aac695 | 438 | |
jksoft | 9:561182aac695 | 439 | back_base(); |
jksoft | 9:561182aac695 | 440 | |
jksoft | 9:561182aac695 | 441 | gol_count += 30 ; |
jksoft | 9:561182aac695 | 442 | if( gol_count >= 0x2FD ) { |
jksoft | 9:561182aac695 | 443 | gol_count = 0; |
jksoft | 9:561182aac695 | 444 | } |
jksoft | 9:561182aac695 | 445 | |
jksoft | 9:561182aac695 | 446 | } |
jksoft | 9:561182aac695 | 447 | |
jksoft | 9:561182aac695 | 448 | void like_change(int like) |
jksoft | 9:561182aac695 | 449 | { |
jksoft | 9:561182aac695 | 450 | |
jksoft | 9:561182aac695 | 451 | } |
jksoft | 9:561182aac695 | 452 | |
jksoft | 9:561182aac695 | 453 | void send_led() |
jksoft | 9:561182aac695 | 454 | { |
jksoft | 9:561182aac695 | 455 | for(int i=0;i<LED_NUM;i++) |
jksoft | 9:561182aac695 | 456 | { |
jksoft | 9:561182aac695 | 457 | tapeSet(i,led_data[i][0] << 16 | led_data[i][1] << 8 | led_data[i][2]); |
jksoft | 9:561182aac695 | 458 | } |
jksoft | 9:561182aac695 | 459 | tapeSend(); |
jksoft | 9:561182aac695 | 460 | } |
jksoft | 9:561182aac695 | 461 | |
jksoft | 9:561182aac695 | 462 | |
jksoft | 9:561182aac695 | 463 | void flip() { |
jksoft | 9:561182aac695 | 464 | // like_count += 1; |
jksoft | 9:561182aac695 | 465 | led_data[star_line[demo_count]][0] /= 2; |
jksoft | 9:561182aac695 | 466 | led_data[star_line[demo_count]][1] /= 2; |
jksoft | 9:561182aac695 | 467 | led_data[star_line[demo_count]][2] /= 2; |
jksoft | 9:561182aac695 | 468 | |
jksoft | 9:561182aac695 | 469 | demo_count += 1; |
jksoft | 9:561182aac695 | 470 | |
jksoft | 9:561182aac695 | 471 | if( demo_count >= STAR_LINE_MAX ) |
jksoft | 9:561182aac695 | 472 | { |
jksoft | 9:561182aac695 | 473 | demo_count = 0; |
jksoft | 9:561182aac695 | 474 | } |
jksoft | 9:561182aac695 | 475 | } |
jksoft | 9:561182aac695 | 476 | |
jksoft | 0:92848fdd9379 | 477 | int main() { |
jksoft | 9:561182aac695 | 478 | int old_like_count = 1; |
jksoft | 9:561182aac695 | 479 | char tag[64]; |
jksoft | 9:561182aac695 | 480 | char tmp[5]; |
jksoft | 9:561182aac695 | 481 | char tmp2[5]; |
jksoft | 9:561182aac695 | 482 | |
jksoft | 9:561182aac695 | 483 | SW1.mode(PullUp); |
jksoft | 9:561182aac695 | 484 | SW2.mode(PullUp); |
jksoft | 9:561182aac695 | 485 | |
jksoft | 9:561182aac695 | 486 | if( SW1 == 0 ) { // DEMO MODE |
jksoft | 9:561182aac695 | 487 | tapeInit(0, LED_NUM+2); |
jksoft | 9:561182aac695 | 488 | |
jksoft | 9:561182aac695 | 489 | while(1) { |
jksoft | 9:561182aac695 | 490 | flow_star(0,STAR_LINE_MAX,_RED ,_OFF,30); |
jksoft | 9:561182aac695 | 491 | wait(0.5); |
jksoft | 9:561182aac695 | 492 | flow_star(0,STAR_LINE_MAX,_PURPLE,_OFF,30); |
jksoft | 9:561182aac695 | 493 | wait(0.5); |
jksoft | 9:561182aac695 | 494 | flow_star(0,STAR_LINE_MAX,_BLUE ,_OFF,30); |
jksoft | 9:561182aac695 | 495 | wait(0.5); |
jksoft | 9:561182aac695 | 496 | flow_star(0,STAR_LINE_MAX,_AQUA ,_OFF,30); |
jksoft | 9:561182aac695 | 497 | wait(0.5); |
jksoft | 9:561182aac695 | 498 | flow_star(0,STAR_LINE_MAX,_GREEN ,_OFF,30); |
jksoft | 9:561182aac695 | 499 | wait(0.5); |
jksoft | 9:561182aac695 | 500 | flow_star(0,STAR_LINE_MAX,_YELLOW,_OFF,30); |
jksoft | 9:561182aac695 | 501 | wait(0.5); |
jksoft | 9:561182aac695 | 502 | } |
jksoft | 9:561182aac695 | 503 | } |
jksoft | 9:561182aac695 | 504 | #if 0 |
jksoft | 9:561182aac695 | 505 | cfg.read("/local/env.ini"); |
jksoft | 9:561182aac695 | 506 | |
jksoft | 9:561182aac695 | 507 | if (cfg.getValue("TAG", &tag[0], sizeof(tag))) { |
jksoft | 9:561182aac695 | 508 | printf("'%s'='%s'\n\r", "TAG", tag); |
jksoft | 9:561182aac695 | 509 | } |
jksoft | 9:561182aac695 | 510 | else |
jksoft | 9:561182aac695 | 511 | { |
jksoft | 9:561182aac695 | 512 | sprintf(tag,"ma9"); |
jksoft | 9:561182aac695 | 513 | } |
jksoft | 9:561182aac695 | 514 | if (cfg.getValue("COUNT", &tmp[0], sizeof(tmp))) { |
jksoft | 9:561182aac695 | 515 | printf("'%s'='%s'\n\r", "COUNT", tmp); |
jksoft | 9:561182aac695 | 516 | like_count = atoi(tmp); |
jksoft | 9:561182aac695 | 517 | } |
jksoft | 9:561182aac695 | 518 | else |
jksoft | 9:561182aac695 | 519 | { |
jksoft | 9:561182aac695 | 520 | like_count = 0; |
jksoft | 9:561182aac695 | 521 | } |
jksoft | 9:561182aac695 | 522 | if (cfg.getValue("MAX", &tmp2[0], sizeof(tmp2))) { |
jksoft | 9:561182aac695 | 523 | printf("'%s'='%s'\n\r", "MAX", tmp2); |
jksoft | 9:561182aac695 | 524 | max_count = atoi(tmp2); |
jksoft | 9:561182aac695 | 525 | } |
jksoft | 9:561182aac695 | 526 | else |
jksoft | 9:561182aac695 | 527 | { |
jksoft | 9:561182aac695 | 528 | max_count = 0; |
jksoft | 9:561182aac695 | 529 | } |
jksoft | 9:561182aac695 | 530 | #endif |
jksoft | 9:561182aac695 | 531 | like_count = 0; |
jksoft | 9:561182aac695 | 532 | max_count = 60; |
jksoft | 9:561182aac695 | 533 | |
jksoft | 9:561182aac695 | 534 | printf("ini file read\r\n"); |
jksoft | 9:561182aac695 | 535 | printf("HashTag:%s\r\n",tag); |
jksoft | 9:561182aac695 | 536 | printf("Now Count:%d\r\n",like_count); |
jksoft | 9:561182aac695 | 537 | printf("Max Count:%d\r\n",max_count); |
jksoft | 9:561182aac695 | 538 | |
jksoft | 9:561182aac695 | 539 | stat_led1 = 1; |
jksoft | 9:561182aac695 | 540 | |
jksoft | 9:561182aac695 | 541 | for(int i=0;i<LED_NUM;i++) { |
jksoft | 9:561182aac695 | 542 | memcpy( led_data[i] , _OFF , 3 ); |
jksoft | 9:561182aac695 | 543 | memcpy( base_led_data[i] , _DARK_GLAY , 3 ); |
jksoft | 9:561182aac695 | 544 | } |
jksoft | 9:561182aac695 | 545 | |
jksoft | 9:561182aac695 | 546 | tapeInit(0, LED_NUM+2); |
jksoft | 9:561182aac695 | 547 | |
jksoft | 9:561182aac695 | 548 | send_led(); |
jksoft | 9:561182aac695 | 549 | |
jksoft | 9:561182aac695 | 550 | slow_light_all(_DARK_GLAY , 50); |
jksoft | 9:561182aac695 | 551 | |
jksoft | 0:92848fdd9379 | 552 | |
jksoft | 0:92848fdd9379 | 553 | MQTTEthernet *ipstack = new MQTTEthernet(); |
jksoft | 0:92848fdd9379 | 554 | MClient *client = new MClient(ipstack); |
jksoft | 0:92848fdd9379 | 555 | Milkcocoa *milkcocoa = new Milkcocoa(client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID); |
jksoft | 0:92848fdd9379 | 556 | |
jksoft | 0:92848fdd9379 | 557 | pc.printf("Milkcocoa mbed ver demo\n\r\n\r\n\r"); |
jksoft | 9:561182aac695 | 558 | |
jksoft | 9:561182aac695 | 559 | |
jksoft | 9:561182aac695 | 560 | wait(2); |
jksoft | 0:92848fdd9379 | 561 | |
jksoft | 0:92848fdd9379 | 562 | milkcocoa->connect(); |
jksoft | 9:561182aac695 | 563 | while(milkcocoa->getConnectStatus()!=1) { |
jksoft | 9:561182aac695 | 564 | pc.printf("\n\rEther connected error\n\r"); |
jksoft | 9:561182aac695 | 565 | pc.printf("\n\rEther re connect\n\r"); |
jksoft | 9:561182aac695 | 566 | ipstack->reconnect(); |
jksoft | 9:561182aac695 | 567 | wait(2); |
jksoft | 9:561182aac695 | 568 | milkcocoa->connect(); |
jksoft | 9:561182aac695 | 569 | } |
jksoft | 9:561182aac695 | 570 | |
jksoft | 9:561182aac695 | 571 | stat_led2 = 1; |
jksoft | 0:92848fdd9379 | 572 | |
jksoft | 9:561182aac695 | 573 | int ret = milkcocoa->on(MILKCOCOA_DATASTORE, "push", onpush); |
jksoft | 9:561182aac695 | 574 | pc.printf("%d\n\r",ret); |
jksoft | 9:561182aac695 | 575 | while(ret != 1){ |
jksoft | 9:561182aac695 | 576 | wait(1); |
jksoft | 9:561182aac695 | 577 | pc.printf("%d\n\r",ret); |
jksoft | 9:561182aac695 | 578 | ret = milkcocoa->on(MILKCOCOA_DATASTORE, "push", onpush); |
jksoft | 9:561182aac695 | 579 | } |
jksoft | 9:561182aac695 | 580 | |
jksoft | 9:561182aac695 | 581 | stat_led3 = 1; |
jksoft | 0:92848fdd9379 | 582 | |
jksoft | 9:561182aac695 | 583 | while(1) |
jksoft | 9:561182aac695 | 584 | { |
jksoft | 9:561182aac695 | 585 | milkcocoa->loop(); |
jksoft | 9:561182aac695 | 586 | |
jksoft | 9:561182aac695 | 587 | if(like_count != old_like_count) |
jksoft | 9:561182aac695 | 588 | { |
jksoft | 9:561182aac695 | 589 | printf("%04d\r\n",like_count); |
jksoft | 9:561182aac695 | 590 | sprintf(&tmp[0],"%d",like_count); |
jksoft | 9:561182aac695 | 591 | //cfg.setValue("COUNT", tmp); |
jksoft | 9:561182aac695 | 592 | if(cfg.write("/local/env.ini")) |
jksoft | 9:561182aac695 | 593 | { |
jksoft | 9:561182aac695 | 594 | printf("SET COUNT\r\n"); |
jksoft | 9:561182aac695 | 595 | } |
jksoft | 9:561182aac695 | 596 | else |
jksoft | 9:561182aac695 | 597 | { |
jksoft | 9:561182aac695 | 598 | printf("SET ERR\r\n"); |
jksoft | 9:561182aac695 | 599 | } |
jksoft | 9:561182aac695 | 600 | old_like_count = like_count; |
jksoft | 9:561182aac695 | 601 | } |
jksoft | 9:561182aac695 | 602 | |
jksoft | 9:561182aac695 | 603 | idle_cycle(like_count); |
jksoft | 0:92848fdd9379 | 604 | |
jksoft | 9:561182aac695 | 605 | stat_led4 = !stat_led4; |
jksoft | 9:561182aac695 | 606 | |
jksoft | 0:92848fdd9379 | 607 | } |
jksoft | 0:92848fdd9379 | 608 | } |
jksoft | 0:92848fdd9379 | 609 | |
jksoft | 0:92848fdd9379 | 610 | void onpush(MQTT::MessageData& md) |
jksoft | 0:92848fdd9379 | 611 | { |
jksoft | 0:92848fdd9379 | 612 | MQTT::Message &message = md.message; |
jksoft | 9:561182aac695 | 613 | DataElement de = DataElement((char*)message.payload); |
jksoft | 9:561182aac695 | 614 | printf("onpush\n\r"); |
jksoft | 9:561182aac695 | 615 | like_count++; |
jksoft | 9:561182aac695 | 616 | } |
jksoft | 9:561182aac695 | 617 | |
jksoft | 9:561182aac695 | 618 |