Lab 5 การเขียนคำสั่ง Menu

ตัวอย่างที่ 1 การประยุกต์ใช้กับฟังก์ชันคำสั่งเสียง

Nano Arduino IDE Code

///////// ผนวกไลบรารี่ ////////////

#include <Wire.h>

#include <SPI.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 OLED(-1);

///////////ตั้งค่าปุ่มกด///////////////////

int button = 2; /// กำหนดปุ่มกดสวิตซ์ขา 2

/////////////////////////////////////////////////////////////////////

void setup() {

OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); // กำหนดแอดเดรสของพอร์ตจอเป็น 0x3C (for the 128x64)

pinMode(2, INPUT); // ตั้งค่าขา 2 เป็น INPUT

}

void loop(){

int sw = digitalRead(button); // ให้ sw อ่านค่า digital จากพอร์ต 2(button)

int nob = analogRead(7); // ให้ nob เทียบเท่าค่า A7

int menu = map(nob,0,1023,0,12); // เทียบอัตราส่วนของพอร์ต A7 จาก 0-1023 เพื่อทำเป็นเมนู 0-12

OLED.clearDisplay(); // ล้างค่าหน้าจอ

OLED.setTextColor(WHITE,BLACK); //สีอักษรเป็นสีขาว ,พื้นหลังดำ

OLED.setCursor(0, 0); // เซตตำแหน่ง 0,0

OLED.setTextSize(2); // เซตขนาดอักษรมีขนาดเป็น 2

OLED.println("ROBOT MENU"); // พิมพ์คำว่า ROBOT MENU

OLED.setTextSize(3); // เซตขนาดอักษรมีขนาดเป็น 2

OLED.print(" "); // วรรค

OLED.println(menu); // แสดงค่า Menu ที่ได้จากการ map nob ให้เหลือ 0-12

OLED.setTextSize(1); // เซตขนาดอักษรมีขนาดเป็น 2

OLED.println(" KLS ROBOT CENTER"); // พิมพ์คำว่า KLS ROBOT CENTER

OLED.print(" "); // วรรค

OLED.print(nob); // แสดงค่าที่อ่านได้จาก nob หรือ Analog7

OLED.println(" www.kls.ac.th"); // พิมพ์คำว่า www.kls.ac.th

OLED.display();

if ((sw == 0)and(menu==0)) { OLED.clearDisplay();OLED.display();}

if ((sw == 0)and(menu==1)) {t();} //เมนู 1 เสียงดัง 1 ครั้ง

if ((sw == 0)and(menu==2)) {t();t();} //เมนู 2 เสียงดัง 2 ครั้ง

if ((sw == 0)and(menu==3)) {t();t();t();} //เมนู 3 เสียงดัง 3 ครั้ง

if ((sw == 0)and(menu==4)) {t();t();t();t();} //เมนู 4 เสียงดัง 4 ครั้ง

if ((sw == 0)and(menu==5)) {t();t();t();t();t();} //เมนู 5 เสียงดัง 5 ครั้ง

if ((sw == 0)and(menu==6)) {t();t();t();t();t();t();} //เมนู 6 เสียงดัง 6 ครั้ง

if ((sw == 0)and(menu==7)) {t();t();t();t();t();t();t();} //เมนู 7 เสียงดัง 7 ครั้ง

if ((sw == 0)and(menu==8)) {t();t();t();t();t();t();t();t();} //เมนู 8 เสียงดัง 8 ครั้ง

if ((sw == 0)and(menu==9)) {t();t();t();t();t();t();t();t();t();} //เมนู 9 เสียงดัง 9 ครั้ง

if ((sw == 0)and(menu==10)) {t();t();t();t();t();t();t();t();t();t();} //เมนู 10 เสียงดัง 10 ครั้ง

if ((sw == 0)and(menu==11)) {t();t();t();t();t();t();t();t();t();t();t();} //เมนู 11 เสียงดัง 11 ครั้ง

if ((sw == 0)and(menu==12)) {t();t();t();t();t();t();t();t();t();t();t();t();} //เมนู 12 เสียงดัง 12 ครั้ง

delay(100);

}

void t() // ฟังก์ชันเสียงดังที่พอร์ต 3

{tone(3,100,100);delay(300); }

ตัวอย่างที่ 2 การประยุกต์ใช้กับการสั่งงานมอเตอร์

Arduino IDE Code

///////// ผนวกไลบรารี่ ////////////

#include <Wire.h>

#include <SPI.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 OLED(-1);

///////////ตั้งค่าปุ่มกด///////////////////

int button = 2; /// กำหนดปุ่มกดสวิตซ์ขา 2

///////////ตั้งค่าพอร์ตมอเตอร์////////////////////

#define DR1 7 /// กำหนดสัญญาณดิจิตอลขวาที่ 1 พอร์ต 7

#define DR2 8 /// กำหนดสัญญาณดิจิตอลขวาที่ 2 พอร์ต 8

