Professional Documents
Culture Documents
ใบงานการทดลองที่ 7
ใบงานการทดลองที่ 7
65543206081-3
ใบงานการทดลองที่ 7
เรื่อง การสื่อสารการเชื่อมต่อไมโครคอนโทรเลอร์
1. จุดประสงค์
3.4.3 ทดลองรูปแบบสื่อสาร
2. เครื่องมือและอุปกรณ์การทดลอง
2.1 โปรแกรม Arduino IDE 1.8.16 หรือสูงกว่า 1 โปรแกรม
2.2 สาย USB สำหรับ Arduino Uno R3 1 เส้น
2.3 ชุดทดลอง Arduino Uno R3 1 ชุด
2.4 สายต่อวงจร 1 ชุด
2.5 เครื่องคอมพิวเตอร์แบบพกพา 1 เครื่อง
2.6 แผงต่อวงจร 1 ตัว
2.7 ตัวต้านทาน 1 k Ω 6 ตัว
2.8 ไดโอดเปล่งแสง 6 ตัว
2.9 7 Segment 2 ตัว
2.10 Buzzer 1 ตัว
3. ลำดับขั้นการทดลอง
การทดลองที่ 1
1.1 ทำการต่อวงจรตามรูปที่ 1.1 และ 1.2
รูปที่ 1.1
นายสรยุทธ จาปัญญะ
65543206081-3
รูปที่ 1.2
1.2 ทำการเขียนโปรแกรมลงใน Arduino IDE และทำการโหลดโปรแกรมลงบอร์ดดูผลการทำงาน
#define r1 7 else if(digitalRead(c2)==0){ Serial.println("8");}
#define r2 8 Serial.println("2");} else if(digitalRead(c3)==0){
#define r3 9 else if(digitalRead(c3)==0){ Serial.println("9");}
#define r4 10 Serial.println("3");} else if(digitalRead(c4)==0){
#define c1 6 else if(digitalRead(c4)==0){ Serial.println("C");}
#define c2 5 Serial.println("A");} digitalWrite(r3,1);
#define c3 4 digitalWrite(r1,1); digitalWrite(r4,0);
#define c4 3 digitalWrite(r2,0); if(digitalRead(c1)==0){
void setup(){ if(digitalRead(c1)==0){ Serial.println("*");}
Serial.begin(9600); Serial.println("4");} else if(digitalRead(c2)==0){
pinMode(r1,OUTPUT); else if(digitalRead(c2)==0){ Serial.println("0");}
pinMode(r2,OUTPUT); Serial.println("5");} else if(digitalRead(c3)==0){
pinMode(r3,OUTPUT); else if(digitalRead(c3)==0){ Serial.println("#");}
pinMode(r4,OUTPUT); Serial.println("6");} else if(digitalRead(c4)==0){
pinMode(c1,INPUT_PULLUP); else if(digitalRead(c4)==0){ Serial.println("D");}
pinMode(c2,INPUT_PULLUP); Serial.println("B");} digitalWrite(r4,1);
pinMode(c3,INPUT_PULLUP); digitalWrite(r2,1); }
pinMode(c4,INPUT_PULLUP); digitalWrite(r3,0);
digitalWrite(r1,1); if(digitalRead(c1)==0){
digitalWrite(r2,1); Serial.println("7");}
digitalWrite(r3,1); else if(digitalRead(c2)==0){
digitalWrite(r4,1);
}
void loop(){
digitalWrite(r1,0);
if(digitalRead(c1)==0){
Serial.println("1");}
นายสรยุทธ จาปัญญะ
65543206081-3
1.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อปุม่ บน Keypad จะแสดงบน Serial Monitor
1.4 สรุปผลการทดลอง
จากการทดลองพบว่าในการทำงานของโปรแกรมนี้จะใช้เงื่อนไขในการกดโดยคำนวณจาก แถว
และ คอลัมน์ แล้วแสดงค่าที่ที่กดใน Serial Monitor
การทดลองที่ 2
2.1 ทำการต่อวงจรตามรูปที่ 1.3 และ 1.4
รูปที่ 1.3
รูปที่ 1.4
นายสรยุทธ จาปัญญะ
65543206081-3
2.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าจะมีการทบแถวขึ้นมา 1 แถวเช่น เมื่อกด 1, 2, 3, A จะได้ 4, 5, 6, B
2.4 สรุปผลการทดลอง
จากการทดลองพบว่าเราใช้โมดูล Keypad และกำหนดให้ ROW, COL, Buzzer เป็น Output
เมื่อกดจะได้ยินเสียงและทำการใช้ลูปซ้อนลูปเพื่อระบุตำแหน่งของปุ่มเพื่อจะแสดงค่าบน Serial Monitor
การทดลองที่ 3
3.1 ทำการต่อวงจรตามรูปที่ 1.5 และ 1.6
รูปที่ 1.5
รูปที่ 1.6
นายสรยุทธ จาปัญญะ
65543206081-3
3.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อปุม่ บน Keypad จะแสดงบน Serial Monitor
3.4 สรุปผลการทดลอง
จากการทดลองพบว่าเราใช้โมดูล Keypad และกำหนดให้ ROW, COL และพินของ ROW, COL
จากนั้นใช้โมดูล Keypad เพื่อเก็บค่าที่กดจากนั้นเก็บค่าที่กดไว้ใน key แล้วให้แสดงบน Serial Monitor
นายสรยุทธ จาปัญญะ
65543206081-3
การทดลองที่ 4
4.1 ทำการต่อวงจรตามรูปที่ 1.7 และ 1.8
รูปที่ 1.7
รูปที่ 1.8
void loop(){
int i=0;
char key=keypad.getKey();
if(key != NO_KEY){
i=(key);
i=i-48;
PORTD=num[i];
}
}
4.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อตัวเลขบน Keypad จะแสดงบน 7-segment
4.4 สรุปผลการทดลอง
จากการทดลองพบว่าเราใช้โมดูล Keypad และกำหนดให้ ROW, COL และพินของ ROW,
COL จากนั้นใช้โมดูล Keypadเพือ่ เก็บค่าที่กด จากนั้นเซ็ท Output ของ 7-Segment ในฟังก์ชันลูปให้ i
= 0 และเก็บค่าที่กดไว้ใน key แล้วให้ I = key จากนั้นให้ I – 48 แสดงค่าบน 7-Segment
การทดองที่ 5 (พิเศษ)
5.1 จงออกแบบวงจรไฟวิ่งขวาไปซ้ายโดยกำหนดความเร็วได้ใน KeyPad
รูปที่ 1.9
นายสรยุทธ จาปัญญะ
65543206081-3
รูปที่ 1.10
5.2 ทำการเขียนโปรแกรมลงใน Arduino IDE และทำการโหลดโปรแกรมลงบอร์ดดูผลการทำงาน
#include <Keypad.h> } digitalWrite(ledPin[thisLed],
#define ledCount 8 void loop(){ LOW);
const byte ROWS = 4; char key = }
const byte COLS = 4; keypad.getKey(); }
int ledPin[] = {2,3,4,5,6,7,8,9}; if (key != NO_KEY){ void CloseLED(){
char keys[ROWS][COLS] = { int number = key - '0'; for (int thisLed = 0;
{'1', '2', '3', 'A'}, if (number >= 1 && thisLed < ledCount;
{'4', '5', '6', 'D'}, number <= 9){ thisLed++){
{'7', '8', '9', 'C'}, int time = number *
{'*', '0', '#', 'D'}}; 100; digitalWrite(ledPin[thisLed],
byte rowPins[ROWS] = {10, 11, 12, 13}; DisplayLED(time); LOW);
byte colPins[COLS] = {A3, A2, A1, A0}; }else if (key == '#'){ }
Keypad keypad = CloseLED(); }
Keypad(makeKeymap(keys), }
rowPins, colPins, ROWS, }
COLS); }
void DisplayLED(int t){
void setup(){ for (int thisLed =
Serial.begin(9600); ledCount - 1; thisLed >= 0;
for (int LED = 0; LED < ledCount; thisLed--){
LED++) {
pinMode(ledPin[LED], OUTPUT); digitalWrite(ledPin[thisLed],
} HIGH);
delay(t);
นายสรยุทธ จาปัญญะ
65543206081-3
5.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตพบว่าเมื่อกดเลขบน keypad จะเป็นการทำให้ LED วิ่งจากขวาไปซ้ายยิ่งเลข
น้อยยิ่งวิ่งได้เร็ว
5.4 สรุปผลการทดลอง
จากการทดลองพบว่าเราใช้โมดูล Keypad และกำหนดให้ ROW, COL และพินของ ROW, COL
จากนั้นใช้โมดูล Keypadเพื่อเก็บค่าที่กด จากนั้นเซ็ทเอาพุตให้กับพินของ LED ในฟังก์ชันลูปให้ i = 0 และ
เก็บค่าทีก่ ดไว้ใน key ถ้ากดจะแปลงเป็นตัวเลขถ้า num >=1 & num <=9 จะให้ num * 100 เก็บค่าไว้
ใน time แล้วเข้าฟังก์ชัน DisplayLED(time) ให้ LED ทำงานวิ่งจากซ้ายไปขวา