Joystick Led với Arduino

Bởi nguyentruongphi (31/08/2025) 0 Bình luận

Trong bài học này, bạn sẽ học cách sử dụng Arduino kết hợp với mô-đun Joystick, LED để tạo ra một trò chơi ánh sáng.

Kết Nối Chung:

LED:

  • Kết nối cathode của LED với một điện trở 1kΩ, sau đó kết nối với bus nguồn âm trên breadboard.
  • Kết nối anode của LED từ chân 2 đến 5 trên Arduino.

Mô-đun Joystick:

  • VRY: Kết nối với chân A1 trên Arduino.
  • VRX: Kết nối với chân A0 trên Arduino.
  • GND: Kết nối với bus nguồn âm trên breadboard.
  • VCC: Kết nối với bus nguồn đỏ trên breadboard.

Code:

// LED pin definitions
const int redLED = 4;    // Represents negative X direction (X low)
const int yellowLED = 2; // Represents negative Y direction (Y low)
const int greenLED = 3;  // Represents positive X direction (X high) →
const int blueLED = 5;   // Represents positive Y direction (Y high)

// Joystick pin definitions
const int xPin = A0;
const int yPin = A1;

// Define the range for analog values and midpoint
const int MID_VAL = 512;
const int DEAD_ZONE = 100;  // Dead zone range (adjust as needed)

void setup() {
  pinMode(redLED, OUTPUT);
  pinMode(yellowLED, OUTPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(blueLED, OUTPUT);

  // Initialize all LEDs to OFF
  digitalWrite(redLED, LOW);
  digitalWrite(yellowLED, LOW);
  digitalWrite(greenLED, LOW);
  digitalWrite(blueLED, LOW);

  Serial.begin(9600);
}

void loop() {
  int xVal = analogRead(xPin);
  int yVal = analogRead(yPin);

  Serial.print("X: "); Serial.print(xVal);
  Serial.print("  Y: "); Serial.println(yVal);

  // Turn off all LEDs
  digitalWrite(redLED, LOW);
  digitalWrite(yellowLED, LOW);
  digitalWrite(greenLED, LOW);
  digitalWrite(blueLED, LOW);

  // Calculate the offset from the midpoint
  int dx = xVal - MID_VAL;
  int dy = yVal - MID_VAL;

  // If the offset is within the dead zone, do not light up any LED
  if (abs(dx) < DEAD_ZONE && abs(dy) < DEAD_ZONE) {
    // No LEDs are turned on
  } else {
    // Consider both X and Y; select the direction with the larger offset
    if (abs(dx) > abs(dy)) {
      // X-axis has a larger offset, determine the direction
      if (dx > 0) {
        // Positive X direction => Turn on green LED (right)
        digitalWrite(greenLED, HIGH);
      } else {
        // Negative X direction => Turn on red LED (left)
        digitalWrite(redLED, HIGH);
      }
    } else {
      // Y-axis has a larger offset, determine the direction
      if (dy > 0) {
        // Positive Y direction => Turn on blue LED (up)
        digitalWrite(blueLED, HIGH);
      } else {
        // Negative Y direction => Turn on yellow LED (down)
        digitalWrite(yellowLED, HIGH);
      }
    }
  }

  delay(100);
}

 

Đóng góp ý kiến

Hotline 0938379351