[1/2568] ใบงานรายวิชา เซนเซอร์และแอคทูเอเตอร์ [สัปดาห์ที่ 14]
ใบงานประจำสัปดาห์ รายวิชาเซนเซอร์และแอคทูเอเตอร์
รายวิชาเซนเซอร์และแอคชูเอเตอร์
จงเขียนไมโครคอนโทรลเลอร์เชื่อมต่อกับเซนเซอร์และแอคูเอเตอร์ โดยกำหนดให้เชื่อมต่อกับ led, switch, dht22 โดยใช้งานคำสั่งที่ส่ง output สัญญาณ digital เพื่อควบคุมให้ได้ตามโจทย์ที่กำหนด. โดยใช้ความรู้ในการเขียนโปรแกรมพื้นฐานที่เรียนในสัปดาห์ที่ผ่านมา นำมาประยุกต์ใช้งานด้วยคำสั่งที่ใช้เขีนยโปรแกรม if , if else ฝึกกระบวนการคิด การลำดับขั้นตอนตามข้อย่อยที่กำหนด
กำหนดให้นักเรียนนักศึกษา ทำการต่อ arduino uno r3 กับ LCD1602 และปุ่มกดสองปุ่ม ดังรูป
ตัวอย่างคำสั่ง
รูปแบบการเขียนคำสั่ง if
if(condition){
//statement การทำงานใดๆ
}
รูปแบบการเขียนคำสั่ง if else
if(condition){
//statement การทำงานใดๆ
}else{
//statement การทำงานใดๆ
}
รูปแบบการเขียนคำสั่ง if else..if
if(condition){
//statement การทำงานใดๆ
}else if(condition){
//statement การทำงานใดๆ
}
รูปแบบการเขียนคำสั่ง switch case
switch (variable)
{
case VALUE_1:
//statement การทำงานใดๆ
break;
case VALUE_2:
//statement การทำงานใดๆ
break;
case VALUE_3:
//statement การทำงานใดๆ
break;
default:
//statement การทำงานใดๆ
}
ข้อควรระวังการต่อใช้งานกับโมดูล button นั้น มีทั้งแบบ active HIGH และแบบ active LOW นักศึกษาต้องทำการตรวจสอบว่าโมดูลปุ่มกดที่ได้ไปนั้นเป็นประเภทไหนจะได้ทำการเขียนโปรแกรมควบคุมได้อย่างถูกต้อง
เมื่อนักเรียนนักศึกษาทำการ ต่อไมโครคอนโทรลเลอร์เข้ากับ led และปุ่มกดแล้ว ให้ทำการเช็คโมดูลปุ่มกดนั้นเป็น Active HIGH หรือ Active LOW โดยทดลองเขียน code ดังต่อไปนี้ และการอ้างอิงตำแหน่งค่า input เพื่อรับสัญญาณดิจิตอลจะอยู่ที่ขา 11 หากนักเรียนนักศึกษาต่อขา input ที่รับสัญญาณแตกต่างไปจากนี้ให้ทำการเปลี่ยนขานั้นๆ ให้ตรงกับการต่อใช้งานจริงด้วย มิฉะนั้นการรับค่า digitalRead จะเกิดความผิดพลาด
int button = 11;
void setup(){
Serial.begin(9600);
pinMode(button,INPUT);
}
void loop() {
if(digitalRead(button)==HIGH){
Serial.println("button is Active HIGH");
}
delay(500);
}
เมื่อนักเรียนนักศึกษาใช้งาน code ด้านบนแล้ว Serial monitor ไม่ปรากฏข้อความแต่เมื่อลองกดปุ่ม แล้วปรากฏคำว่า button is Active HIGH ที่หน้า Serial monitor แสดงว่าโมดูลที่นักเรียนต่ออยู่นั้นถูกต้อง และเป็นชนิด Actiove HIGH
int button = 11;
void setup(){
Serial.begin(9600);
pinMode(button,INPUT);
}
void loop() {
if(digitalRead(button)==LOW){
Serial.println("button is Active LOW");
}
delay(500);
}
เมื่อนักเรียนนักศึกษาใช้งาน code ด้านบนแล้ว Serial monitor ไม่ปรากฏข้อความแต่เมื่อลองกดปุ่ม แล้วปรากฏคำว่า button is Active LOW ที่หน้า Serial monitor แสดงว่าโมดูลที่นักเรียนใช้งานนั้นถูกต้อง และเป็นชนิด Actiove LOW
การใช้งานจอ lcd16x2 แบบต่อตรง
การใช้งานจอ lcd16x2 แบบโมดูลไดร์ I2C
ในการต่อใช้งานจอแสดงผล lcd16x2 เข้ากับไมโครคอนโทรลเลอร์ด้วยโมดูลไดร์ I2C มีการเชื่อมต่อดังต่อไปนี้- Vcc -- > Vcc (5v)
- Gnd --> Gnd
- SCL --> A5
- SDA -- >A4
ให้นักเรียนนักศึกษาทำไปทีละข้อย่อยแล้วเรียกตรวจ พร้อมอธิบาย
- 1. กำหนดให้นักเรียนนักศึกษาเชื่อมต่อ ไมโครคอนโทรลเลอร์กับจอ lcd1602 แล้วเขียนโปรแกรมแสดงผลชื่อนักเรียน ณ ตำแหน่งบรรทัดที่ 2 ชิดขอบขวา(ชื่อจริง)
- 2. กำหนดให้นักเรียนนักศึกษาเชื่อมต่อ ไมโครคอนโทรลเลอร์กับปุ่มกด button 1 ปุ่ม แล้ว เมื่อมีการกดปุ่มให้แสดงจำนวนครั้งที่กดผ่าน lcd1602 เพิ่มขึ้นครั้งละ 1 จำนวน
- 3. (ต่อ)จากข้อย่อยที่ 2 กำหนดให้เขียนแสดงผลตัวเลข "1" และปรับปรุงโปรแกรมเมื่อกดปุ่ม button 1 ครั้งข้อความ "1" ต้องย้ายตำแหน่งไปทางขวา 1 ช่อง
- 4. (ต่อ)จากข้อย่อยที่ 3 เขียนโปรแกรมปรับปรุงโดยกำหนดให้ตัวเลข "1" เลื่อนตำแหน่งไปทางขวา แบบอัตโนมัตครั้งละ 1 วินาที และเมื่อนักเรียนกดปุ่ม button 1 แล้วให้ "1" สลับบรรทัดได้เป็นฝั่งตรงข้าม ( ข้อความ "1" มีได้แค่ 1 ข้อความบทจอเท่านั้น การเลื่อนตำแหน่งต้องทำไปเรื่อยๆจนกว่าจะชิดขอบขวา )
- 5. (ต่อ) จากข้อย้อยที่ 4 เขียนปรับปรุงโปรแกรมเพิ่มเติมให้ตัวเลข "1" ย้ายตำแหน่งไปเรื่อยๆเมื่อถึงขวามือสุดแล้วเปลี่ยนบรรทัดอัตโนมัต (วนซ้ำได้ไม่ หยุดเมื่อชิดขวาแล้ว และคุณสมบัติแบบข้อย่อยที่ 4 ยังคงอยู่)
ความคิดเห็น
แสดงความคิดเห็น