หน้าเว็บ

วันศุกร์ที่ 22 กุมภาพันธ์ พ.ศ. 2556

เฉลยโจทย์การแข่งขันทักษะอาชีวะศึกษา ไมโครคอนโทรลเลอร์ระดับประเทศ ปวส.อิเล็กทรอนิกส์ ปีการศึกษา 2555 
การติดต่อและใช้งานโมดูล RFID (15 คะแนน)




4. ทำการเชื่อมต่อบอร์ดอ่าน RFID เข้ากับบอร์ด UNICON รวมทั้งต่อสวิตช์ SW1 และ LED1 จากนั้นเขียนโปรแกรมเพื่ออ่านค่า RFID โดยให้ผลลัพธ์รูปแบบดังนี้
4.1 อ่านค่าจาก RFID นำค่ามาแสดงผลที่หน้าจอ GLCD เป็นตัวอักษร 10 หลักได้ (5 คะแนน)
สามารถตรวจสอบ RFID อันที่ต้องการได้
4.2 เมื่อนำ RFID อันที่ 1 มาอ่านหน้าจอ GLCD แสดงข้อความ “CORRECT!”  LED 1 ติดสว่าง นำการ์ดอันที่ 2 หรืออันอื่นๆ จากกรรมการหน้าจอ GLCD แสดงข้อความ “WRONG!” และ LED1 ดับ (5 คะแนน )
การเก็บค่ารหัสใน EEPROM
4.3 เมื่อทำการกดสวิตช์ SW1 จะต้องมีการบันทึกรหัสของ RFID อันที่อ่านล่าสุดเก็บในหน่วยความจำ EEPROM ซึ่งจะไม่ศูนย์หายไปเมื่อไม่มีไฟเลี้ยง ดังนั้นเมื่อทดลองถอดไฟเลี้ยงออกจากบอร์ด UNICON และจ่ายไฟเข้าไปใหม่อีกครั้ง  RFID อันที่อ่านล่าสุด เมื่อนำมาอ่านอีกครั้งจะต้องแสดงข้อความ “CORRECT” ส่วนใบอื่นๆ จะต้องแสดงข้อความ “WRONG” (5 คะแนน)


โปรแกรมนี้จะต้องอ่านค่าข้อมูลจากการ์ดจำนวน 10 ไบต์แล้วนำมาใช้เปรียบเทียบเพื่อหาการ์ดที่ถูกต้อง ซ้ำยังต้องบันทึกค่าที่อ่านได้ไว้ในหน่วยความจำอีอีพรอมด้วย โดยโปรแกรมมีดังนี้ครับ



Exported from Notepad++
#include <unicon.h> #include <EEPROM.h> int j,val=0; int address=0; char code[10]; char ref[10]; int bytesread = 0; void setup(){ Serial1.begin(2400); out(6,LOW); glcdMode(1); setTextSize(2); /* setTextColor(GLCD_GREEN);glcd(0,1,"Read EEPROM"); for(int i=0;i<10;i++){ ref[i]=EEPROM.read(i); }*/ setTextColor(GLCD_GREEN);glcd(0,1,"Ready "); } void loop(){ if(in(21)==0){ setTextColor(GLCD_SKY);glcd(0,1,"Write EEPROM"); for(int i=0;i<10;i++){ EEPROM.write(i,code[i]); } sleep(1000); setTextColor(GLCD_GREEN);glcd(0,1,"Read EEPROM"); for(int i=0;i<10;i++){ ref[i]=EEPROM.read(i); } } if(in(23)==0){ setTextColor(GLCD_GREEN);glcd(0,1,"Read EEPROM"); for(int i=0;i<10;i++){ ref[i]=EEPROM.read(i); } } if(Serial1.available()>0){ if((val=Serial1.read())==10){ bytesread=0; while(bytesread<10){ if( Serial1.available()>0){ val=Serial1.read(); if((val==10)||(val==13)){ break; } code[bytesread] = val; bytesread++; } } if(bytesread==10){ j=0; for(int i=0;i<10;i++){ if(code[i]==ref[i]){j++;} } if(j>9) {out(22,1);setTextColor(GLCD_BLUE);glcd(2,1,"CORRECT!"); } else {out(22,0);setTextColor(GLCD_RED);glcd(2,1,"WRONG!!!");} } out(6,HIGH);code[10]='$';setTextColor(GLCD_BLUE);glcd(5,1,code); bytesread= 0; setTextColor(GLCD_YELLOW);glcd(0,1,"Ready "); sleep(500); out(6,LOW);setTextColor(GLCD_GREEN);glcd(0,1,"Ready "); } } }

ไม่มีความคิดเห็น: