操纵杆的工作原理
一个简单的Arduino操纵杆使用电位器(如表盘或滑块中的那种)沿两个垂直轴读取值。通过组合这两个值,您可以获得与操纵杆位置相对应的x,y坐标。有了这些数据,您就可以根据操纵杆指向的位置采取行动。
与大多数电位器一样,两个轴的测量范围为0到1023。由于操纵杆从中心开始并左/右和上/下移动,因此两个轴的默认起始位置都在511左右。有几种类型的Arduino操纵杆控制器,甚至还有一两个操纵杆护罩。出于我们的目的,我们将研究一个基本的模拟Arduino操纵杆模块。
这个Arduino操纵杆带有五个引脚:一个用于电源,一个用于接地,两个用于X和Y轴的引脚,以及一个用于按钮按下的引脚。我们今天只使用前四个,但您可以在将来尝试通过按钮扩展您的项目。您还可以找到带有按钮的操纵杆护罩,因此您拥有控制整个游戏所需的所有输入。
不过,现在,我们将通过使用它来控制四个LED来演示操纵杆的工作原理。我们的目标是,当操纵杆指向上、下、左和右时,每个方向都会亮起不同的LED。这将很容易检测到,因为四个方向中的每一个都位于两个电位计轴之一的远端。
你需要什么
对于这个项目,我们将在Arduino操纵杆模块之上使用四个不同颜色的LED作为指示灯来显示我们的项目正在运行。物品清单:操纵杆;四个LED(如果有的话,最好是不同颜色的);四个220欧姆电阻;电线;面包板;USB电缆;ArduinoIDE等。
将所有材料放在一起后,将下一部分的代码上传到您的 Uno,然后转到接线部分。
代码
首先,将以下草图上传到您的 Arduino Uno。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#define joyX A0 #define joyY A1 int blueLED = 7; int redLED = 6; int yellowLED = 5; int whiteLED = 4; void setup() { Serial.begin(9600); pinMode(blueLED,OUTPUT); pinMode(redLED,OUTPUT); pinMode(yellowLED,OUTPUT); pinMode(whiteLED,OUTPUT); } void loop() { int xValue; int yValue; xValue = analogRead(joyX); yValue = analogRead(joyY); Serial.print("X: "); Serial.print(xValue); Serial.print("\t Y: "); Serial.println(yValue); if (yValue > 1020){ digitalWrite(blueLED, HIGH); } else { digitalWrite(blueLED, LOW); } if (yValue < 2){ digitalWrite(redLED, HIGH); } else { digitalWrite(redLED, LOW); } if (xValue > 1020){ digitalWrite(yellowLED, HIGH); } else { digitalWrite(yellowLED, LOW); } if (xValue < 2){ digitalWrite(whiteLED, HIGH); } else { digitalWrite(whiteLED, LOW); } } |
接下来,让我们通过草图突出显示您需要了解的重要部分。
1 2 3 4 5 6 7 |
#define joyX A0 #define joyY A1 int blueLED = 7; int redLED = 6; int yellowLED = 5; int whiteLED = 4; |
在本节中,我们将定义六个引脚变量。前两个引脚 A0 和 A1 将存储来自操纵杆模块的 X 和 Y 变量。接下来的四行定义了四个 LED 引脚,对于这个草图,每个引脚都是不同的颜色。
1 2 3 4 5 6 7 |
void setup() { Serial.begin(9600); pinMode(blueLED,OUTPUT); pinMode(redLED,OUTPUT); pinMode(yellowLED,OUTPUT); pinMode(whiteLED,OUTPUT); } |
在本节中,我们将启动串行监视器,它可以让我们看到当您移动操纵杆模块时操纵杆输出的值。四个pinMode()函数还将 LED 引脚分配为输出。
1 2 3 4 5 6 7 8 9 |
int xValue; int yValue; xValue = analogRead(joyX); yValue = analogRead(joyY); Serial.print("X: "); Serial.print(xValue); Serial.print("\t Y: "); Serial.println(yValue); |
在loop()部分中,我们将首先创建变量 xValue 和 yValue 来存储来自游戏杆模块的值。当您四处移动操纵杆时,这些值应该实时变化。
我们还将把 X 和 Y 值打印到串行监视器上。如果您想查看哪些值对应于不同的位置,请在通过 USB 插入 Arduino 时打开串行监视器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
if (yValue > 1020){ digitalWrite(blueLED, HIGH); } else { digitalWrite(blueLED, LOW); } if (yValue < 2){ digitalWrite(redLED, HIGH); } else { digitalWrite(redLED, LOW); } if (xValue > 1020){ digitalWrite(yellowLED, HIGH); } else { digitalWrite(yellowLED, LOW); } if (xValue < 2){ digitalWrite(whiteLED, HIGH); } else { digitalWrite(whiteLED, LOW); } |
最后,我们将使用四个if()语句来控制彩色 LED。每个都分配一个值“> 1020”或“< 2”(我们使用这些值来减少闪烁)。例如,y 轴上的“> 1020”对应于摇杆指向上方,因此它会打开蓝色 LED。同样,y 轴上的“< 2”对应于操纵杆指向下方,因此红色 LED 将亮起,依此类推。
接线
该项目的布线相对简单。每个LED都需要自己的220欧姆电阻,因此请确保您有一些方便的。要连接项目,请按照以下步骤操作。首先,在摇杆模块上:
将G引脚连接到Arduino上的GND。
将P引脚连接到Arduino上的5V。
将操纵杆上的X引脚连接到Arduino上的A0引脚。
将操纵杆上的Y引脚连接到Arduino上的A1引脚。
接下来,对于LED,我们将从4到7将一种颜色连接到Arduino上的数字引脚。对于每个引脚,执行以下步骤:
将LED的长端连接到Arduino上的正确引脚(请参阅草图变量以获取正确的引脚映射或更改代码以适合您拥有的LED)。
将LED的短脚连接到220欧姆电阻。
将220欧姆电阻连接到面包板上的接地轨。
将面包板上的接地轨连接到Arduino上的GND。
一切就绪并上传软件后,您可以打开Arduino并开始移动操纵杆。如果您打开串行监视器,您应该会看到X和Y值随着您移动操纵杆而发生变化。尝试向上、向下、向左和向右指向操纵杆以查看哪个LED亮起。您可以通过根据操纵杆指向的位置触发不同的操作来扩展此项目。
全部0条评论
快来发表一下你的评论吧 !