หน้าเว็บ

วันอังคารที่ 19 กุมภาพันธ์ พ.ศ. 2556

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

3. ระบบสื่อสารข้อมูลอย่างง่าย (10 คะแนน)


การสื่อสารอนุกรมระหว่างบอร์ด UNICON 
สร้างระบบการสื่อสารระหว่างไมโครคอนโทรลเลอร์ 2 ตัวให้สามารถรับและส่งข้อมูลกันได้ 
     3.1 เชื่อมต่อสายระหว่างบอร์ด Arduino ทั้งสองบอร์ดเพื่อให้สามารถสื่อสารอนุกรมระหว่างบอร์ดไมโครคอนโทรลเลอร์ทั้งสองบอร์ดได้
     3.2 เชื่อมต่อZX-SWITCH และ ZX-LED ดังแสดงในรูป โดยจะเลือกต่อขาพอร์ตขาใด ๆ ก็ได้
     3.3 เขียนโปรแกรมสื่อสารระหว่างบอร์ด UNICON รับค่าจากสวิตช์แสดงผลที่หน้าจอ GLCD และ ZX-LED โดยมีการให้คะแนนดังนี้
        3.3.1 เมื่อกดสวิตช์ SW1 LED1 ต้องติดค้าง และเมื่อกดสวิตช์ SW1 อีกครั้ง LED1 ต้องดับ สลับกันไปเรื่อยๆ (2 คะแนน)
        3.3.2 เมื่อกดสวิตช์ SW2 LED2 ต้องติดค้าง และเมื่อกดสวิตช์ SW2 อีกครั้ง LED2 ต้องดับ สลับกันไปเรื่อยๆ (2 คะแนน)
        3.3.3 เมื่อกดสวิตช์ SW3 หน้าจอ GLCD จะต้องแสดงข้อความ SW3 PRESS และเมื่อไม่กดข้อความจะต้องหายไป (2 คะแนน)
        3.3.4 เมื่อกดสวิตช์ SW4 หน้าจอ GLCD จะต้องแสดงข้อความ SW4 PRESS และเมื่อไม่กดข้อความจะต้องหายไป (2 คะแนน)
       3.3.5 ทุกครั้งที่มีการกดสวิตช์ทั้ง 4 ตัวมีเสียง BEEP ออกลำโพงเปียโซ ZX-SPEAKER (2 คะแนน)


การทำงานของโปรแกรม
  การทำงานฝั่ง MASTER จากวงจรการเขียนโปรแกรมสามารถใช้คำสั่ง Serial1 มาใช้งานได้เลย โดยเริ่มต้นกำหนดค่าให้การสื่อสารด้วยบอดเรต 9600 จากคำสั่ง
Serial1.begin(9600);
จากนั้นก็เป็นการตรวจสอบอ่านค่าข้อมูล ถ้ามีข้อมูลถูกส่งเข้ามาก็ให้ตรวจสอบว่าตรงกับค่าใด แล้วให้ทำงานตามค่านั้น ๆ จากนั้นตรวจสอบสวิตช์ว่ามีการกดหรือไม่ ถ้ากดให้ส่งค่าออกไป โดยจะเป็นการส่งค่าสลับกันไป เป็นตัว A และ a สำหรับสวิตช์ SW1 และ B และ b สำหรับ SW2
การทำงานของฝั่ง SLAVE ก็แบบเดียวกัน คือรับค่าแล้วนำค่ามาแสดงที่ LED และรอการกดสวิตช์เพื่อส่งค่าผ่านพอร์ตอนุกรมออกไป
 โดยโปรแกรมทั้งหมดเป็นดังนี้




Exported from Notepad++
//************************************************** :: MASTER UNICON with GLCD //************************************************** #include int x,flag_=0,flag1=0; void setup(){ Serial1.begin(9600); setTextSize(2); glcdMode(3); } void loop(){ if(Serial1.available()){ x=Serial1.read(); if(x==65){ glcd(1,1,"SW3 PRESS"); } else if(x==97){ glcd(1,1," "); } else if(x==66){ glcd(2,1,"SW4 PRESS"); } else if(x==98){ glcd(2,1," "); } } if (in(19)==0){ if(flag_==0){ flag_=1; Serial1.write(65); } else{ flag_=0; Serial1.write(97); } delay(200); } if (in(20)==0){ if(flag1==0){ flag1=1; Serial1.write(66); } else{ flag1=0; Serial1.write(98); } delay(200); } } //************************************************** :: SLAVE UNICON //************************************************** #include int x,flag19_0,flag19_1,flag20_0,flag20_1=0; void setup(){ Serial1.begin(9600); } void loop(){ if(Serial1.available()){ x=Serial1.read(); if(x==65){ out(21,1); } else if(x==97){ out(21,0); } else if(x==66){ out(22,1); } else if(x==98){ out(22,0); } } if (in(19)==0){ flag19_1=0; if(flag19_0==0){ flag19_0=1; Serial1.write(65); delay(20); } } else{ flag19_0=0; if(flag19_1==0){ flag19_1=1; Serial1.write(97); delay(20); } } if (in(20)==0){ flag20_1=0; if(flag20_0==0){ flag20_0=1; Serial1.write(66); delay(20); } } else{ flag20_0=0; if(flag20_1==0){ flag20_1=1; Serial1.write(98); delay(20); } } }

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