Dependencies:   mbed NetEthApiLPC1768 NetServicesLPC1768

Committer:
nucho
Date:
Mon Jun 07 03:44:49 2010 +0000
Revision:
1:e1bfb7d930e5
Parent:
0:c6d1b3f0c307
Child:
2:a44007a5c712

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nucho 0:c6d1b3f0c307 1 #include "mbed.h"
nucho 0:c6d1b3f0c307 2 #include "TextLCD.h"
nucho 0:c6d1b3f0c307 3 #include "EthernetNetIf.h"
nucho 0:c6d1b3f0c307 4 #include "HttpClient.h"
nucho 0:c6d1b3f0c307 5
nucho 0:c6d1b3f0c307 6 void free_member(struct member *p);
nucho 0:c6d1b3f0c307 7 void print_member(struct member *p);
nucho 0:c6d1b3f0c307 8 struct member *add_member(char *name, int id, struct member *head);
nucho 0:c6d1b3f0c307 9 unsigned int readCard();
nucho 0:c6d1b3f0c307 10 struct member * search_id(struct member *p,unsigned int id);
nucho 0:c6d1b3f0c307 11 struct member *create_member(void);
nucho 0:c6d1b3f0c307 12 void LED_Bright(int led_num);
nucho 0:c6d1b3f0c307 13 void LED_KnightRider();
nucho 0:c6d1b3f0c307 14
nucho 0:c6d1b3f0c307 15 using namespace std;
nucho 0:c6d1b3f0c307 16
nucho 0:c6d1b3f0c307 17 EthernetNetIf eth;
nucho 0:c6d1b3f0c307 18 HttpClient http;
nucho 0:c6d1b3f0c307 19
nucho 0:c6d1b3f0c307 20 LocalFileSystem local("local");
nucho 0:c6d1b3f0c307 21
nucho 0:c6d1b3f0c307 22 Serial pc(USBTX, USBRX); // tx, rx
nucho 0:c6d1b3f0c307 23 DigitalOut led1(LED1);
nucho 0:c6d1b3f0c307 24 DigitalOut led2(LED2);
nucho 0:c6d1b3f0c307 25 DigitalOut led3(LED3);
nucho 0:c6d1b3f0c307 26 DigitalOut led4(LED4);
nucho 0:c6d1b3f0c307 27
nucho 0:c6d1b3f0c307 28 Serial device(p13, p14); // tx, rx
nucho 0:c6d1b3f0c307 29 InterruptIn button(p17);
nucho 0:c6d1b3f0c307 30 DigitalIn irq(p19);
nucho 0:c6d1b3f0c307 31 //DigitalOut rst(p20);
nucho 0:c6d1b3f0c307 32
nucho 1:e1bfb7d930e5 33 //TextLCD lcd(p15, p9, p16, p8, p11, p7, p10); // rs, rw, e, d0, d1, d2, d3
nucho 1:e1bfb7d930e5 34 TextLCD lcd(p5, p6, p7, p8, p9, p10); // rs, rw, e, d0, d1, d2, d3
nucho 0:c6d1b3f0c307 35
nucho 0:c6d1b3f0c307 36 const char user[] = "your accout";
nucho 0:c6d1b3f0c307 37 const char pass[] = "yourt password";
nucho 0:c6d1b3f0c307 38 const char login_msg[] = " is login now.";
nucho 0:c6d1b3f0c307 39 const char logout_msg[] = " is logout now.";
nucho 0:c6d1b3f0c307 40 const char url[] = "http://twitter.com/statuses/update.xml";
nucho 0:c6d1b3f0c307 41 const char ntp_server[] = "http://ntp-a1.nict.go.jp/cgi-bin/ntp";
nucho 0:c6d1b3f0c307 42 bool card_flag=false;
nucho 0:c6d1b3f0c307 43
nucho 0:c6d1b3f0c307 44 struct member {
nucho 0:c6d1b3f0c307 45 char name[100];
nucho 0:c6d1b3f0c307 46 unsigned int id;
nucho 0:c6d1b3f0c307 47 bool enter;
nucho 0:c6d1b3f0c307 48 struct member *next;
nucho 0:c6d1b3f0c307 49 };
nucho 0:c6d1b3f0c307 50
nucho 0:c6d1b3f0c307 51 void cardIRQ() {
nucho 0:c6d1b3f0c307 52 card_flag=true;
nucho 0:c6d1b3f0c307 53 }
nucho 0:c6d1b3f0c307 54
nucho 0:c6d1b3f0c307 55
nucho 0:c6d1b3f0c307 56 int main() {
nucho 0:c6d1b3f0c307 57 device.baud(19200);
nucho 0:c6d1b3f0c307 58 pc.baud(9600);
nucho 0:c6d1b3f0c307 59 printf("Init\n");
nucho 0:c6d1b3f0c307 60 lcd.printf("Init\n");
nucho 0:c6d1b3f0c307 61 char sendmsg[255];
nucho 0:c6d1b3f0c307 62 char buf[40];
nucho 0:c6d1b3f0c307 63 member *p=NULL;
nucho 0:c6d1b3f0c307 64 member *head=NULL;
nucho 0:c6d1b3f0c307 65 time_t seconds = time(NULL);
nucho 0:c6d1b3f0c307 66 HttpClient twitter;
nucho 0:c6d1b3f0c307 67 char *e;
nucho 0:c6d1b3f0c307 68 char name[100];
nucho 0:c6d1b3f0c307 69 unsigned int id;
nucho 0:c6d1b3f0c307 70
nucho 0:c6d1b3f0c307 71 HttpMap msg;
nucho 0:c6d1b3f0c307 72
nucho 0:c6d1b3f0c307 73 //connect Ethernet
nucho 0:c6d1b3f0c307 74 printf("\r\nSetting up...\r\n");
nucho 0:c6d1b3f0c307 75 EthernetErr ethErr = eth.setup();
nucho 0:c6d1b3f0c307 76 if (ethErr) {
nucho 0:c6d1b3f0c307 77 printf("Error %d in setup.\n", ethErr);
nucho 0:c6d1b3f0c307 78 return -1;
nucho 0:c6d1b3f0c307 79 }
nucho 0:c6d1b3f0c307 80 printf("\r\nSetup OK\r\n");
nucho 0:c6d1b3f0c307 81
nucho 0:c6d1b3f0c307 82 twitter.basicAuth(user, pass); //We use basic authentication, replace with you accoun
nucho 0:c6d1b3f0c307 83
nucho 0:c6d1b3f0c307 84 //read member
nucho 0:c6d1b3f0c307 85 pc.printf("Opening File...\n"); // Drive should be marked as removed
nucho 0:c6d1b3f0c307 86 FILE *fp = fopen("/local/member.txt", "r");
nucho 0:c6d1b3f0c307 87
nucho 0:c6d1b3f0c307 88 while (fscanf( fp, "%[^,],%d\n",name, &id) != EOF ) {
nucho 0:c6d1b3f0c307 89 head = add_member(name,id, head);
nucho 0:c6d1b3f0c307 90 }
nucho 0:c6d1b3f0c307 91 fclose(fp);
nucho 0:c6d1b3f0c307 92 pc.printf("Opened.\n");
nucho 0:c6d1b3f0c307 93
nucho 0:c6d1b3f0c307 94 // Start RTC
nucho 0:c6d1b3f0c307 95 lcd.printf("RTC setting...\n");
nucho 0:c6d1b3f0c307 96 HttpText txt;
nucho 0:c6d1b3f0c307 97
nucho 0:c6d1b3f0c307 98 http.get(ntp_server, &txt);
nucho 0:c6d1b3f0c307 99 int start_body=strstr(txt.gets(),"<BODY>")-txt.gets()+7;
nucho 0:c6d1b3f0c307 100 int end_body = strstr(txt.gets(),"</BODY>")-txt.gets()-1;
nucho 0:c6d1b3f0c307 101 strncpy(buf, txt.gets()+start_body, end_body-start_body);
nucho 0:c6d1b3f0c307 102
nucho 0:c6d1b3f0c307 103
nucho 0:c6d1b3f0c307 104 //printf("<%s>\n",txt.gets());
nucho 0:c6d1b3f0c307 105 //printf("%lu\n",strtoul(buf,&e,10));
nucho 0:c6d1b3f0c307 106 seconds = strtoul(buf,&e,10)-2208988800UL+32400;
nucho 0:c6d1b3f0c307 107 set_time(seconds);
nucho 0:c6d1b3f0c307 108
nucho 0:c6d1b3f0c307 109 button.rise(&cardIRQ);
nucho 0:c6d1b3f0c307 110 while (1) {
nucho 0:c6d1b3f0c307 111 seconds = time(NULL);
nucho 0:c6d1b3f0c307 112 strftime(buf,sizeof(buf),"%Y/%m/%d %a\n%H:%M:%S Ready!", localtime(&seconds));
nucho 0:c6d1b3f0c307 113 printf("%s\n", buf);
nucho 0:c6d1b3f0c307 114 lcd.printf("%s", buf);
nucho 0:c6d1b3f0c307 115 wait(0.3);
nucho 0:c6d1b3f0c307 116
nucho 0:c6d1b3f0c307 117 if (card_flag) {
nucho 0:c6d1b3f0c307 118 lcd.cls();
nucho 0:c6d1b3f0c307 119 strcpy(sendmsg,"");
nucho 0:c6d1b3f0c307 120
nucho 0:c6d1b3f0c307 121 id= readCard();
nucho 0:c6d1b3f0c307 122 pc.printf("id=%u\n",id);
nucho 0:c6d1b3f0c307 123 p = search_id(head,id);//checkID
nucho 0:c6d1b3f0c307 124
nucho 0:c6d1b3f0c307 125 if (p!=NULL) {//list has same ID
nucho 0:c6d1b3f0c307 126 pc.printf("%s\n",p->name);
nucho 0:c6d1b3f0c307 127
nucho 0:c6d1b3f0c307 128 lcd.locate(0,0);
nucho 0:c6d1b3f0c307 129 lcd.printf("%s",p->name);
nucho 0:c6d1b3f0c307 130 lcd.locate(0,1);
nucho 0:c6d1b3f0c307 131 lcd.printf("id=%u",p->id);
nucho 0:c6d1b3f0c307 132
nucho 0:c6d1b3f0c307 133 strcat(sendmsg,p->name);
nucho 0:c6d1b3f0c307 134 seconds = time(NULL);
nucho 0:c6d1b3f0c307 135 strftime(buf,sizeof(buf), " (%Y/%m/%d %a %H:%M:%S)", localtime(&seconds));
nucho 0:c6d1b3f0c307 136
nucho 0:c6d1b3f0c307 137 if (p->enter) {
nucho 0:c6d1b3f0c307 138 strcat(sendmsg,logout_msg);
nucho 0:c6d1b3f0c307 139 strcat(sendmsg,buf);
nucho 0:c6d1b3f0c307 140 pc.printf("%s\n",sendmsg);
nucho 0:c6d1b3f0c307 141 msg["status"] = sendmsg;
nucho 0:c6d1b3f0c307 142 twitter.post(url, msg, NULL);
nucho 0:c6d1b3f0c307 143
nucho 0:c6d1b3f0c307 144 p->enter=false;
nucho 0:c6d1b3f0c307 145 } else {
nucho 0:c6d1b3f0c307 146 strcat(sendmsg,login_msg);
nucho 0:c6d1b3f0c307 147 strcat(sendmsg,buf);
nucho 0:c6d1b3f0c307 148 pc.printf("%s\n",sendmsg);
nucho 0:c6d1b3f0c307 149 msg["status"] = sendmsg;
nucho 0:c6d1b3f0c307 150 twitter.post(url, msg, NULL);
nucho 0:c6d1b3f0c307 151
nucho 0:c6d1b3f0c307 152 p->enter=true;
nucho 0:c6d1b3f0c307 153 }
nucho 0:c6d1b3f0c307 154 LED_KnightRider();
nucho 0:c6d1b3f0c307 155
nucho 0:c6d1b3f0c307 156 card_flag=false;
nucho 0:c6d1b3f0c307 157 lcd.cls();
nucho 0:c6d1b3f0c307 158 } else {
nucho 0:c6d1b3f0c307 159 lcd.locate(0,0);
nucho 0:c6d1b3f0c307 160 lcd.printf("You are'nt member");
nucho 0:c6d1b3f0c307 161 lcd.locate(0,1);
nucho 0:c6d1b3f0c307 162 lcd.printf("id=%u",p->id);
nucho 0:c6d1b3f0c307 163 wait(1);
nucho 0:c6d1b3f0c307 164 }
nucho 0:c6d1b3f0c307 165
nucho 0:c6d1b3f0c307 166 }
nucho 0:c6d1b3f0c307 167
nucho 0:c6d1b3f0c307 168 }
nucho 0:c6d1b3f0c307 169 }
nucho 0:c6d1b3f0c307 170
nucho 0:c6d1b3f0c307 171 void LED_KnightRider() {
nucho 0:c6d1b3f0c307 172 LED_Bright(1);
nucho 0:c6d1b3f0c307 173 wait(0.05);
nucho 0:c6d1b3f0c307 174 LED_Bright(2);
nucho 0:c6d1b3f0c307 175 wait(0.05);
nucho 0:c6d1b3f0c307 176 LED_Bright(3);
nucho 0:c6d1b3f0c307 177 wait(0.05);
nucho 0:c6d1b3f0c307 178 LED_Bright(4);
nucho 0:c6d1b3f0c307 179 wait(0.05);
nucho 0:c6d1b3f0c307 180 LED_Bright(3);
nucho 0:c6d1b3f0c307 181 wait(0.05);
nucho 0:c6d1b3f0c307 182 LED_Bright(2);
nucho 0:c6d1b3f0c307 183 wait(0.05);
nucho 0:c6d1b3f0c307 184 LED_Bright(1);
nucho 0:c6d1b3f0c307 185 wait(0.05);
nucho 0:c6d1b3f0c307 186 LED_Bright(0);
nucho 0:c6d1b3f0c307 187 wait(0.05);
nucho 0:c6d1b3f0c307 188 LED_Bright(1);
nucho 0:c6d1b3f0c307 189 wait(0.05);
nucho 0:c6d1b3f0c307 190 LED_Bright(2);
nucho 0:c6d1b3f0c307 191 wait(0.05);
nucho 0:c6d1b3f0c307 192 LED_Bright(3);
nucho 0:c6d1b3f0c307 193 wait(0.05);
nucho 0:c6d1b3f0c307 194 LED_Bright(4);
nucho 0:c6d1b3f0c307 195 wait(0.05);
nucho 0:c6d1b3f0c307 196 LED_Bright(3);
nucho 0:c6d1b3f0c307 197 wait(0.05);
nucho 0:c6d1b3f0c307 198 LED_Bright(2);
nucho 0:c6d1b3f0c307 199 wait(0.05);
nucho 0:c6d1b3f0c307 200 LED_Bright(1);
nucho 0:c6d1b3f0c307 201 wait(0.05);
nucho 0:c6d1b3f0c307 202 LED_Bright(0);
nucho 0:c6d1b3f0c307 203 }
nucho 0:c6d1b3f0c307 204
nucho 0:c6d1b3f0c307 205 void LED_Bright(int led_num) {
nucho 0:c6d1b3f0c307 206 switch (led_num) {
nucho 0:c6d1b3f0c307 207 case 1:
nucho 0:c6d1b3f0c307 208 led1=1;
nucho 0:c6d1b3f0c307 209 led2=0;
nucho 0:c6d1b3f0c307 210 led3=0;
nucho 0:c6d1b3f0c307 211 led4=0;
nucho 0:c6d1b3f0c307 212 break;
nucho 0:c6d1b3f0c307 213 case 2:
nucho 0:c6d1b3f0c307 214 led1=0;
nucho 0:c6d1b3f0c307 215 led2=1;
nucho 0:c6d1b3f0c307 216 led3=0;
nucho 0:c6d1b3f0c307 217 led4=0;
nucho 0:c6d1b3f0c307 218 break;
nucho 0:c6d1b3f0c307 219 case 3:
nucho 0:c6d1b3f0c307 220 led1=0;
nucho 0:c6d1b3f0c307 221 led2=0;
nucho 0:c6d1b3f0c307 222 led3=1;
nucho 0:c6d1b3f0c307 223 led4=0;
nucho 0:c6d1b3f0c307 224 break;
nucho 0:c6d1b3f0c307 225 case 4:
nucho 0:c6d1b3f0c307 226 led1=0;
nucho 0:c6d1b3f0c307 227 led2=0;
nucho 0:c6d1b3f0c307 228 led3=0;
nucho 0:c6d1b3f0c307 229 led4=1;
nucho 0:c6d1b3f0c307 230 break;
nucho 0:c6d1b3f0c307 231 default:
nucho 0:c6d1b3f0c307 232 led1=0;
nucho 0:c6d1b3f0c307 233 led2=0;
nucho 0:c6d1b3f0c307 234 led3=0;
nucho 0:c6d1b3f0c307 235 led4=0;
nucho 0:c6d1b3f0c307 236 break;
nucho 0:c6d1b3f0c307 237 }
nucho 0:c6d1b3f0c307 238 }
nucho 0:c6d1b3f0c307 239
nucho 0:c6d1b3f0c307 240
nucho 0:c6d1b3f0c307 241 unsigned int readCard() {
nucho 0:c6d1b3f0c307 242 unsigned int id=0;
nucho 0:c6d1b3f0c307 243 int len,i;
nucho 0:c6d1b3f0c307 244
nucho 0:c6d1b3f0c307 245 device.getc();//header
nucho 0:c6d1b3f0c307 246 device.getc();//header
nucho 0:c6d1b3f0c307 247 len = device.getc();
nucho 0:c6d1b3f0c307 248
nucho 0:c6d1b3f0c307 249 char data[len];
nucho 0:c6d1b3f0c307 250 for (i=0;i<len;i++) {
nucho 0:c6d1b3f0c307 251 data[i]=device.getc();
nucho 0:c6d1b3f0c307 252 }
nucho 0:c6d1b3f0c307 253 if (data[0]==0x50) {//success
nucho 0:c6d1b3f0c307 254 for (i=0;i<4;i++) {
nucho 0:c6d1b3f0c307 255 id |= (data[4-i] << (i * 8));
nucho 0:c6d1b3f0c307 256 }
nucho 0:c6d1b3f0c307 257 } else {//failre
nucho 0:c6d1b3f0c307 258 }
nucho 0:c6d1b3f0c307 259
nucho 0:c6d1b3f0c307 260 return id;
nucho 0:c6d1b3f0c307 261 }
nucho 0:c6d1b3f0c307 262
nucho 0:c6d1b3f0c307 263 void print_member(struct member *p) {
nucho 0:c6d1b3f0c307 264 while (p != NULL) {
nucho 0:c6d1b3f0c307 265 pc.printf("%s %u\n", p->name,p->id);
nucho 0:c6d1b3f0c307 266 p = p->next;
nucho 0:c6d1b3f0c307 267 }
nucho 0:c6d1b3f0c307 268 }
nucho 0:c6d1b3f0c307 269
nucho 0:c6d1b3f0c307 270 void free_member(struct member *p) {
nucho 0:c6d1b3f0c307 271 struct member *p2;
nucho 0:c6d1b3f0c307 272
nucho 0:c6d1b3f0c307 273 while (p != NULL) {
nucho 0:c6d1b3f0c307 274 p2 = p->next;
nucho 0:c6d1b3f0c307 275 free(p);
nucho 0:c6d1b3f0c307 276 p = p2;
nucho 0:c6d1b3f0c307 277 }
nucho 0:c6d1b3f0c307 278 }
nucho 0:c6d1b3f0c307 279
nucho 0:c6d1b3f0c307 280
nucho 0:c6d1b3f0c307 281 struct member *add_member(char *name, int id, struct member *head) {
nucho 0:c6d1b3f0c307 282 struct member *p;
nucho 0:c6d1b3f0c307 283
nucho 0:c6d1b3f0c307 284 p=create_member();
nucho 0:c6d1b3f0c307 285 p->id = id;
nucho 0:c6d1b3f0c307 286 strcpy(p->name, name);
nucho 0:c6d1b3f0c307 287
nucho 0:c6d1b3f0c307 288 p->next = head;
nucho 0:c6d1b3f0c307 289 head = p;
nucho 0:c6d1b3f0c307 290
nucho 0:c6d1b3f0c307 291 return head;
nucho 0:c6d1b3f0c307 292 }
nucho 0:c6d1b3f0c307 293
nucho 0:c6d1b3f0c307 294 struct member *create_member(void) {
nucho 0:c6d1b3f0c307 295 struct member *p;
nucho 0:c6d1b3f0c307 296
nucho 0:c6d1b3f0c307 297 if ((p = (struct member *) malloc(sizeof(struct member))) == NULL) {
nucho 0:c6d1b3f0c307 298 printf("malloc error\n");
nucho 0:c6d1b3f0c307 299 exit(EXIT_FAILURE);
nucho 0:c6d1b3f0c307 300 }
nucho 0:c6d1b3f0c307 301 p->enter = false;
nucho 0:c6d1b3f0c307 302
nucho 0:c6d1b3f0c307 303 return p;
nucho 0:c6d1b3f0c307 304 }
nucho 0:c6d1b3f0c307 305
nucho 0:c6d1b3f0c307 306 struct member * search_id(struct member *p,unsigned int id) {
nucho 0:c6d1b3f0c307 307 struct member *findp=NULL;
nucho 0:c6d1b3f0c307 308 while (p != NULL) {
nucho 0:c6d1b3f0c307 309 if (p->id==id) {
nucho 0:c6d1b3f0c307 310 findp = p;
nucho 0:c6d1b3f0c307 311 break;
nucho 0:c6d1b3f0c307 312 }
nucho 0:c6d1b3f0c307 313 p = p->next;
nucho 0:c6d1b3f0c307 314 }
nucho 0:c6d1b3f0c307 315 return findp;
nucho 0:c6d1b3f0c307 316 }