15A-ClassProjectFinal_masterfull-pae-za-leng
Dependencies: LCD4884 MFRC522 eeprom mbed
main.cpp
- Committer:
- pppartyn
- Date:
- 2015-12-09
- Revision:
- 0:985ed5cd6ed7
File content as of revision 0:985ed5cd6ed7:
/*#include "mbed.h" //------------------------------------ // Hyperterminal configuration // 9600 bauds, 8-bit data, no parity //------------------------------------ Serial pc(SERIAL_TX, SERIAL_RX); DigitalOut myled(LED1); int main() { int i = 1; pc.printf("Hello World !\n"); while(1) { wait(1); pc.printf("This program runs since %d seconds.\n", i++); myled = !myled; } } */ #include "mbed.h" #include "MFRC522.h" #include "eeprom.h" #include "LCD4884.h" //KL25Z Pins for MFRC522 SPI interface #define SPI_MOSI PB_15 #define SPI_MISO PB_14 #define SPI_CLK PB_13 #define SPI_CS PB_12 // KL25Z Pin for MFRC522 reset #define MF_RESET PH_1 // KL25Z Pins for Debug UART port #define UART_RX D0 #define UART_TX D1 Serial device(D8,D2); DigitalIn plusbutton(PA_11); DigitalIn minusbutton(PA_12); uint16_t command[7]; uint16_t re_command[7]; uint16_t ch; int color ,clear ; char random[4][4]={"x0","x1","x2","x3"}; int num_random[4] ; int highb , lowb ; //Send Number of Bottle int total ; int t_score ; Serial pc(SERIAL_TX,SERIAL_RX); MFRC522 RFID(SPI_MOSI, SPI_MISO, SPI_CLK,SPI_CS, MF_RESET); EEPROM memory(D14,D15,0); AnalogIn LDR(PC_3); DigitalOut red(PA_1); DigitalOut green(PA_4); DigitalOut blue(PB_0); DigitalIn limitsw(PC_9); DigitalOut redled(D10); DigitalOut greenled(D9); DigitalIn rightbutton(D11); DigitalIn leftbutton(D12); DigitalOut ln1(PA_13); DigitalOut ln2(PA_14); DigitalOut Ena(PC_8); DigitalIn limitright(PC_10); DigitalIn limitcenter(PC_12); DigitalIn limitleft(PC_11); LCD4884 lcd; Timer t ; Timer t2 ; Timer t3 ; int16_t recieve ; int check; int counttran = 0 , countcolor = 0 ; float valuered,valueblue,valuegreen; //MFRC522::MIFARE_Key key; class USER { public: char Name[20] ; char Surname[20] ; char StudentID[11] ; uint16_t point; int place ; USER(char name[],char surname[],char id[],int p) { for(int i=0; name[i]!='\0'; i++) { Name[i] = name[i]; } for(int i=0; surname[i]!='\0'; i++) { Surname[i] =surname[i]; } for(int i=0; id[i]!='\0'; i++) { StudentID[i] =id[i]; } place = p ; memory.read(place,recieve); wait_ms(2); point = recieve ; } int getPoint() { memory.read(place,recieve); wait_ms(2); point = recieve ; return point ; } void UpdatePoint(int16_t s) { memory.read(place,recieve); point = recieve ; s = point + s; point = s ; memory.write(place,(uint16_t)s); wait_ms(2); } void SetPoint() { memory.write(place,NULL); wait_ms(2); } }; void reverse(char *s) { char *j; int c; j = s + strlen(s) - 1; while(s < j) { c = *s; *s++ = *j; *j-- = c; } } void itoa(int n, char s[]) { int i, sign; if ((sign = n) < 0) /* record sign */ n = -n; /* make n positive */ i = 0; do { /* generate digits in reverse order */ s[i++] = n % 10 + '0'; /* get next digit */ } while ((n /= 10) > 0); /* delete it */ if (sign < 0) s[i++] = '-'; s[i] = '\0'; reverse(s); } void ShowUser(USER user) { char Sur[2] ; Sur[0] = user.Surname[0]; Sur[1] = '.'; char buff[50] ; itoa(user.point,buff); lcd.LCD_clear(); lcd.LCD_write_string(0,0,user.Name,0); lcd.LCD_write_string(55,0,Sur,0); lcd.LCD_write_string(0,2,user.StudentID,0); lcd.LCD_write_string(0,3,"Point : ",0); lcd.LCD_write_string(44,3,buff,0); //buff=point } void motor() { } void colorsensor(int &colors,int &clears) { char buff[40] ; char buff2[40] ; red = 1; blue = 1; green = 1 ; redled = 0 ; greenled = 1 ; //1=low 0=high // GREEN if(limitsw == 1) { sprintf(buff,"Clear: %d x2",counttran); lcd.LCD_write_string(0,2,buff,0); sprintf(buff2,"Color: %d x1",countcolor); lcd.LCD_write_string(0,3,buff2,0); t2.reset(); //30sec redled = 1 ; greenled = 0 ; //GReen red = 1; blue = 1; green = 0 ; wait(1); valuegreen = LDR.read(); valuegreen = valuegreen*10000; // BLUE red = 1; blue = 0; green = 1 ; wait(1); valueblue = LDR.read(); valueblue = valueblue*10000; // RED red = 0; blue = 1 ; green = 1 ; wait(1); valuered = LDR.read(); valuered = valuered*10000; pc.printf("%d %d %d\n",limitleft.read(),limitright.read(),limitcenter.read()); pc.printf(" G = %f\n B = %f\nR = %f\n",valuegreen,valueblue,valuered); wait(1); if(valuegreen >= valuered && valuegreen >= valueblue && (valuered+valueblue)<=valuegreen ||valueblue >= valuered || valueblue >= valuegreen ) { pc.printf("\n color\n"); countcolor++ ; sprintf(buff2,"Color: %d x1",countcolor); lcd.LCD_write_string(0,3,buff2,0); do{ ln1 = 0 ; // ทวนเข็ม ln2 = 1 ; Ena = 1 ; }while(limitleft == 0 ); pc.printf("checklimitleft"); ln1 = 1 ; ln2 = 0 ; Ena = 1 ; wait(1.5); ln1 = 0 ; ln2 = 0 ; Ena = 0 ; pc.printf("color bottle\n %d",countcolor); } else { if(valuegreen >300 ||valuegreen-valueblue > 80 || valueblue-valuegreen > 100 && valuered -((valuegreen+valueblue)/2)<170) { pc.printf("\ncolor\n"); countcolor++ ; sprintf(buff2,"Color: %d x1",countcolor); lcd.LCD_write_string(0,3,buff2,0); do{ ln1 = 0 ; // ทวนเข็ม ln2 = 1 ; Ena = 1 ; }while(limitleft == 0 ); pc.printf("checklimitleft2"); ln1 = 1 ; ln2 = 0 ; Ena = 1 ; wait(1.5); ln1 = 0 ; ln2 = 0 ; Ena = 0 ; pc.printf("color bottle\n %d",countcolor); } else if(valuegreen <300 ||valuegreen-valueblue < 80 || valueblue-valuegreen < 100 && valuered -((valuegreen+valueblue)/2)>170) { pc.printf("\nclear\n");} counttran++ ; sprintf(buff,"Clear: %d x2",counttran); lcd.LCD_write_string(0,2,buff,0); do{ ln1 = 1 ; //ตามเข็ม ln2 = 0 ; Ena = 1 ; }while(limitright == 0 ); pc.printf("checklimitright"); ln1 = 0 ; ln2 = 1 ; Ena = 1 ; wait(1.5); ln1 = 0 ; ln2 = 0 ; Ena = 0 ; pc.printf("transparent bottle\n %d ",counttran); } } int total ; total = countcolor + (counttran * 2); colors = countcolor ; clears = counttran ; sprintf(buff2,"total: %d ",total); lcd.LCD_write_string(0,4,buff2,0); red = 1; blue = 1; green = 1 ; while(limitsw == 1) { } t2.reset(); } USER Jettanan("Jettanan","Homchanthanakul","57340500015",1); USER Nutthaya("Nutthaya","Hankla","57340500025",5); USER Kanokwan("Kanokwan","Toncheingsai","57340500001",9); char welcome[40] = {"Welcome to pae-za-leng"}; char please[40] = {"please touch your card"}; char selectstart[20] = {"start"}; char selectcancel[20] = {"cancel"}; int main() { int check =0 ; red = 1; blue = 1; green = 1 ; uint8_t data,card[4]= {0}; pc.baud(115200); Nutthaya.UpdatePoint(1000); RFID.PCD_Reset(); wait(1.0); RFID.PCD_Init(); lcd.LCD_init(); lcd.backlight(OFF); while(1) {//e counttran = 0; countcolor = 0; lcd.backlight(ON); lcd.LCD_write_string(0,0,welcome,0); lcd.LCD_write_string(0,3,please,0); // Look for new cards // Select one of the cards if ( ! RFID.PICC_IsNewCardPresent() || ! RFID.PICC_ReadCardSerial()) { continue; } // Print Card UID pc.printf("Card UID: "); for(int i=0; card[i]!='\0'; i++) { card[i] = 0; } for (uint8_t i = 0; RFID.uid.uidByte[i]!= '\0' ; i++) { card[i] = data = RFID.uid.uidByte[i] ; pc.printf(" %d",data); } //////data card\\\\\\\ if(card[0] == 106 && card[1] == 230 && card[2] == 38 && card[3] == 231) { pc.printf("\n Name : Jettanan H. \n Student's ID : 57340500015 \n point : %d ",Jettanan.getPoint()); ShowUser(Jettanan); } if(card[0] == 186 && card[1] == 151 && card[2] == 37 && card[3] == 231) { pc.printf("\n Name : Nutthaya H. \n Student's ID : 57340500025 \n point : %d ",Nutthaya.getPoint()); ShowUser(Nutthaya); } if(card[0] == 199 && card[1] == 230 && card[2] == 46 ) { pc.printf("\n Name : Kanokwan T. \n Student's ID : 57340500001 \n point : %d ",Kanokwan.getPoint()); ShowUser(Kanokwan); } lcd.LCD_write_string(55,5,selectstart,1); lcd.LCD_write_string(0,5,selectcancel,1); pc.printf("\n\r"); t.start(); t.reset(); while(t.read_ms()<10000) { //5 if( rightbutton == 1 && leftbutton == 0) { //2 greenled = 1; while(rightbutton ==1) {wait(0.1);} wait(0.5); lcd.LCD_clear(); t2.start(); t2.reset(); lcd.LCD_write_string(0,0,"insert bottle",0); //lcd.LCD_clear(); while(t2.read_ms()<30000) { //1 check = 1 ; color = 0; clear = 0; colorsensor(color,clear); t3.start(); t3.reset(); while(t3.read_ms()<500) { lcd.LCD_write_string(44,5,"Submit",1); if(rightbutton == 1) { while(rightbutton ==1) {wait(0.1);} wait(0.5); goto LAND ; } } lcd.LCD_write_string(44,5," ",0); greenled = 0 ; }//1 }//2 else if(leftbutton == 1){break;} }//5 LAND : while(rightbutton ==1) {wait(0.1);} wait(0.5); lcd.LCD_clear(); while(check == 1) { lcd.LCD_write_string(10,0,"Do you want",0); lcd.LCD_write_string(14,1,"to play a",0); lcd.LCD_write_string(20,3,"GAME ?",0); lcd.LCD_write_string(5,5,"No",0); lcd.LCD_write_string(40,5,"Yes",0); if(rightbutton == 1 && leftbutton == 0) { //3 while(rightbutton ==1) {wait(0.1);} lcd.LCD_write_string(0,3,"join the GAME!",0); wait(1); /*Extend*/ lcd.backlight(ON); lcd.LCD_init(); total = countcolor + (counttran*2); color = countcolor ; clear = counttran ; highb = color/256 ; lowb = color - (highb*256); command[3] = lowb ; command[2] = highb ; highb = clear/256 ; lowb = clear - (highb*256); command[5] = lowb ; command[4] = highb ; command[0] = 0x42 ; command[1] = 0x52 ; command[6] = 0x4D ; for(int i=0;i<7;i++) { wait(0.1); device.putc(command[i]); pc.printf("%x\n",command[i]); } //After allow to play game if(total<=1) { lcd.LCD_clear(); lcd.LCD_write_string(0,2,"Sorry you don't",0); lcd.LCD_write_string(0,3,"have any point",0); wait(3); uint16_t sim ; sim = total ; if(card[0] == 106 && card[1] == 230 && card[2] == 38 && card[3] == 231) { Jettanan.UpdatePoint(sim); wait(1); ShowUser(Jettanan); } if(card[0] == 186 && card[1] == 151 && card[2] == 37 && card[3] == 231) { Nutthaya.UpdatePoint(sim); wait(1); ShowUser(Nutthaya); } if(card[0] == 199 && card[1] == 230 && card[2] == 46 ) { Kanokwan.UpdatePoint(sim); wait(1); ShowUser(Kanokwan); } wait(3); goto EXIT; } int totalsim; uint16_t credits; totalsim = total; credits = 0; pc.printf("Game mode"); lcd.LCD_clear(); while(1)//select credits { lcd.LCD_write_string(0,0,"total P :",0); lcd.LCD_write_string(10,1,"credits :",0); lcd.LCD_write_string(0,3,"2 Point = 1 Credits",0); char buff[4]; sprintf(buff,"%d",totalsim); lcd.LCD_write_string(67,0,buff,0); char buff2[4]; sprintf(buff2,"%d",credits); lcd.LCD_write_string(67,1,buff2,1); if(plusbutton ==1) { while(plusbutton==1) {wait(0.2);} if((totalsim-2)>=0) { credits = credits +1 ; totalsim = totalsim - 2; pc.printf("credits + 1"); lcd.LCD_clear(); } } if(minusbutton ==1) { while(minusbutton==1) {wait(0.2);} if((credits-1)>=0) { credits = credits - 1 ; totalsim = totalsim + 2; pc.printf("credits - 1"); lcd.LCD_clear(); } } if(leftbutton ==1) { uint16_t pointsim ; pointsim = total ; if(card[0] == 106 && card[1] == 230 && card[2] == 38 && card[3] == 231) { Jettanan.UpdatePoint(pointsim); wait(1); pc.printf("point sim = %d\n",pointsim); ShowUser(Jettanan); } if(card[0] == 186 && card[1] == 151 && card[2] == 37 && card[3] == 231) { Nutthaya.UpdatePoint(pointsim); wait(1); pc.printf("point sim = %d\n",pointsim); ShowUser(Nutthaya); } if(card[0] == 199 && card[1] == 230 && card[2] == 46 ) { Kanokwan.UpdatePoint(pointsim); wait(1); pc.printf("point sim = %d\n",pointsim); ShowUser(Kanokwan); } wait(3); pc.printf("left"); goto LEFT ; } if(rightbutton ==1) { if(credits ==0) { pc.printf("continue"); continue; } else if(credits >=1) { command[0]=0x42; command[1]=0x50; command[2]=0x00; command[3]=0x00; command[4]=0x00; command[5]=credits; command[6]=0x4D; for(int i=0;i<7;i++) { wait(0.1); device.putc(command[i]); pc.printf("%x\n",command[i]); } uint16_t simm ; simm = total-(credits*2) ; if(card[0] == 106 && card[1] == 230 && card[2] == 38 && card[3] == 231) { Jettanan.UpdatePoint(simm); wait(0.3); ShowUser(Jettanan); } if(card[0] == 186 && card[1] == 151 && card[2] == 37 && card[3] == 231) { Nutthaya.UpdatePoint(simm); wait(0.3); ShowUser(Nutthaya); } if(card[0] == 199 && card[1] == 230 && card[2] == 46 ) { Kanokwan.UpdatePoint(simm); wait(0.3); ShowUser(Kanokwan); } pc.printf("left"); break; } } }//select credits lcd.LCD_clear(); for(int w=0;w<credits;w++) { lcd.LCD_clear(); lcd.LCD_write_string(0,0,"Credits:",0); char buff[4]; sprintf(buff,"%d",credits-w); for(int i=0;i<7;i++) { re_command[i]=device.getc(); pc.printf("%x\n",re_command[i]); } if(re_command[0]==0x42 && re_command[1]==0x45 && re_command[6]==0x4D) { pc.printf("command not found"); break; } lcd.LCD_write_string(46,0,buff,0); lcd.LCD_write_string(58,0,"1 :",0); lcd.LCD_write_string(66,0,"??",0); lcd.LCD_write_string(58,1,"2 :",0); lcd.LCD_write_string(66,1,"??",0); lcd.LCD_write_string(58,2,"3 :",0); lcd.LCD_write_string(66,2,"??",0); lcd.LCD_write_string(58,3,"4 :",0); lcd.LCD_write_string(66,3,"??",0); lcd.LCD_write_string(0,4,"Pick up ball",0); lcd.LCD_write_string(0,5,"Dropto Gripper",0); ch = device.getc(); lcd.LCD_write_string(0,4," ",0); lcd.LCD_write_string(0,5," ",0); ch = device.getc(); if(ch == 0x53) { lcd.LCD_write_string(58,0,"1 :",0); lcd.LCD_write_string(66,0,random[re_command[2]],0); lcd.LCD_write_string(58,1,"2 :",0); lcd.LCD_write_string(66,1,random[re_command[3]],0); lcd.LCD_write_string(58,2,"3 :",0); lcd.LCD_write_string(66,2,random[re_command[4]],0); lcd.LCD_write_string(58,3,"4 :",0); lcd.LCD_write_string(66,3,random[re_command[5]],0); lcd.LCD_write_string(0,4," ",0); lcd.LCD_write_string(0,5," ",0); pc.printf("Start"); } ch = device.getc(); char checkc[4]; //char random[4][4]={"x0","x1","x2","x3"}; if(ch == 1) { lcd.LCD_write_string(58,0,"1 :",1); lcd.LCD_write_string(66,0,random[re_command[2]],1); sprintf(checkc,"%s",random[re_command[2]]) ; } else if(ch == 2) { lcd.LCD_write_string(58,1,"2 :",1); lcd.LCD_write_string(66,1,random[re_command[3]],1); sprintf(checkc,"%s",random[re_command[3]]) ; } else if(ch == 3) { lcd.LCD_write_string(58,2,"3 :",1); lcd.LCD_write_string(66,2,random[re_command[4]],1); sprintf(checkc,"%s",random[re_command[4]]) ; } else if(ch == 4) { lcd.LCD_write_string(58,3,"4 :",1); lcd.LCD_write_string(66,3,random[re_command[5]],1); sprintf(checkc,"%s",random[re_command[5]]) ; } if(checkc[1] == '0') { t_score = t_score+0; pc.printf("t_t"); } else if(checkc[1] == '1') { t_score = t_score+2; pc.printf("t_t"); } else if(checkc[1] == '2') { t_score = t_score+4; pc.printf("t_t"); } else if(checkc[1] == '3') { t_score = t_score+6; pc.printf("t_t"); } uint16_t gg; gg = device.getc(); } lcd.LCD_clear(); lcd.LCD_write_string(0,0,"Total Score :",0); char buff3[6]; sprintf(buff3,"%d",t_score); lcd.LCD_write_string(0,1,buff3,1); LEFT : if(card[0] == 106 && card[1] == 230 && card[2] == 38 && card[3] == 231) { Jettanan.UpdatePoint(t_score); wait(0.3); ShowUser(Jettanan); } if(card[0] == 186 && card[1] == 151 && card[2] == 37 && card[3] == 231) { Nutthaya.UpdatePoint(t_score); wait(0.3); ShowUser(Nutthaya); } if(card[0] == 199 && card[1] == 230 && card[2] == 46 ) { Kanokwan.UpdatePoint(t_score); wait(0.3); ShowUser(Kanokwan); } wait(3); lcd.LCD_clear(); /*End Extend*/ EXIT : lcd.LCD_clear(); break; }//3 else if(leftbutton == 1) { //4 while(leftbutton ==1) {wait(0.1);} total = countcolor + (counttran*2); color = countcolor ; clear = counttran ; highb = color/256 ; lowb = color - (highb*256); command[3] = lowb ; command[2] = highb ; highb = clear/256 ; lowb = clear - (highb*256); command[5] = lowb ; command[4] = highb ; command[0] = 0x42 ; command[1] = 0x52 ; command[6] = 0x4D ; for(int i=0;i<7;i++) { wait(0.1); device.putc(command[i]); pc.printf("%x\n",command[i]); } uint16_t sim2 ; sim2 = total; if(card[0] == 106 && card[1] == 230 && card[2] == 38 && card[3] == 231) { Jettanan.UpdatePoint(sim2); wait(1); ShowUser(Jettanan); } if(card[0] == 186 && card[1] == 151 && card[2] == 37 && card[3] == 231) { Nutthaya.UpdatePoint(sim2); wait(1); ShowUser(Nutthaya); } if(card[0] == 199 && card[1] == 230 && card[2] == 46 ) { Kanokwan.UpdatePoint(sim2); wait(1); ShowUser(Kanokwan); } wait(3); card[0] = 0; card[1] = 0; card[2] = 0; card[3] = 0; lcd.LCD_clear(); break; }//4 } lcd.LCD_clear(); check = 0; }//e }