You are on page 1of 10

นายสรยุทธ จาปัญญะ

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.2 ทำการเขียนโปรแกรมลงใน Arduino IDE และทำการโหลดโปรแกรมลงบอร์ดดูผลการทำงาน


const byte BUZZER_PIN = 6; for(int i=0;i<COLS;i++){
const byte ROWS = 4; if(digitalRead(colPins[i]) == 0){
const byte COLS = 4; while(digitalRead(colPins[i]) != 1);
char keys[ROWS][COLS] = { key_pressed = keys[j][i];
{'1','2','3','A'}, break;
{'4','5','6','D'}, }
{'7','8','9','C'}, }
{'*','0','#','D'}}; digitalWrite(rowPins[j], 1);
byte rowPins[ROWS] = {2,3,4,5}; if(key_pressed != 0){
byte colPins[COLS] = {8,9,10,11}; return key_pressed;
void setup(){ }
Serial.begin(115200); }
for(int i=0;i<ROWS;i++){ return 0;
pinMode(rowPins[i],OUTPUT); }
} void loop(){
for(int i=0;i<COLS;i++){ char key=getKey();
pinMode(colPins[i],INPUT_PULLUP); if(key != 0){
digitalWrite(colPins[i],1); tone(BUZZER_PIN,500);
} delay(100);
pinMode(BUZZER_PIN,OUTPUT); noTone(BUZZER_PIN);
#ifdef Key01 delay(100);
delay(1000); #ifdef Key01
Keyboard.begin(); Keyboard.press(key);
#endif delayMicroseconds(10);
} Keyboard.releaseAll();
char getKey(){ #endif
char key_pressed = 0; Serial.println(key);
for(int j=0;j<ROWS;j++){ delay(50);
for(int i=0;i<ROWS;i++){ digitalWrite(BUZZER_PIN,0);
digitalWrite(rowPins[i],(i==j) ? 0 : 1); }
} delay(10);
}
นายสรยุทธ จาปัญญะ
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.2 ทำการเขียนโปรแกรมลงใน Arduino IDE และทำการโหลดโปรแกรมลงบอร์ดดูผลการทำงาน


#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
byte rowPins[ROWS] = {9,8,7,6};
byte colPins[COLS] = {5,4,3,2};
Keypad keypad = Keypad(makeKeymap(keys),rowPins,colPins,ROWS,COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();
if(key != NO_KEY){
Serial.println(key);
}
}

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

4.2 ทำการเขียนโปรแกรมลงใน Arduino IDE และทำการโหลดโปรแกรมลงบอร์ดดูผลการทำงาน


#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','D'},
{'7','8','9','C'},
{'*','0','#','D'}};
byte rowPins[ROWS] = {8,9,10,11};
byte colPins[COLS] = {A3,A2,A1,A0};
Keypad keypad = Keypad(makeKeymap(keys),rowPins,colPins,ROWS,COLS);
นายสรยุทธ จาปัญญะ
65543206081-3
void setup(){
DDRD=0xFF;
}

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 ทำงานวิ่งจากซ้ายไปขวา

You might also like