Dependencies:   mbed NetEthApiLPC1768 NetServicesLPC1768

Revision:
0:c6d1b3f0c307
Child:
1:e1bfb7d930e5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jun 07 03:15:06 2010 +0000
@@ -0,0 +1,315 @@
+#include "mbed.h"
+#include "TextLCD.h"
+#include "EthernetNetIf.h"
+#include "HttpClient.h"
+
+void free_member(struct member *p);
+void print_member(struct member *p);
+struct member *add_member(char *name, int id, struct member *head);
+unsigned int readCard();
+struct member * search_id(struct member *p,unsigned int id);
+struct member *create_member(void);
+void LED_Bright(int led_num);
+void LED_KnightRider();
+
+using namespace std;
+
+EthernetNetIf eth;
+HttpClient http;
+
+LocalFileSystem local("local");
+
+Serial pc(USBTX, USBRX); // tx, rx
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+Serial device(p13, p14); // tx, rx
+InterruptIn button(p17);
+DigitalIn irq(p19);
+//DigitalOut rst(p20);
+
+TextLCD lcd(p15, p9, p16, p8, p11, p7, p10); // rs, rw, e, d0, d1, d2, d3
+
+const char user[] = "your accout";
+const char pass[] = "yourt password";
+const char login_msg[] = " is login now.";
+const char logout_msg[] = " is logout now.";
+const char url[]  = "http://twitter.com/statuses/update.xml";
+const char ntp_server[]  = "http://ntp-a1.nict.go.jp/cgi-bin/ntp";
+bool card_flag=false;
+
+struct member {
+    char name[100];
+    unsigned int id;
+    bool enter;
+    struct member *next;
+};
+
+void cardIRQ() {
+    card_flag=true;
+}
+
+
+int main() {
+    device.baud(19200);
+    pc.baud(9600);
+    printf("Init\n");
+    lcd.printf("Init\n");
+    char sendmsg[255];
+    char buf[40];
+    member *p=NULL;
+    member *head=NULL;
+    time_t seconds = time(NULL);
+    HttpClient twitter;
+    char *e;
+    char name[100];
+    unsigned int id;
+
+    HttpMap msg;
+
+    //connect Ethernet
+    printf("\r\nSetting up...\r\n");
+    EthernetErr ethErr = eth.setup();
+    if (ethErr) {
+        printf("Error %d in setup.\n", ethErr);
+        return -1;
+    }
+    printf("\r\nSetup OK\r\n");
+
+    twitter.basicAuth(user, pass); //We use basic authentication, replace with you accoun
+
+    //read member
+    pc.printf("Opening File...\n"); // Drive should be marked as removed
+    FILE *fp = fopen("/local/member.txt", "r");
+
+    while (fscanf( fp, "%[^,],%d\n",name, &id) != EOF ) {
+        head = add_member(name,id, head);
+    }
+    fclose(fp);
+    pc.printf("Opened.\n");
+
+    // Start RTC
+    lcd.printf("RTC setting...\n");
+    HttpText txt;
+
+    http.get(ntp_server, &txt);
+    int start_body=strstr(txt.gets(),"<BODY>")-txt.gets()+7;
+    int end_body = strstr(txt.gets(),"</BODY>")-txt.gets()-1;
+    strncpy(buf, txt.gets()+start_body, end_body-start_body);
+
+
+    //printf("<%s>\n",txt.gets());
+    //printf("%lu\n",strtoul(buf,&e,10));
+    seconds = strtoul(buf,&e,10)-2208988800UL+32400;
+    set_time(seconds);
+
+    button.rise(&cardIRQ);
+    while (1) {
+        seconds = time(NULL);
+        strftime(buf,sizeof(buf),"%Y/%m/%d %a\n%H:%M:%S  Ready!", localtime(&seconds));
+        printf("%s\n", buf);
+        lcd.printf("%s", buf);
+        wait(0.3);
+
+        if (card_flag) {
+            lcd.cls();
+            strcpy(sendmsg,"");
+
+            id= readCard();
+            pc.printf("id=%u\n",id);
+            p = search_id(head,id);//checkID
+
+            if (p!=NULL) {//list has same ID
+                pc.printf("%s\n",p->name);
+
+                lcd.locate(0,0);
+                lcd.printf("%s",p->name);
+                lcd.locate(0,1);
+                lcd.printf("id=%u",p->id);
+
+                strcat(sendmsg,p->name);
+                seconds = time(NULL);
+                strftime(buf,sizeof(buf), " (%Y/%m/%d %a %H:%M:%S)", localtime(&seconds));
+
+                if (p->enter) {
+                    strcat(sendmsg,logout_msg);
+                    strcat(sendmsg,buf);
+                    pc.printf("%s\n",sendmsg);
+                    msg["status"] = sendmsg;
+                    twitter.post(url, msg, NULL);
+
+                    p->enter=false;
+                } else {
+                    strcat(sendmsg,login_msg);
+                    strcat(sendmsg,buf);
+                    pc.printf("%s\n",sendmsg);
+                    msg["status"] = sendmsg;
+                    twitter.post(url, msg, NULL);
+
+                    p->enter=true;
+                }
+                LED_KnightRider();
+
+                card_flag=false;
+                lcd.cls();
+            } else {
+                lcd.locate(0,0);
+                lcd.printf("You are'nt member");
+                lcd.locate(0,1);
+                lcd.printf("id=%u",p->id);
+                wait(1);
+            }
+
+        }
+
+    }
+}
+
+void LED_KnightRider() {
+    LED_Bright(1);
+    wait(0.05);
+    LED_Bright(2);
+    wait(0.05);
+    LED_Bright(3);
+    wait(0.05);
+    LED_Bright(4);
+    wait(0.05);
+    LED_Bright(3);
+    wait(0.05);
+    LED_Bright(2);
+    wait(0.05);
+    LED_Bright(1);
+    wait(0.05);
+    LED_Bright(0);
+    wait(0.05);
+    LED_Bright(1);
+    wait(0.05);
+    LED_Bright(2);
+    wait(0.05);
+    LED_Bright(3);
+    wait(0.05);
+    LED_Bright(4);
+    wait(0.05);
+    LED_Bright(3);
+    wait(0.05);
+    LED_Bright(2);
+    wait(0.05);
+    LED_Bright(1);
+    wait(0.05);
+    LED_Bright(0);
+}
+
+void LED_Bright(int led_num) {
+    switch (led_num) {
+        case 1:
+            led1=1;
+            led2=0;
+            led3=0;
+            led4=0;
+            break;
+        case 2:
+            led1=0;
+            led2=1;
+            led3=0;
+            led4=0;
+            break;
+        case 3:
+            led1=0;
+            led2=0;
+            led3=1;
+            led4=0;
+            break;
+        case 4:
+            led1=0;
+            led2=0;
+            led3=0;
+            led4=1;
+            break;
+        default:
+            led1=0;
+            led2=0;
+            led3=0;
+            led4=0;
+            break;
+    }
+}
+
+
+unsigned int readCard() {
+    unsigned int id=0;
+    int len,i;
+
+    device.getc();//header
+    device.getc();//header
+    len = device.getc();
+
+    char data[len];
+    for (i=0;i<len;i++) {
+        data[i]=device.getc();
+    }
+    if (data[0]==0x50) {//success
+        for (i=0;i<4;i++) {
+            id |= (data[4-i] << (i * 8));
+        }
+    } else {//failre
+    }
+
+    return id;
+}
+
+void print_member(struct member *p) {
+    while (p != NULL) {
+        pc.printf("%s %u\n", p->name,p->id);
+        p = p->next;
+    }
+}
+
+void free_member(struct member *p) {
+    struct member *p2;
+
+    while (p != NULL) {
+        p2 = p->next;
+        free(p);
+        p = p2;
+    }
+}
+
+
+struct member *add_member(char *name, int id, struct member *head) {
+    struct member *p;
+
+    p=create_member();
+    p->id = id;
+    strcpy(p->name, name);
+
+    p->next = head;
+    head = p;
+
+    return head;
+}
+
+struct member *create_member(void) {
+    struct member *p;
+
+    if ((p = (struct member *) malloc(sizeof(struct member))) == NULL) {
+        printf("malloc error\n");
+        exit(EXIT_FAILURE);
+    }
+    p->enter = false;
+
+    return p;
+}
+
+struct member * search_id(struct member *p,unsigned int id) {
+    struct member *findp=NULL;
+    while (p != NULL) {
+        if (p->id==id) {
+            findp = p;
+            break;
+        }
+        p = p->next;
+    }
+    return findp;
+}
\ No newline at end of file