Dependencies: mbed NetEthApiLPC1768 NetServicesLPC1768
main.cpp
00001 #include "mbed.h" 00002 #include "TextLCD.h" 00003 #include "EthernetNetIf.h" 00004 #include "HttpClient.h" 00005 00006 void free_member(struct member *p); 00007 void print_member(struct member *p); 00008 struct member *add_member(char *name, int id, struct member *head); 00009 unsigned int readCard(); 00010 struct member * search_id(struct member *p,unsigned int id); 00011 struct member *create_member(void); 00012 void LED_Bright(int led_num); 00013 void LED_KnightRider(); 00014 00015 using namespace std; 00016 00017 EthernetNetIf eth; 00018 HttpClient http; 00019 00020 LocalFileSystem local("local"); 00021 00022 Serial pc(USBTX, USBRX); // tx, rx 00023 DigitalOut led1(LED1); 00024 DigitalOut led2(LED2); 00025 DigitalOut led3(LED3); 00026 DigitalOut led4(LED4); 00027 00028 Serial device(p13, p14); // tx, rx 00029 InterruptIn button(p17); 00030 DigitalIn irq(p19); 00031 //DigitalOut rst(p20); 00032 00033 //TextLCD lcd(p15, p9, p16, p8, p11, p7, p10); // rs, rw, e, d0, d1, d2, d3 00034 TextLCD lcd(p5, p6, p7, p8, p9, p10); // rs, rw, e, d0, d1, d2, d3 00035 00036 const char user[] = "your accout"; 00037 const char pass[] = "yourt password"; 00038 const char login_msg[] = " is login now."; 00039 const char logout_msg[] = " is logout now."; 00040 const char url[] = "http://twitter.com/statuses/update.xml"; 00041 const char ntp_server[] = "http://ntp-a1.nict.go.jp/cgi-bin/ntp"; 00042 bool card_flag=false; 00043 00044 struct member { 00045 char name[100]; 00046 unsigned int id; 00047 bool enter; 00048 struct member *next; 00049 }; 00050 00051 void cardIRQ() { 00052 card_flag=true; 00053 } 00054 00055 00056 int main() { 00057 device.baud(19200); 00058 pc.baud(9600); 00059 printf("Init\n"); 00060 lcd.printf("Init\n"); 00061 char sendmsg[255]; 00062 char buf[40]; 00063 member *p=NULL; 00064 member *head=NULL; 00065 time_t seconds = time(NULL); 00066 HttpClient twitter; 00067 char *e; 00068 char name[100]; 00069 unsigned int id; 00070 00071 HttpMap msg; 00072 00073 //connect Ethernet 00074 printf("\r\nSetting up...\r\n"); 00075 EthernetErr ethErr = eth.setup(); 00076 if (ethErr) { 00077 printf("Error %d in setup.\n", ethErr); 00078 return -1; 00079 } 00080 printf("\r\nSetup OK\r\n"); 00081 00082 twitter.basicAuth(user, pass); //We use basic authentication, replace with you accoun 00083 00084 //read member 00085 pc.printf("Opening File...\n"); // Drive should be marked as removed 00086 FILE *fp = fopen("/local/member.txt", "r"); 00087 00088 while (fscanf( fp, "%[^,],%d\n",name, &id) != EOF ) { 00089 head = add_member(name,id, head); 00090 } 00091 fclose(fp); 00092 pc.printf("Opened.\n"); 00093 00094 // Start RTC 00095 lcd.printf("RTC setting...\n"); 00096 HttpText txt; 00097 00098 http.get(ntp_server, &txt); 00099 int start_body=strstr(txt.gets(),"<BODY>")-txt.gets()+7; 00100 int end_body = strstr(txt.gets(),"</BODY>")-txt.gets()-1; 00101 strncpy(buf, txt.gets()+start_body, end_body-start_body); 00102 00103 00104 //printf("<%s>\n",txt.gets()); 00105 //printf("%lu\n",strtoul(buf,&e,10)); 00106 seconds = strtoul(buf,&e,10)-2208988800UL+32400; 00107 set_time(seconds); 00108 00109 button.rise(&cardIRQ); 00110 while (1) { 00111 seconds = time(NULL); 00112 strftime(buf,sizeof(buf),"%Y/%m/%d %a\n%H:%M:%S Ready!", localtime(&seconds)); 00113 printf("%s\n", buf); 00114 lcd.printf("%s", buf); 00115 wait(0.3); 00116 00117 if (card_flag) { 00118 lcd.cls(); 00119 strcpy(sendmsg,""); 00120 00121 id= readCard(); 00122 pc.printf("id=%u\n",id); 00123 p = search_id(head,id);//checkID 00124 00125 if (p!=NULL) {//list has same ID 00126 pc.printf("%s\n",p->name); 00127 00128 lcd.locate(0,0); 00129 lcd.printf("%s",p->name); 00130 lcd.locate(0,1); 00131 lcd.printf("id=%u",p->id); 00132 00133 strcat(sendmsg,p->name); 00134 seconds = time(NULL); 00135 strftime(buf,sizeof(buf), " (%Y/%m/%d %a %H:%M:%S)", localtime(&seconds)); 00136 00137 if (p->enter) { 00138 strcat(sendmsg,logout_msg); 00139 strcat(sendmsg,buf); 00140 pc.printf("%s\n",sendmsg); 00141 msg["status"] = sendmsg; 00142 twitter.post(url, msg, NULL); 00143 00144 p->enter=false; 00145 } else { 00146 strcat(sendmsg,login_msg); 00147 strcat(sendmsg,buf); 00148 pc.printf("%s\n",sendmsg); 00149 msg["status"] = sendmsg; 00150 twitter.post(url, msg, NULL); 00151 00152 p->enter=true; 00153 } 00154 LED_KnightRider(); 00155 00156 card_flag=false; 00157 lcd.cls(); 00158 } else { 00159 lcd.locate(0,0); 00160 lcd.printf("You are'nt member"); 00161 lcd.locate(0,1); 00162 lcd.printf("id=%u",id); 00163 wait(1); 00164 card_flag=false; 00165 lcd.cls(); 00166 } 00167 00168 } 00169 00170 } 00171 } 00172 00173 void LED_KnightRider() { 00174 LED_Bright(1); 00175 wait(0.05); 00176 LED_Bright(2); 00177 wait(0.05); 00178 LED_Bright(3); 00179 wait(0.05); 00180 LED_Bright(4); 00181 wait(0.05); 00182 LED_Bright(3); 00183 wait(0.05); 00184 LED_Bright(2); 00185 wait(0.05); 00186 LED_Bright(1); 00187 wait(0.05); 00188 LED_Bright(0); 00189 wait(0.05); 00190 LED_Bright(1); 00191 wait(0.05); 00192 LED_Bright(2); 00193 wait(0.05); 00194 LED_Bright(3); 00195 wait(0.05); 00196 LED_Bright(4); 00197 wait(0.05); 00198 LED_Bright(3); 00199 wait(0.05); 00200 LED_Bright(2); 00201 wait(0.05); 00202 LED_Bright(1); 00203 wait(0.05); 00204 LED_Bright(0); 00205 } 00206 00207 void LED_Bright(int led_num) { 00208 switch (led_num) { 00209 case 1: 00210 led1=1; 00211 led2=0; 00212 led3=0; 00213 led4=0; 00214 break; 00215 case 2: 00216 led1=0; 00217 led2=1; 00218 led3=0; 00219 led4=0; 00220 break; 00221 case 3: 00222 led1=0; 00223 led2=0; 00224 led3=1; 00225 led4=0; 00226 break; 00227 case 4: 00228 led1=0; 00229 led2=0; 00230 led3=0; 00231 led4=1; 00232 break; 00233 default: 00234 led1=0; 00235 led2=0; 00236 led3=0; 00237 led4=0; 00238 break; 00239 } 00240 } 00241 00242 00243 unsigned int readCard() { 00244 unsigned int id=0; 00245 int len,i; 00246 00247 device.getc();//header 00248 device.getc();//header 00249 len = device.getc(); 00250 00251 char data[len]; 00252 for (i=0;i<len;i++) { 00253 data[i]=device.getc(); 00254 } 00255 if (data[0]==0x50) {//success 00256 for (i=0;i<4;i++) { 00257 id |= (data[4-i] << (i * 8)); 00258 } 00259 } else {//failre 00260 } 00261 00262 return id; 00263 } 00264 00265 void print_member(struct member *p) { 00266 while (p != NULL) { 00267 pc.printf("%s %u\n", p->name,p->id); 00268 p = p->next; 00269 } 00270 } 00271 00272 void free_member(struct member *p) { 00273 struct member *p2; 00274 00275 while (p != NULL) { 00276 p2 = p->next; 00277 free(p); 00278 p = p2; 00279 } 00280 } 00281 00282 00283 struct member *add_member(char *name, int id, struct member *head) { 00284 struct member *p; 00285 00286 p=create_member(); 00287 p->id = id; 00288 strcpy(p->name, name); 00289 00290 p->next = head; 00291 head = p; 00292 00293 return head; 00294 } 00295 00296 struct member *create_member(void) { 00297 struct member *p; 00298 00299 if ((p = (struct member *) malloc(sizeof(struct member))) == NULL) { 00300 printf("malloc error\n"); 00301 exit(EXIT_FAILURE); 00302 } 00303 p->enter = false; 00304 00305 return p; 00306 } 00307 00308 struct member * search_id(struct member *p,unsigned int id) { 00309 struct member *findp=NULL; 00310 while (p != NULL) { 00311 if (p->id==id) { 00312 findp = p; 00313 break; 00314 } 00315 p = p->next; 00316 } 00317 return findp; 00318 }
Generated on Tue Jul 19 2022 00:34:03 by 1.7.2