附带在我们的脑海听这个词的第一件事操纵杆是游戏控制器。是的,完全相同,可以用于游戏目的。除了游戏以外,它在DIY电子产品中还有许多其他应用。该操纵杆不过是分别用于X和Y平面的两个电位器的组合。它通过电位计读取电压并将模拟值提供给Arduino,并且当我们移动操纵杆轴(简称电位计指针)时,模拟值会发生变化。
在此电路中,我们仅需根据操纵杆的运动控制四个LED,即可将操纵杆与Arduino连接。我们以代表操纵杆轴运动方向的方式放置了4个LED。该操纵杆还具有一个按钮,该按钮可用于其他各种目的,也可以保持空闲状态。操纵杆的开关上还附有一个LED,因为按下操纵杆按钮,单个LED将亮起。
所需材料
- Arduino UNO
- 游戏杆模块
- LEDs-5
- 电阻:100ohm-3
- 连接线
- 面包板
电路原理图
游戏杆模块
操纵杆 有不同的形状和尺寸。 下图显示了一个典型的 操纵杆模块。该操纵杆模块通常提供模拟输出,并且该模块提供的输出电压会根据我们移动它的方向不断变化。通过使用一些微控制器解释这些电压变化,我们可以获得运动的方向。以前,我们将操纵杆与AVR和Raspberry Pi连接。
如您所见,此操纵杆模块有两个轴。它们是X轴和Y轴。JOYSTICK的每个轴均安装在电位计或电位计上。这些电位器的中点被驱除为Rx和Ry。因此,Rx和Ry是这些电位器的可变点。当操纵杆处于待机状态时,Rx和Ry充当分压器。
当操纵杆沿水平轴移动时,Rx引脚上的电压会发生变化。同样,当它沿垂直轴移动时,Ry引脚上的电压也会发生变化。因此, 我们有四个摇杆的两个ADC输出的方向。当摇杆移动时,每个插针上的电压会根据方向变高或变低。
在这里,我们将该游戏杆模块与Arduino UNO连接,后者具有内置的ADC(模数转换器)机制,如最后的视频所示。在此处了解有关使用Arduino ADC的更多信息。
代码和解释
最后提到了完整的Arduino代码。
在下面的代码中,我们分别为模拟引脚A0和A1定义了操纵杆模块的X和Y轴。
#define joyX A0 #define joyY A1
现在,在下面的代码中,我们正在为操纵杆模块的Switch(按钮)初始化Arduino的PIN 2,并且 buttonstate 和 buttonstate1 的值将在开始时为0。
int button = 2; int buttonState = 0; int buttonState1 = 0;
在下面的代码中,我们将波特率设置为9600,并将引脚7定义为输出引脚,将按钮引脚定义为输入引脚。最初,按钮销将保持高电平,直到按下开关为止。
void setup(){pinMode(7,OUTPUT); pinMode(按钮,输入); digitalWrite(button,HIGH); Serial.begin(9600); }
在这里,在这段代码中,我们正在从模拟引脚A0和A1读取值并进行串行打印。
int xValue = AnalogRead(joyX); int yValue = AnalogRead(joyY); Serial.print(xValue); Serial.print(“ \ t”); Serial.println(yValue);
以下代码定义了根据操纵杆轴的移动打开和关闭LED的条件。在这里,我们只是获取Arduino的引脚A0和A1的电压模拟值。当我们移动操纵杆时,这些模拟值将发生变化,并且LED将根据操纵杆的移动而发光。
此条件适用于操纵杆轴沿-Y轴方向移动
如果(xValue> = 0 && yValue <= 10){digitalWrite(10,HIGH); } else {digitalWrite(10,LOW);}
此条件适用于操纵杆轴沿-X轴方向移动
如果(xValue <= 10 && yValue> = 500){digitalWrite(11,HIGH); } else {digitalWrite(11,LOW);}
此条件适用于操纵杆轴沿+ X轴方向移动
如果(xValue> = 1020 && yValue> = 500){digitalWrite(9,HIGH); } else {digitalWrite(9,LOW);}
此条件适用于操纵杆轴沿+ Y轴方向移动
如果(xValue> = 500 && yValue> = 1020){digitalWrite(8,HIGH); } else {digitalWrite(8,LOW);}
当我们沿对角线方向移动操纵杆轴时,当X和Y的模拟值分别为1023和1023时,到达一个位置时,Pin 9和Pin 8 LED都会发光。因为它满足了LED的条件。因此,为消除这种不匹配,我们给出了一个条件,即如果(X,Y)的值为(1023,1023),则两个LED均保持熄灭状态
如果(xValue> = 1020 && yValue> = 1020){digitalWrite(9,LOW); digitalWrite(8,LOW); }
以下条件用于操作连接到按钮开关的LED。当我们按下操纵杆开关时,LED将点亮并闩锁,直到释放按钮为止。使用操纵杆模块上的按钮开关是可选的。
如果(buttonState == LOW){Serial.println(“ Switch = High”); digitalWrite(7,HIGH); } else {digitalWrite(7,LOW);}
使用带有Arduino的操纵杆控制LED
将代码上传到Arduino并按照电路图连接组件后,我们现在可以使用操纵杆控制LED了。根据操纵杆轴的移动,我们可以在每个方向上打开四个LED。游戏杆内部有两个电位计,一个用于X轴运动,另一个用于Y轴运动。每个电位器从Arduino获得5v电压。因此,当我们移动操纵杆时,电压值将改变,并且模拟引脚A0和A1的模拟值也将改变。
因此,从Arduino,我们正在读取X和Y轴的模拟值,并根据操纵杆的轴运动来打开LED。操纵杆模块上的按钮开关用于控制电路中的单个LED,如下视频所示。