ค้นหาโค้ด

โค้ด Arduino และวิดีโอ: จอยสติ๊กแบบสองแกน

โค้ด Arduino และวิดีโอ: จอยสติ๊กแบบสองแกน

ในบทช่วยสอนนี้ เราจะสำรวจวิธีการใช้จอยสติ๊กแบบสองแกน XY ร่วมกับ Arduino จอยสติ๊กนี้สามารถนำไปใช้เป็นตัวควบคุมเกมหรือใช้ควบคุมแขนกล รวมถึงการใช้งานอื่นๆ ได้ จุดสนใจหลักจะอยู่ที่การตรวจจับตำแหน่งของจอยสติ๊กและสถานะของปุ่มกดสวิตช์ ซึ่งสามารถแสดงผลบนซีเรียลมอนิเตอร์ได้

XY-Dual access joystick

ตลอดบทช่วยสอนนี้ เราจะเขียนโปรแกรมง่ายๆ ที่อ่านตำแหน่ง X และ Y ของจอยสติ๊กและแสดงผลบนซีเรียลมอนิเตอร์ของ Arduino เมื่อกดจอยสติ๊ก สถานะของสวิตช์ก็จะถูกตรวจจับด้วย สำหรับคำอธิบายโค้ดโดยละเอียด โปรดดูวิดีโอตามไทม์สแตมป์ที่ระบุ (ในวิดีโอที่ 00:00)

อธิบายฮาร์ดแวร์

ส่วนประกอบหลักสำหรับโปรเจกต์นี้ประกอบด้วยโมดูลจอยสติ๊กแบบสองแกนและบอร์ด Arduino โมดูลจอยสติ๊กประกอบด้วยตัวต้านทานปรับค่าได้สองตัว หนึ่งตัวสำหรับแกน X และหนึ่งตัวสำหรับแกน Y ซึ่งให้ค่าแอนะล็อกตามตำแหน่งของจอยสติ๊ก ปุ่มกดสวิตช์บนจอยสติ๊กใช้ตรวจจับเมื่อมีการกด

เมื่อคุณเลื่อนจอยสติ๊ก โพเทนชิโอมิเตอร์จะเปลี่ยนความต้านทาน ซึ่งจะถูกแปลงเป็นค่าระหว่าง 0 ถึง 1023 ซึ่งช่วยให้เราสามารถระบุตำแหน่งของจอยสติ๊กได้อย่างแม่นยำ ปุ่มกดสวิตช์เชื่อมต่อกับพินอินพุตดิจิทัลบน Arduino ทำให้เราสามารถอ่านสถานะได้โดยไม่ต้องใช้ตัวต้านทานภายนอก โดยใช้คุณสมบัติตัวต้านทานดึงขึ้นภายใน

รายละเอียดจากดาต้าชีต

ผู้ผลิตทั่วไป
หมายเลขชิ้นส่วนโมดูลจอยสติ๊กแบบสองแกน
แรงดันไฟฟ้าลอจิก/IO5 โวลต์
แรงดันไฟฟ้าจ่าย5 โวลต์
ช่วงแรงดันเอาต์พุต0 - 5 โวลต์
ความละเอียด10 บิต (0-1023) แอนะล็อก
ประเภทสวิตช์ปุ่มกด
แพ็กเกจโมดูลมาตรฐาน

  • ตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟ (5 โวลต์) ไปยังโมดูลจอยสติ๊กถูกต้อง
  • เชื่อมต่อเอาต์พุต X และ Y ของจอยสติ๊กเข้ากับพินแอนะล็อก A0 และ A1 ตามลำดับ
  • ใช้พินดิจิทัล 6 สำหรับสวิตช์ของจอยสติ๊ก
  • ใช้การกำหนดค่าตัวต้านทานดึงขึ้นสำหรับพินสวิตช์
  • ตรวจสอบค่าเอาต์พุตเพื่อให้แน่ใจว่าอยู่ในช่วง 0 ถึง 1023

คำแนะนำการเดินสายไฟ

Arduino wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring

ในการเดินสายไฟจอยสติ๊กแบบสองแกนเข้ากับ Arduino ให้เริ่มต้นโดยเชื่อมต่อพินกราวด์ของจอยสติ๊กเข้ากับรางกราวด์บนเบรดบอร์ดของคุณ จากนั้นเชื่อมต่อพิน 5V ของจอยสติ๊กเข้ากับรางบวกบนเบรดบอร์ด พินตัวแปรสองตัวบนจอยสติ๊กซึ่งระบุเป็น X และ Y ควรเชื่อมต่อกับพินแอนะล็อก A0 และ A1 บน Arduino ตามลำดับ

สำหรับปุ่มกดสวิตช์บนจอยสติ๊ก ให้เชื่อมต่อกับพินดิจิทัล 6 บน Arduino การเชื่อมต่อนี้ใช้คุณสมบัติตัวต้านทานดึงขึ้นภายใน ดังนั้นคุณไม่จำเป็นต้องใช้ตัวต้านทานภายนอก สุดท้าย หากคุณต้องการตรวจสอบสถานะสวิตช์ด้วย LED ให้เชื่อมต่อขายาวของ LED เข้ากับพินดิจิทัล 13 และขาสั้นผ่านตัวต้านทาน 680 โอห์มไปยังกราวด์

ตัวอย่างโค้ดและคำอธิบาย

