Joystick Led với Arduino
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);
}