เนื่องจากเราต้องการทำหุ่นยนต์ภารกิจเดินตามเส้น เราจึงจำเป็นต้องอ่านค่าพื้นของสนามและเส้นสนาม เพื่อนำไปใช้เป็นค่าอ้างอิงในการแยกเส้นและพื้นสนาม
และ Sensor ที่ใช้เป็นเซนเซอร์แบบ analog ค่าที่อ่านได้จึงอยู่ระหว่าง 0 - 1023 โดยหาค่ากลางของพื้นและเส้นสนาม
ตัวอย่างการบันทึกค่าแสงที่วัดได้
Pin สีดำ สีขาว (สีดำ+สีขาว)/2
A2 200 900 550
A3 200 950 575
บอร์ด TKL NANO
เซนเซอร์ analog
สายไฟต่อเซนเซอร์
ต่อสายเซนเซอร์เข้าที่ Pin CH0 CH1 CH2 และ CH3 โดยให้
สายสีขาวต่อกับขา S
สายสีแดง ขา + (V)
สายสีดำขา - (G)
#include <SPI.h>
#include <Wire.h>
#include <Servo.h>
#include <Adafruit_MCP3008.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 OLED(-1);
Adafruit_MCP3008 adc;
Adafruit_MCP3008 adc2;
#define PWML 5 // motor L
#define IN1L 4 //
#define IN2L 7 //
#define PWMR 6 // motor R
#define IN1R 15 //
#define IN2R 14 //
///////////////////////////////////////////////
const int button = 8;
////////ตัวแปรเก็บค่าแสงจากเซนเซอร์
int S1 = 0;
int S2 = 0;
int S3 = 0;
int S4 = 0;
void setup()
{ OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C); // กำหนดแอดเดรสของพอร์ตจอเป็น 0x3C (for the 128x64)
pinMode(PWML,OUTPUT);
pinMode(IN1L,OUTPUT);
pinMode(IN2L,OUTPUT);
pinMode(PWMR,OUTPUT);
pinMode(IN1R,OUTPUT);
pinMode(IN2R,OUTPUT);
pinMode(button, INPUT);
}
void sensor()
{
adc.begin(13, 11, 12, 10);//เริ่มจากใช้ adc จาก library
while (true) {
S1 = adc.readADC(0); // อ่านค่า Analog จาก MCP3008 ขาที่ 0
S2 = adc.readADC(1); // อ่านค่า Analog จาก MCP3008 ขาที่ 1
S3 = adc.readADC(2); // อ่านค่า Analog จาก MCP3008 ขาที่ 2
S4 = adc.readADC(3); // อ่านค่า Analog จาก MCP3008 ขาที่ 3
OLED.clearDisplay(); //ล้างหน้าจอ
OLED.setTextColor(WHITE,BLACK); //สีอักษรเป็นสีขาว ,พื้นหลังดำ จอที่ใช้ไม่สามารถเปลี่ยนสีได้
OLED.setCursor(0, 0); // เซตตำแหน่ง 0,0
OLED.setTextSize(1); // เซตขนาดอักษรมีขนาดเป็น 2
OLED.print(" S1 : "); // แสดงข้อความ S1 :
OLED.println(S1); // แสดงค่า S1
OLED.print(" S2 : "); // แสดงข้อความ S2 :
OLED.println(S2); // แสดงค่า S2
OLED.print(" S3 : "); // แสดงข้อความ S3 :
OLED.println(S3); // แสดงค่า S3
OLED.print(" S4 : "); // แสดงข้อความ S4 :
OLED.println(S4); // แสดงค่า S4
OLED.display(); // สั่งให้ จอแสดงผล
delay(100);
}
}
void loop()
{
int sw = digitalRead(button); // ให้ sw อ่านค่า digital จากพอร์ต 2(button)
int nob = analogRead(7); // ให้ nob เทียบเท่าค่า A7
int menu = map(nob, 0, 1023, 0, 1); // เทียบอัตราส่วนของพอร์ต A7 จาก 0-1023 เพื่อทำเป็นเมนู 0-12
OLED.clearDisplay(); // ล้างค่าหน้าจอ
OLED.setTextColor(WHITE, BLACK); //สีอักษรเป็นสีขาว ,พื้นหลังดำ
OLED.setCursor(0, 0); // เซตตำแหน่ง 0,0
OLED.setTextSize(2); // เซตขนาดอักษรมีขนาดเป็น 2
OLED.println("CheckLight"); // แสดงค่า Menu ที่ได้จากการ map nob ให้เหลือ 0-12
OLED.setTextSize(1); // เซตขนาดอักษรมีขนาดเป็น 2
OLED.println(" ");
OLED.println(" www.TKLRobot.com");
OLED.println(" ");
OLED.print(" "); // วรรค
OLED.println(" PRESS OK");
OLED.display();
if ((sw == 1) and (menu == 0))
{
sensor();
}
delay(100);
}