Professional Documents
Culture Documents
65543206081-3
ใบงานการทดลองที่ 8
เรื่อง การสื่อสารการเชื่อมต่อไมโครคอนโทรเลอร์(ต่อ)
1. จุดประสงค์
3.4.3 ทดลองการสื่อสารข้อมูลรูปแบบ One wire
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 Liquid Crystal Display (LCD) 1 ตัว
2.9 potentiometer 1 ตัว
2.10 Micro Switch 1 ตัว
3. ลำดับขั้นการทดลอง
การทดลองที่ 1
1.1 ทำการต่อวงจรตามรูปที่ 1.1 และ 1.2
รูปที่ 1.1
นายสรยุทธ จาปัญญะ
65543206081-3
รูปที่ 1.2
1.2 ทำการเขียนโปรแกรมลงใน Arduino IDE และทำการโหลดโปรแกรมลงบอร์ดดูผลการทำงาน
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 3, 4, 5, 6, 7, 8, 9, 10);
void setup() {
lcd.begin(16,2);
lcd.clear();
}
void loop() {
lcd.setCursor(4,0);
lcd.print("Hello!!!!");
lcd.setCursor(0,1);
lcd.print("Technic Computer");
}
1.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อเริ่มการทำงานจอแสดงผลจะแสดงข้อความที่กำหนดไว้
1.4 สรุปผลการทดลอง
จากการทดลองพบว่ากำหนด library LiquitCrystal เมื่อใช้โมดูลของ LCD จากนั้นกำหนดพินแต่
ละตัว จากนั้นตั้งค่าแถวและคอลลัมน์ ต่อมาฟังก์ชันลูปกำหนดให้เริ่มแสดงตัวอักษรตำแหน่งที่ 4 แถวที่ 0
และ ตำแหน่งที่ 0 แถวที่ 1
นายสรยุทธ จาปัญญะ
65543206081-3
การทดลองที่ 2
2.1 ทำการต่อวงจรตามรูปที่ 1.3 และ 1.4
รูปที่ 1.3
รูปที่ 1.4
การทดลองที่ 3
3.1 ทำการต่อวงจรตามรูปที่ 1.5 และ 1.6
รูปที่ 1.5
นายสรยุทธ จาปัญญะ
65543206081-3
รูปที่ 1.6
3.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อเริ่มการทำงานจอแสดงผลจะแสดงข้อความที่กำหนดโดยสลับกับการไม่
แสดงผลโดยหน่วงเวลา 0.5 วินาที
3.4 สรุปผลการทดลอง
จากการทดลองพบว่ากำหนด library LiquitCrystal เมื่อใช้โมดูลของ LCD จากนั้นกำหนดพิน
แต่ละตัวและ จากนั้นตั้งค่าแถวกับคอลลัมน์และกำหนดให้ lcd แสดงข้อความ ในส่วนของฟังก์ชั้นลูปจะ
กำหนดให้ไม่แสดงผลแล้วหน่วงเวลา 0.5 วินาทีและให้แสดงผล 0.5 วินาที
นายสรยุทธ จาปัญญะ
65543206081-3
การทดลองที่ 4
4.1 ทำการต่อวงจรตามรูปที่ 1.7 และ 1.8
รูปที่ 1.7
รูปที่ 1.8
4.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อเริ่มการทำงานข้อความที่กำหนดให้แสดงผลเลื่อนไปกลับซ้ายขวา
4.4 สรุปผลการทดลอง
จากการทดลองพบว่ากำหนด library LiquitCrystal เมื่อใช้โมดูลของ LCD จากนั้นกำหนดพิน
แต่ละตัวและ จากนั้นตั้งค่าแถวกับคอลลัมน์และกำหนดให้ lcd แสดงข้อความ ในส่วนของฟังก์ชันลูปจะ
ทำการเลื่อนต่ำแหน่งในการแสดงผลไปทางซ้ายทีละ 1 ตำแหน่งโดยเลื่อให้เท่ากับบิตของข้อความที่กำหนด
จากนั้นให้เลื่อนตำแหน่งไปทางขวาทีละ 1 ตำแหน่งโดยเลื่อนให้เท่ากับบิตของจอแสดงผลบวกกับบิตของ
ข้อมความ แล้วเลื่อนไปทางซ้ายทีละ 1 ตำแหน่งโดยให้เท่ากับบิตของจอแสดงผล โดยการเลื่อนแต่ละ
ตำแหน่งละใช้การหน่วงเวลา 0.15 วินาที
การทดองที่ 5
5.1 ทำการต่อวงจรตามรูปที่ 1.9 และ 1.10
รูปที่ 1.9
นายสรยุทธ จาปัญญะ
65543206081-3
รูปที่ 1.10
5.2 ทำการเขียนโปรแกรมลงใน Arduino IDE และทำการโหลดโปรแกรมลงบอร์ดดูผลการทำงาน
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 8, 9, 10, 11);
const int Up_buttonPin = 2;
const int Down_buttonPin = 3;
int buttonPushCounter = 0;
int up_buttonState =0;
int up_lastbuttonState =0;
int down_buttonState =0;
int down_lastbuttonState =0;
bool bPress = false;
void setup(){
lcd.begin(16, 2);
lcd.print("Please Select");
lcd.setCursor(5, 1);
lcd.print(buttonPushCounter);
pinMode(Up_buttonPin,INPUT_PULLUP);
pinMode(Down_buttonPin,INPUT_PULLUP);
}
void loop(){
checkUp();
checkDown();
if(bPress){
bPress = false;
นายสรยุทธ จาปัญญะ
65543206081-3
lcd.setCursor(2,1);
lcd.print(" ");
lcd.setCursor(2,1);
lcd.print(buttonPushCounter);
}
}
void checkUp(){
up_buttonState = digitalRead(Up_buttonPin);
if(up_buttonState != up_lastbuttonState){
if(up_buttonState == LOW){
bPress = true;
buttonPushCounter++;
}
delay(50);
up_lastbuttonState = up_buttonState;
}
}
void checkDown(){
down_buttonState = digitalRead(Down_buttonPin);
if(down_buttonState != down_lastbuttonState){
if(down_buttonState == LOW){
bPress = true;
buttonPushCounter--;
}
delay(50);
down_lastbuttonState = down_buttonState;
}
}
5.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อเริ่มการทำงานจอแสดงผลจะแสดงข้อมความที่กำหนดและ เมื่อกดปุม่
เพิ่มจะทำการเพิ่มตัวเลข, ลดจะทำการลดตัวเลข ในตำแหน่งที่ 2 แถวที่ 1
นายสรยุทธ จาปัญญะ
65543206081-3
5.4 สรุปผลการทดลอง
จากการทดลองพบว่ากำหนด library LiquitCrystal เมื่อใช้โมดูลของ LCD จากนั้นกำหนดพิน
แต่ละตัวและ จากนั้นตั้งค่าแถวกับคอลลัมน์และกำหนดให้ lcd แสดงข้อความและ กำหนดให้แสดงการ
นับตำแหน่งที่ 2 แถวที่ 1 ใส่ส่วนขอวฟังก์ชันลูปขั้นตอนแรกจะเข้าฟังก์ชัน checkUp, checkDown ในทั้ง
2 ฟังก์ชันเมื่อกดสวิตช์ จะให้ bPress มีค่าเป็นจริง จากนั้นให้ค่าของ buttunPushCounter เพิ่มกับลด
จากนั้นให้เปลี่ยนค่าจริงเป็นเท็จ แล้วให้แสดงค่าของ buttonPushCounter
การทดลองที่ 6
6.1 ทำการต่อวงจรตามรูปที่ 1.11 และ 1.12
รูปที่ 1.11
รูปที่ 1.12
การทดลองที่ 7 (พิเศษ)
7.1 วงจรแสดงผล LCD 16x2 รวมกับ Keypad 4x4 โดยให้แสดงค่าโดยการหมุนจาก potentiometer
และ การรับค่าจาก Keypad แสดงเลข 2 หลัก 00-99
นายสรยุทธ จาปัญญะ
65543206081-3
รูปที่ 1.13
รูปที่ 1.14
void setup(){
Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(0, 0);
lcd.print(" VR Keypad ");
}
void loop (){
// Potentiomeer
int PotenVal = analogRead(A0);
aVal = map(PotenVal ,0,1023,0,99);
if(tempVal != aVal){
lcd.setCursor(3,1);
lcd.print(" ");
Serial.print(aVal);
lcd.setCursor(2,1);
lcd.print(aVal);
}
tempVal = aVal;
// Keypad
char key = keypad.getKey();
if(key != NO_KEY){
NumKP = key - '0';
Serial.print(NumKP);
lcd.setCursor(12,1);
lcd.print(" ");
lcd.setCursor(Cursor,1);
lcd.print(NumKP);
Cursor += 1;
}else if(Cursor >= 13){
นายสรยุทธ จาปัญญะ
65543206081-3
NumKP = 0;
Cursor = 10;
lcd.setCursor(11,1);
lcd.print(" ");
lcd.setCursor(Cursor,1);
lcd.print(NumKP);
}
}
7.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อเริ่มการทำงานจอแสดงผลจะแสดงคำว่า “VR KEYPAD” และเมื่อหมุน
Potentiometer ค่าในช่วง 0-99 จะแสดงด้านล่างของ “VR” และ เมื่อกดตัวเลขบน Keypad จะแสดงได้
แค่เลข 2 หลักเท่านั้น เมื่อกดเกินค่าจะรีเซ็ทเป็น 0 ทันที
7.4 สรุปผลการทดลอง
จากการทดลองพบว่าเมื่อต่อวงจรทำการให้รับค่าจาก Potentiometer & Keypad ให้แสดงผล
บนจอ LCD โดยใช้โมดูลของ LCD & Keypad แล้วตั้งค่าจอแสดงผล 16x2, Keypad[4][4] และประกาศ
ตัวแปร 4 ตัวได้แก่ aVal(เก็บค่าของ Potentiometer), tempVal(เก็บค่าปัจจุบันของ Potentiometer),
NumKP(เก็บค่าตัวเลขจาก Keypad), Cursor(ตำแหน่งของการแสดงตัวเลข) = 10 จากนั้นในฟังกชันลูป
ในส่วนแรกจะเป็นการรับค่าจาก Potentiometer โดยการแปลงค่าจากช่วง 0-1023 เป็น 0-99 ถ้า
tempVal != aVal ให้แสดง aVal และให้ tempVal = aVal ในส่วนที่สองจะเป็นการรับค่าจาก Keypad
โดยรับค่ามาเก็บที่ key จากนั้นเช็คว่าได้กดจริงมั้ยถ้าจริงให้ NumKP เก็บค่าของ key ที่แปลงเป็นตัวเลข
จากนั้นให้แสดง NumKP บนตำแหน่งของ Cursor แล้วให้ค่า Cursor เลื่อนไป 1 ตำแหน่ง ถ้าค่า Cursor
เลื่อนไปในตำแหน่งที่ >= 13 ให้ค่า NumKP = 0 และค่า Cursor = 10 จากนัน้ แสดงค่าของ NumKP