การสั่งงานไห้ LED ติดด้วย Keypad


(ขวัญ ขวัญ ) #1

จะปรึกษาเรื่อง การเขียนโปรแกรม Arduino เกี่ยวกับการกดKeypadแล้วหลอกLEDติด


(Permpol Thanapunnamas) #2

จะต่อออก blynk ด้วยหรอครับ


(ขวัญ ขวัญ ) #3

หนูทำโปรเจคค่ะ แล้วจะไห้LEDแสดงผลด้วยการกดคีย์แพด สมมุติว่ากดตัวเลขใดตัวเลขหนึ่งLEDดวงนั้นก็จะติดประมานนี้ค่ะ


(ขวัญ ขวัญ ) #4

ก็ประมาณว่า มี R อยู่ 30 ค่า แต่ละค่ามี LED ติดอยู่ ซึ่งถ้าจะหาค่านั้น ก็กดค่าของ R ลงไปที่ Keypad แล้วก็ไปติดที่ค่านั้น


(Permpol Thanapunnamas) #5

หมายถึง ใส่ค่า R ครั้งที่ 1 100 โอมต์ led1 ติด ใส่ค่า R ครั้งที่ 2 300 โอมต์ led2 ติด ใช่ไหมครับ


(Permpol Thanapunnamas) #6

เบื้องต้นหาข้อมูลเกี่ยวกับการส่งค่า แอสกี้โค้ต จากคีย์บอร์ดก่อนครับ ดูว่าต่ออย่างไรใช้โค้ตอะไร รับค่าให้ได้ก่อน

แล้วค่อยไปสเตปต่อไปมีอุปกรณ์ในมือแล้วหรือยังตอนนี้


(ขวัญ ขวัญ ) #7

คือกดkeypadครั้งที่1กดค่า100 LEDที่ติดไว้ที่ค่า100จะติด ประมาณนี้ค่ะ


(ขวัญ ขวัญ ) #8

มีค่ะ
คือมีอุปกรณ์ครบทุกอย่างแล้วค่ะ


(Permpol Thanapunnamas) #9

ลองต่อแล้วเทสดูเลย ติดตรงไหนก็เข้ามาถามต่อได้ครับ


(ขวัญ ขวัญ ) #10

คือตอนนี้มีโคตสำหรับkeypadแล้ว
เเต่จะเอามาสั่งงานไห้LEDติด
ทำไม่ได้ค่ะ


(Permpol Thanapunnamas) #11

เอาโค้ตมาดูหน่อยครับ


(Permpol Thanapunnamas) #12

เวลาเอาโค้ตมาวางทำให้เป็นฟอร์มด้วยนะครับ จะได้ดูง่ายขึ้น


(ขวัญ ขวัญ ) #14
#include <Keypad.h>

int Buzzer = 13;
int LED = 12;

const byte ROWS = 4; 
const byte COLS = 3; 
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {8, 7, 6 , 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
  Serial.print("    Keypad  Test    ");
  Serial.print("Key       =         ");
  
  pinMode(Buzzer,OUTPUT);
  pinMode (LED,OUTPUT);
  digitalWrite(Buzzer,LOW);
 
}

void loop()
{char key;
  key = keypad.getKey();
  if (key != NO_KEY)
  {    
    Serial.print(key);
    Beep();
  }
key = keypad.getKey();
delay(50);
  if (key >= "1234")
  {
  digitalWrite(LED,1);
  delay(500);
  digitalWrite(LED,0);
  delay(500);
  }
}

void Beep()
{
  digitalWrite(Buzzer,HIGH);delay(50);
  digitalWrite(Buzzer,LOW);
}

(ขวัญ ขวัญ ) #15

อันนี้เป็นที่เขียนกับเพื่อน
แล้วเขียนค้างใว้
ไปต่อไม่ได้


(Permpol Thanapunnamas) #16

ติดปัญหา กดค่าแล้ว led ไม่ติดใช่ไหม


(ขวัญ ขวัญ ) #17

ใช่ค่ะ ติดอยู่เเค่ตรงนี้


(Permpol Thanapunnamas) #18

ใช้ตัวดำเนินการผิดนะครับ

image

  if (key >= "1234")
  {
  digitalWrite(LED,1);
  delay(500);
  digitalWrite(LED,0);
  delay(500);
  }

ชนิดของตัวแปนเป็น char แต่เราใช้ >= นั้นมันเอาไว้ใช้กับตัวเลขเท่านั้น จริงๆ ควรใช้ตัวดำเนินการคือ == ใช้แบบนี้มันจะไม่เข้า loop if

ต้องใช้แบบนี้

  if (key == "1234")
  {
  digitalWrite(LED,1);
  delay(500);
  digitalWrite(LED,0);
  delay(500);
  }

ลองเทสดูครับ


(ขวัญ ขวัญ ) #19

โค้ตทั้งหมดถูกใช่ไหมค่ะ


(Permpol Thanapunnamas) #20

อ่านที่ผมคอมเม้นยังครับ


(Permpol Thanapunnamas) #21

อีกเรื่องคือ ตรงคำสั่ง digitalWrite(LED,1); ควรใช้ HIGH หรือ LOW แทน 1 กับ 0 ด้วยครับ

if (key == "1234")
  {
  digitalWrite(LED,HIGH);
  delay(500);
  digitalWrite(LED,LOW);
  delay(500);
  }