You are on page 1of 14

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

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

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


#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 3, 4, 5, 6, 7, 8, 9, 10);
unsigned char Character1[8] = { 0x04, 0x1F, 0x11, 0x11,
0x1F, 0x1F, 0x1F, 0x1F };
unsigned char Character2[8] = { 0x01, 0x03, 0x07, 0x1F,
0x1F, 0x07, 0x03, 0x01 };
unsigned char Character3[8] = { 0x00, 0x00, 0x0A, 0x15,
0x11, 0x0A, 0x04, 0x00 };
unsigned char Character4[8] = { 0x04, 0x0E, 0x0E, 0x0E,
0x1F, 0x00, 0x04, 0x00 };
void setup() {
lcd.begin(16,2);
lcd.clear();
lcd.createChar(0, Character1);
นายสรยุทธ จาปัญญะ
65543206081-3
lcd.createChar(1, Character2);
lcd.createChar(2, Character3);
lcd.createChar(3, Character4);
}
void loop() {
lcd.setCursor(0,0);
lcd.print("Hello!!!!");
lcd.setCursor(0,1);
for(int i=0;i<4;i++){
lcd.write(i);
delay(200);
}
}
2.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อเริ่มการทำงานจอแสดงผลจะแสดงข้อความที่กำหนดไว้
2.4 สรุปผลการทดลอง
จากการทดลองพบว่ากำหนด library LiquitCrystal เมื่อใช้โมดูลของ LCD จากนั้นกำหนดพินแต่
ละตัวและกำหนดค่าของอักษรพิเศษในตาราง ASCII แทนโดนอาเรย์ 8 บิต จากนั้นตั้งค่าแถวและคอลลัมน์
และอักษรพิเศษจากนั้นแสดงข้อมความในตำแหน่งที่ 0 แถวที่ 0 และอักษรพิเศษแสดงในตำแหน่งที่ 0 แถว
ที่ 1

การทดลองที่ 3
3.1 ทำการต่อวงจรตามรูปที่ 1.5 และ 1.6

รูปที่ 1.5
นายสรยุทธ จาปัญญะ
65543206081-3

รูปที่ 1.6

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


#include <LiquidCrystal.h>
LiquidCrystal lcd(13,12,8,9,10,11);
void setup(){
lcd.begin(16,2);
lcd.print("Hello World");
}
void loop(){
lcd.noDisplay();
delay(500);
lcd.display();
delay(500);
}

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


#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 8, 9, 10, 11);
int posCount=0;
void setup() {
lcd.begin(16,2);
lcd.print("Hello, world");
}
void loop() {
for (posCount = 0; posCount < 12; posCount++){
delay(150);
lcd.scrollDisplayLeft();
delay(150);
}
for (posCount = 0; posCount < 28; posCount++){
นายสรยุทธ จาปัญญะ
65543206081-3
lcd.scrollDisplayRight();
delay(150);
}
for (posCount = 0; posCount < 16; posCount++){
lcd.scrollDisplayLeft();
delay(150);
}
}

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

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


#include <LiquidCrystal.h>
LiquidCrystal lcd(13,12,8,9,10,11);
int aVal =0;
int tempVal =0;
นายสรยุทธ จาปัญญะ
65543206081-3
void setup(){
lcd.begin(16,2);
lcd.setCursor(0, 0);
lcd.print("Read Value VR1:");
lcd.setCursor(5, 1);
lcd.print(aVal);
}

void loop (){


aVal = analogRead(A0);
if(tempVal != aVal){
lcd.setCursor(5,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print(aVal);
}
tempVal = aVal;
}
6.3 สังเกตุผลการทดลองและบันทึกผลการทดลอง
จากการสังเกตุพบว่าเมื่อเริ่มทำกานจอแสดงผลจะแสดงข้อความที่กำหนดละและค่าของ
Potentiometer
6.4 สรุปผลการทดลอง
จากการทดลองพบว่ากำหนด library LiquitCrystal เมื่อใช้โมดูลของ LCD จากนั้นกำหนดพิน
แต่ละตัวและ จากนั้นตั้งค่าแถวกับคอลลัมน์และกำหนดให้ lcd แสดงข้อความและ กำหนดให้แสดงการ
นับตำแหน่งที่ 0 แถวที่ 0 และกำหนดให้แสดงค่าที่รับจาก aVal แสดงในตำแหน่งที่ 5 แถวที่ 1 ในส่วน
ของฟังก์ชันลูปจะอ่านค่าจากพอร์ต A0 และเก็บค่านั้นไว้ใน aVal ถ้า tempVal != aVal ให้แสดงค่า aVal
แล้วให้ tempVal = aVal

การทดลองที่ 7 (พิเศษ)
7.1 วงจรแสดงผล LCD 16x2 รวมกับ Keypad 4x4 โดยให้แสดงค่าโดยการหมุนจาก potentiometer
และ การรับค่าจาก Keypad แสดงเลข 2 หลัก 00-99
นายสรยุทธ จาปัญญะ
65543206081-3

รูปที่ 1.13

รูปที่ 1.14

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


#include <Keypad.h>
#include <LiquidCrystal.h>
#include <string.h>
LiquidCrystal lcd(13,12,8,9,10,11);
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] = {4, 5, 6, 7};
byte colPins[COLS] = {A1, A2, A3, A4};
นายสรยุทธ จาปัญญะ
65543206081-3
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int aVal =0;
int tempVal =0;
int NumKP= 0;
int Cursor =10;

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

You might also like