• ตอบกระทู้
  • ตั้งกระทู้ใหม่
QUOTE 

keypad กับ barcode reader ช่วยทีครับ Arduino Uno

(Guest)
Killmedj (Guest)
IP: 171.4.246.x
2 ปีที่ผ่านมา

สวัสดีครับ 

ผมเป็นนักศึกษา ตอนนี้กำลังทำโปรเขคเกี่ยวกับ Arduino อยู่ครับ 

คือผมปับัญหากับตัว keypad และ barcode scanner ครับ 

ผมลองศึกษาด้วยตัวเอง เมื่อไม่นานมานี้ผ่านทางอากู๋ และก็บทความในเว็ปนี้แหละครับ code ส่วนมากก็มากจากตัวอย่างใน library แล้วก็ศึกษาเอาเองตามความเข้าใจครับ  

เข้าเรื่องเลย คือผมเขียนให้บอร์ดอ่านค่าโดยใช้ barcode scanner ได้แล้ว แล้วทีนี้ผมจะให้ตัวบอร์ดอ่านค่าจาก keypad ด้วยแต่ปัญหาคือ อ่านจากจากบาร์โคดแล้วผมกดคีย์แพดไม่ได้ครับ จากความเข้าใจของผมคือตัวอ่านสแกนเนอร์จะอ่านที่ละตัวเป็น ค่า char ที่ละตัวโดยวนใน void loop  แล้วก็โชว์ใน serial หรือ ตัว lcd แต่ปัญหาที่เจอคือผมจะใส่ให้มันอ่านจาก keypad ด้วยแต่ทำไม่ได้อะครับ มันขึ้นตัว A ออกจากไหมผมไม่ทราบ นี่ code ครับ 

 

 

   

#include <Keypad.h>

#include <hid.h>                           

#include <hiduniversal.h>                  

#include <usbhub.h>

#include <LiquidCrystal_I2C.h>

#include <avr/pgmspace.h>

#include <Usb.h>

#include <usbhub.h>

#include <avr/pgmspace.h>

#include <hidboot.h>

#include <Wire.h>

 

#define DISPLAY_WIDTH 16

 

 

LiquidCrystal_I2C lcd(0x27, 16, 2);

 

const byte ROWS = 4; // Four rows

const byte COLS = 4; //  columns

// Define the Keymap

char keys[ROWS][COLS] = {

  {'1','2','3','A'},

  {'4','5','6','B'},

  {'7','8','9','C'},

  {'*','0','#','D'}

};

 

byte rowPins[ROWS] = { 9,8,7,6 };

byte colPins[COLS] = { 5,4,3,2, };

 

// Create the Keypad

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

 

 

 

USB     Usb;

USBHub     Hub(&Usb);                                          

HIDUniversal      Hid(&Usb);                                 

HIDBoot<HID_PROTOCOL_KEYBOARD>    Keyboard(&Usb);

 

class KbdRptParser : public KeyboardReportParser

{

        void PrintKey(uint8_t mod, uint8_t key);            

protected:

virtual void OnKeyDown(uint8_t mod, uint8_t key);

virtual void OnKeyPressed(uint8_t key);

};

 

void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)

{

    uint8_t c = OemToAscii(mod, key);

 

    if (c)

        OnKeyPressed(c);

}

 

 

void KbdRptParser::OnKeyPressed(uint8_t key)

{

static uint32_t next_time = 0;      

static uint8_t current_cursor = 0; 

 

    if( millis() > next_time ) {

      lcd.clear();

      current_cursor = 0;

      delay( 5 );  //LCD-specific 

      lcd.setCursor( 0,0 );

    }

 

    next_time = millis() + 200;  

 

   // if( current_cursor++ == ( DISPLAY_WIDTH + 1 )) {  //switch to second line if cursor outside the screen เอาบรรทัดสองไว้แสดงค่า keypad

      lcd.setCursor( 0,1 );

    }

 

    Serial.print( (char)key );      

    lcd.print( (char)key );          

};

 

KbdRptParser Prs;

 

void setup()

{

    Serial.begin( 115200 );

    

    

    lcd.begin();

    lcd.setCursor(0, 0);

    

 

    if (Usb.Init() == -1) {

        Serial.println("OSC did not start.");

    }

 

    delay( 200 );

 

    Hid.SetReportParser(0, (HIDReportParser*)&Prs);       

    

    

    lcd.print("Ready");

    delay( 200 );

}

 

void loop()

{

  

  Usb.Task();

  char a = Serial.read();

    if (a == 'k'){

    Serial.print('r');

    

    }

    if (a == 'a'){

      

    lcd.setCursor(0, 1);

    lcd.print("ack");

    } 

    char key = keypad.getKey();

  

  if (key){

    lcd.setCursor(0,1);

    lcd.print(key);

    Serial.print(key);

  }

    

 

}

รบกวนท่านผู้รู้ช่วยชี้แนะผมทีครับว่าผมมองข้ามอะไรตัวไหนไป

ผมเอาค่าที่อ่านไปแสดงใน จอ LiquidCrystal I2C ครับ

ตอนนี้พยายามคิด ผมคิดว่ามันอาจจะมาจากตัว code barcode เพราะผมทำตามจาก youtube อีกที 

ถ้าใครเข้าใจ รบกวนช่วยผมทีนะครับ 

1
แสดงความคิดเห็นที่ 0-0 จากทั้งหมด 0 ความคิดเห็น
ชื่อ
อีเมล
ข้อความ
  • ตอบกระทู้

CATEGORIES

CONTACT US

มือถือ0887823467 แฟกซ์02-0153201
facebook

SALE

รหัสสินค้า SA00003
250.00 บาท
60.00 บาท
  • สั่งซื้อ
รหัสสินค้า SG00044
220.00 บาท
60.00 บาท
  • สั่งซื้อ
รหัสสินค้า AG00125
2,300.00 บาท
850.00 บาท
  • สั่งซื้อ
รหัสสินค้า SG00010
200.00 บาท
75.00 บาท
  • สั่งซื้อ

NEW PRODUCTS

รหัสสินค้า AG00228
75.00 บาท
  • สั่งซื้อ
รหัสสินค้า RU00015
150.00 บาท
  • สั่งซื้อ
รหัสสินค้า AS00164
400.00 บาท
  • สั่งซื้อ
รหัสสินค้า AS00116
850.00 บาท
  • สั่งซื้อ
รหัสสินค้า AS00170
975.00 บาท
  • สั่งซื้อ
รหัสสินค้า BA00035
725.00 บาท
  • สั่งซื้อ
รหัสสินค้า MA00005
1,075.00 บาท
  • สั่งซื้อ
รหัสสินค้า MA00004
785.00 บาท
  • สั่งซื้อ
รหัสสินค้า AS00175
1,800.00 บาท
1,580.00 บาท
  • สั่งซื้อ
รหัสสินค้า AS00172
320.00 บาท
  • สั่งซื้อ

เข้าร่วมร้านค้า

ร้านArduitronics
ร้านArduitronics
/www.arduitronics.com/
สมัครสมาชิกร้านนี้ เพื่อรับสิทธิพิเศษ

STATISTICS

หน้าที่เข้าชม4,790,428 ครั้ง
ผู้ชมทั้งหมด1,470,806 ครั้ง
เปิดร้าน21 พ.ค. 2556
ร้านค้าอัพเดท23 เม.ย. 2560

MEMBER

เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก

ยังไม่มีบัญชีเทพ สร้างบัญชีใหม่ ไม่เกิน 5 นาที
สมัครสมาชิก (ฟรี)

TRACKCODE

  • ค้นหา
*ใส่ order id หรือ email ที่ใช้ในการสั่งซื้อ
ดูรหัสพัสดุทั้งหมด »
Go to Top