#define PWMR 6 /// กำหนดสัญญาณ PWM ขวาพอร์ต 6

/////////////////////////////////

#define DL1 9 // กำหนดสัญญาณดิจิตอลซ้ายที่ 1 พอร์ต 9

#define DL2 4 // กำหนดสัญญาณดิจิตอลซ้ายที่ 2 พอร์ต 4

#define PWML 5 /// กำหนดสัญญาณ PWM ซ้ายพอร์ต 5

/////////////////////////////////////////////////////////////////////

void setup() {

OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); // กำหนดแอดเดรสของพอร์ตจอเป็น 0x3C (for the 128x64)

pinMode(2, INPUT); // ตั้งค่าขา 2 เป็น INPUT

////////กำหนดสัญญาณทุกขาเป็น OUTPUT ///////////////

pinMode(DL1, OUTPUT);

pinMode(DL2, OUTPUT);

pinMode(PWML, OUTPUT);

pinMode(DR1, OUTPUT);

pinMode(DR2, OUTPUT);

pinMode(PWMR, OUTPUT);

////////////////////////////

}

///////////////////////// ส่วนควบคุมมอเตอร์ ////////////////////////////////////////////

void run(int spl, int spr) // ประกาศฟังก์ชัน run(กำลังมอเตอร์ซ้าาย,กำลังมอเตอร์ขวา);

{

if (spl > 0)

{

digitalWrite(DL1, LOW);

digitalWrite(DL2, HIGH);

analogWrite(PWML, spl);

}

else if (spl < 0)

{

digitalWrite(DL1, HIGH);

digitalWrite(DL2, LOW);

analogWrite(PWML, -spl);

}

else

{

digitalWrite(DL1, LOW);

digitalWrite(DL2, LOW);

analogWrite(PWML, -255);

}

//////////////////////////////////////

if (spr > 0)

{

digitalWrite(DR1, LOW);

digitalWrite(DR2, HIGH);

analogWrite(PWMR, spr);

}

else if (spr < 0)

{

digitalWrite(DR1, HIGH);

digitalWrite(DR2, LOW);

analogWrite(PWMR, -spr);

}

else

{

digitalWrite(DR1, LOW);

digitalWrite(DR2, LOW);

analogWrite(PWMR, -255);

}

}

////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////

void loop(){

int sw = digitalRead(button); // ให้ sw อ่านค่า digital จากพอร์ต 2(button)

int nob = analogRead(7); // ให้ nob เทียบเท่าค่า A7

int menu = map(nob,0,1023,0,12); // เทียบอัตราส่วนของพอร์ต A7 จาก 0-1023 เพื่อทำเป็นเมนู 0-12

OLED.clearDisplay(); // ล้างค่าหน้าจอ

OLED.setTextColor(WHITE,BLACK); //สีอักษรเป็นสีขาว ,พื้นหลังดำ

OLED.setCursor(0, 0); // เซตตำแหน่ง 0,0

OLED.setTextSize(2); // เซตขนาดอักษรมีขนาดเป็น 2

OLED.println("ROBOT MENU"); // พิมพ์คำว่า ROBOT MENU

OLED.setTextSize(3); // เซตขนาดอักษรมีขนาดเป็น 2

OLED.print(" "); // วรรค

OLED.println(menu); // แสดงค่า Menu ที่ได้จากการ map nob ให้เหลือ 0-12

OLED.setTextSize(1); // เซตขนาดอักษรมีขนาดเป็น 2

OLED.println(" KLS ROBOT CENTER"); // พิมพ์คำว่า KLS ROBOT CENTER

OLED.print(" "); // วรรค

OLED.print(nob); // แสดงค่าที่อ่านได้จาก nob หรือ Analog7

OLED.println(" www.kls.ac.th"); // พิมพ์คำว่า www.kls.ac.th

OLED.display();

if ((sw == 0)and(menu==0)) { OLED.clearDisplay();OLED.display();}

if ((sw == 0)and(menu==1)) {run(100,100);delay(1000);run(0,0);} //เมนู 1

if ((sw == 0)and(menu==2)) {run(-100,-100);delay(1000);run(0,0);} //เมนู 2

if ((sw == 0)and(menu==3)) {} //เมนู 3

if ((sw == 0)and(menu==4)) {} //เมนู 4

if ((sw == 0)and(menu==5)) {} //เมนู 5

if ((sw == 0)and(menu==6)) {} //เมนู 6

if ((sw == 0)and(menu==7)) {} //เมนู 7

if ((sw == 0)and(menu==8)) {} //เมนู 8

if ((sw == 0)and(menu==9)) {} //เมนู 9

if ((sw == 0)and(menu==10)){} //เมนู 10

if ((sw == 0)and(menu==11)){} //เมนู 11

if ((sw == 0)and(menu==12)){} //เมนู 12

delay(100);

}