Dependencies:   mbed NetEthApiLPC1768 NetServicesLPC1768

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }