ArduinoDigital Culture

โกง Doodle ขั้นเทพ ด้วย Arduino Leonardo Clone

By August 21, 2012 3 Comments

ควันหลงจากงานโอลิมปิค ที่ google ช่างจะขยันเหลือเกิน ปรับเปลี่ยน doodle ให้เป็นเกมส์ให้ได้ลองเล่นด้วย ซึ่งมันก็มีตั้งแต่ วิ่งกระโดดข้ามสิ่งกีดขวาง, บาสเก็ตบอล, เรือพาย เรื่องมีอยู่ว่า ผมนั่งเล่นอยู่หลายนาที

มันเล่นได้เพลิน ยิ่งเล่น keyboard ยิ่งพัง รู้สึกว่าเกมส์นี้ มันออกแบบเพื่อทำลายล้าง keyboard แน่ ดูจากรูปก็รู้เกมส์นี้ ไม่ต้องใช้สมอง ใช้ความเร็วของนิ้วครับ มันเริ่มไม่สร้างสรรค์ ไม่ใช่แนวสักล่ะ

ผมจึงคิดได้ว่า กำลังจะมีบอร์ดใหม่ที่ต่อตรงกับ USB ได้ จึงเป็นที่มางานแรกของบอร์ด Leonardo ซึ่งเป็นบอร์ดทดลอง arduino clone ตัวใหม่ ที่ตอนนี้ทางเรากำลังทดลอง ใช้งานครับ หาปัญหา กับ วิธีแก้ไข

โฉมหน้า บอร์ดกำลังพัฒนา

สำหรับบอร์ด Leonardo ตัวนี้มีอะไรใหม่บ้าง คือ

  • ราคาถูกลง ต้นทุนจะถูกลง ลดไอซี usb2serial ออกไป
  • ตัวบอร์ด ใช้ Libary ชุดเดิม และ เบิร์น USB ได้เหมือนเดิม
  • บอร์ดนี้ มีความสามารถทาง USB เพิ่มมาด้วย เนื่องด้วยตัวไอซีใหม่ ที่ใส่ไปมันมี Hardware USB ในตัวครับ มันสือสารกับ USB ได้ง่าย
  • เชื่อมต่อ USB จึงทำให้บอร์ดนี้จำลองตัวเองเป็น Serial ,Keyboard ,Mouse  แบบ USB ได้
  • ซึ่ง ถ้าความสามารถ USB ฮิตๆ ในอนาคตอาจจะ Support Joystick และ USB MIDI  ได้อีกด้วย

แต่ข้อเสียมันก็มีครับ จากที่ลองใช้มา การไม่มี USB2Serial บนบอร์ด ทำให้เวลากด Reset , usb2serial ที่เป็น software มันจะหายไป ฉะนั้นโปรแกรมสื่อสารบนเครื่องคอมพิวเตอร์ที่ติดต่อกับ port นั้น จะมีปัญหาทันที่ ที่พอ port หายไป ซึ่งผมไม่คิดว่า มันแก้ไขไม่ได้ครับ คนที่ใช้ Leonardo ก็ต้องทราบข้อจำกัดนี้ นิดหนึ่ง

กำลังลองทำให้บอร์ดนี้ เป็น Keyboard

จากความสามารถใหม่นี้เอง จึงได้กดไอเดีย ทำเครื่องโกงเกมส์พายเรือสักเลย โดยจำลองการกด Arrow Left – Right เร็วๆ รั่วๆ แทน ซึ่งผลคะแนนนะครับ ถ้าโชดดี ไม่โดนจระเข้ขวาง จะพุ่งเร็วเป็นจรวดเลย

แถมด้วยตัวอย่างโค๊ด เดี่ยวจะหาว่ายาก แค่นี้จริงๆครับ

void setup() {
//pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
Keyboard.begin();
}

void loop() {

// while (digitalRead(2) == HIGH) {
// do nothing until pin 2 goes low
// delay(500);
// }
// delay(1000);

digitalWrite(13,HIGH);
Keyboard.press(KEY_RIGHT_ARROW);
delay(5);
Keyboard.release(KEY_RIGHT_ARROW);
delay(20);

digitalWrite(13,LOW);
Keyboard.press(KEY_LEFT_ARROW);
delay(5);
Keyboard.release(KEY_LEFT_ARROW);
delay(20);

// Keyboard.releaseAll();

}

3 Comments

  • park paya says:

    Arduino ธรรมดาที่ไม่ใช่ Leonado ทำแบบนี้ไม่ได้ใช่ไหมครับ

    • chang says:

      ถ้าเป็น UNO พอทำได้นะครับ
      เปลี่ยน mega8u2 จาก serial เป็น HID ก่อนนะครับ

      แต่ใช้ leonardo สบายกว่าเยอะ

  • จำปี says:

    ไม่ได้ครับ leonardo เป็นรุ่นเดียวที่ใช้ชิพใหม่ จำลอง keyboard mouse ได้

Leave a Reply