ในโค้ด Arduino เรากำหนดพินสำหรับสวิตช์และระบุขนาดหน้าจอสำหรับการแมปค่าจอยสติ๊ก ฟังก์ชัน setup เริ่มต้นการสื่อสารซีเรียลและตั้งค่าโหมดพินสวิตช์

void setup() {
  Serial.begin(9600); // เริ่มต้นการสื่อสารซีเรียล
  pinMode(sw, INPUT_PULLUP); // ตั้งค่าพิน sw เป็นอินพุต
  pinMode(13, OUTPUT); // พิน LED
}

ในฟังก์ชัน loop เราอ่านค่าแอนะล็อกสำหรับตำแหน่ง X และ Y และแมปค่าเหล่านั้นเข้ากับขนาดหน้าจอที่กำหนด สถานะของสวิตช์จะถูกอ่านและพิมพ์ไปยังซีเรียลมอนิเตอร์ด้วย

void loop() {
  int x = analogRead(A0); // อ่านค่าแอนะล็อกสำหรับ X
  int y = analogRead(A1); // อ่านค่าแอนะล็อกสำหรับ Y
  int sStat = digitalRead(sw); // อ่านสถานะสวิตช์
  // พิมพ์ค่าไปยังซีเรียลมอนิเตอร์
  Serial.print("X: ");
  Serial.print(xPos);
  Serial.print(" Y: ");
  Serial.println(yPos);
}

สุดท้าย โค้ดจะตรวจสอบว่าสวิตช์ถูกกดหรือไม่ โดยเปิดหรือปิด LED ตามสถานะของสวิตช์ ซึ่งให้การตอบสนองทางภาพเมื่อปุ่มจอยสติ๊กถูกกด

if(sStat == LOW) {
    Serial.println("กดสวิตช์");
    digitalWrite(13, HIGH); // เปิด LED
  } else {
    digitalWrite(13, LOW); // ปิด LED
  }

เพื่อดูว่าค่าจอยสติ๊กเปลี่ยนแปลงแบบเรียลไทม์อย่างไร ให้อัปโหลดโค้ดไปยัง Arduino ของคุณและเปิดซีเรียลมอนิเตอร์ ค่าจะอัปเดตทุกครึ่งวินาที โดยแสดงตำแหน่ง X และ Y ปัจจุบันพร้อมกับสถานะสวิตช์ (ในวิดีโอที่ 01:30)

การสาธิต / สิ่งที่คาดหวัง

เมื่อคุณเลื่อนจอยสติ๊ก ค่า X และ Y ควรเปลี่ยนแปลงตามไปด้วย โดยอยู่ในช่วง 0 ถึง 1023 หากคุณกดปุ่มจอยสติ๊ก LED ที่เชื่อมต่อกับพิน 13 จะสว่างขึ้น ซึ่งบ่งบอกว่าสวิตช์ทำงานอยู่ หากจอยสติ๊กอยู่ตรงกลาง คุณควรเห็นค่ารอบๆ 512 สำหรับทั้งสองแกน ขึ้นอยู่กับการปรับเทียบของจอยสติ๊ก

ไทม์สแตมป์วิดีโอ

  • 00:00 - แนะนำจอยสติ๊กแบบสองแกน
  • 01:30 - คำอธิบายโค้ดและการทำงาน
  • 02:45 - คำแนะนำการเดินสายไฟ
  • 03:15 - ผลลัพธ์ที่คาดหวังและการทดสอบ

ภาพ

Arduino wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring
58-This is the Arduino code for a dual-axis joystick.
ภาษา: C++
/*
 * This is Arduino code to use a dual-axis XY joystick to read the value of the joystick position as X and Y, and
 * also read the switch.
 * Other Arduino library and videos: https://robojax.com
 
 * Watch the video for this code to learn it fully.
  * Watch the video here: https://youtu.be/6N8Iq353GM8
 * This code is offered "as is" without any warranty.
 * If you are sharing this code, you must keep this copyright note.
 */
 /*

 * Written for Robojax video on January 10, 2018
 * by Ahmad Nejrabi, in Ajax, Ontario, Canada
 * Copyright Robojax Inc.
 */
 
/*
 * This is a dual-axis joystick sketch for Arduino.
 * The position of the joystick is read and displayed on the serial monitor.
 */
#define sw 6
#define screenWidth 600
#define screenHeight 300
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  pinMode(sw,INPUT_PULLUP);// setting pin sw as input
  pinMode(13,OUTPUT);
}
 
void loop() {
  // Robojax Dual Axis joystick project
  int x = analogRead(A0);// read analog value
  int y = analogRead(A1);
  int xPos = map(x, 0, 1023,0,screenWidth);
  int yPos = map(y, 0, 1023,0,screenHeight); 
  int sStat = digitalRead(sw);//
  // Robojax project

  Serial.print("X: ");
  Serial.print(xPos);

  Serial.print(" Y: ");
  Serial.println(yPos);// Robojax prints y value
  if(sStat ==LOW){
    Serial.println("Switch pressed");
    digitalWrite(13,HIGH);// Turn LED ON
  }else{
    digitalWrite(13,LOW);// Turn LED OFF
  }
  delay(500);
}

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ยังไม่มีทรัพยากรเลย

ไฟล์📁

ไม่มีไฟล์ที่พร้อมใช้งาน