|
在本篇文章中,我们将主要介绍如何使用Arduino摇杆模块(Joystick Shield)。该扩展模块有不同的版本,我们使用的是v2.4,它有一些有趣的功能和一些按钮,可以在您的应用程序中以不同的方式使用。
Arduino摇杆模块提供七个按钮开关(六个独立按钮和摇杆下方的按钮)和一个带有两个电位计的拇指摇杆。这个扩展板为您的Arduino提供旧的任天堂(Nintendo)控制器上的功能。摇杆可用于控制诸如旋律或屏幕上的像素之类的输出。按钮可用于导航或游戏控制。
注意:标准Arduino开发板不支持带有诺基亚5110 LCD的摇杆模块。这是因为标准的Arduino开发板的3.3 V电源仅能提供50 mA电流,而诺基亚5110背光需要更多电流。
实验1:读取摇杆值 摇杆有两个电位器,可连接到Arduino上的模拟引脚A0和A1。 A0的值对应于X位置。 A1的值对应于Y位置。要读取这些模拟值,请使用AnalogRead()函数。
所需的硬件 ● Arduino Uno开发板 ● Arduino Joystick Shield v2.4
操作步骤 1. 将摇杆模块连接到Arduino开发板上。 2. 将arduino开发板连接到PC。 3. 摇杆模上的LED将点亮,表明它能正常工作。 4. 编写sketch并编译,然后上传到开发板(在上传之前编译Sketch是一种很好的做法)。 5. 上传sketch后,运行串口监视器以观察相应值。 6. 向不同方向移动摇杆,您会注意到串口监视器上的值将发生变化。
您可以在8个方向上移动操纵杆:向上、右上、向右、右下、向下、左下、向左、左上。如果串口监视器上的值发生变化,则扩展模块正常工作。
如果扩展模块连接到5 V,此代码将显示如下内容。
代码 - // define global variables for analog pins.
- // X values will be read from pin 0 and Y from pin 1
- #define PIN_ANALOG_X 0
- #define PIN_ANALOG_Y 1
-
- void setup() {
- // Start serial because we will observe values at serial monitor
- Serial.begin(9600);
- }
-
- void loop() {
- // Print x axis values
- Serial.print("x: ");
- Serial.println(analogRead(PIN_ANALOG_X));
- // Print y axis values
- Serial.print("y: ");
- Serial.println(analogRead(PIN_ANALOG_Y));
-
- // Some delay to clearly observe your values on serial monitor.
- delay(500);
- }
复制代码
实验2:使用操纵杆控制运动 要控制沿X轴的运动,首先必须读取X轴电位计的位置,并确定用户是向右或向左按下控制器,还是根本没有按下控制器。当没有向右或向左按压时,A0的值通常为523。为了区别不同扩展模块单元之间读数的某些变化,我们将设置为30的容差。这意味着当我们读取值时在493和553之间,我们将假设用户没有按下操纵杆。读数小于493意味着用户向左按下操纵杆并希望被控制的对象向左移动。读数大于553意味着用户向右按下操纵杆并希望被控制的对象向右移动。
此代码将显示如下内容:
操作步骤 1. 将摇杆模块连接到Arduino开发板上。 2. 将arduino开发板连接到PC。 3. 摇杆模上的LED将点亮,表明它能正常工作。 4. 编写sketch并编译,然后上传到开发板(在上传之前编译Sketch是一种很好的做法)。 5. 上传sketch后,运行串口监视器以观察相应值。 6. 当您移动拇指摇杆时,串口监视器将显示拇指摇杆移动的方向。
代码 下面的代码将显示用户操作拇指摇杆的方向,而不是显示模拟值。 - // define global variables for analog pins.
- // X values will be read from pin 0 and Y from pin 1
- #define PIN_ANALOG_X 0
- #define PIN_ANALOG_Y 1
- void setup() {
- // Start serial because we will observe values at serial monitor
- Serial.begin(9600);
- }
- void loop() {
- // Print x axis values
- Serial.print("x: ");
- Serial.println(analogRead(PIN_ANALOG_X));
- // Print y axis values
- Serial.print("y: ");
- Serial.println(analogRead(PIN_ANALOG_Y));
- // Some delay to clearly observe your values on serial monitor.
- delay(500);
- }
复制代码
实验3:读取摇杆的按钮开关 按钮开关只需连接到Arduino数字I / O引脚,如下表所示:
按下按键A时,数字信号将发送到D2,依此类推。我们将使用digitalRead()函数来确定按钮的状态。
由于摇杆模块上的这些按钮没有连接电阻,因此必须在Arduino开发板上启用上拉电阻。以下是启用上拉电阻和读取数字值的代码。
每当用户按下按钮时,Arduino将在串口监视器上显示按钮值。
操作步骤 1. 将摇杆模块安装在arduino开发板上。 2. 将arduino开发板连接到PC。 3. 摇杆模块的Led指示灯将变亮,表明它能正常工作。 4. 编写sketch并编译,然后上传到开发板(在上传之前编译Sketch是一种很好的做法)。 5. 上传sketch后,运行串口监视器以观察相应值。 6. 按下摇杆上的任意按钮,它将显示哪个按钮被按下。
代码 - #define BUTTON_UP 2
- #define BUTTON_RIGHT 3
- #define BUTTON_DOWN 4
- #define BUTTON_LEFT 5
- #define BUTTON_E 6
- #define BUTTON_F 7
- #define DELAY 500
- void setup() {
- Serial.begin(9600);
- // to enable pull up resistors first write pin mode
- // and then make that pin HIGH
- pinMode(BUTTON_UP, INPUT);
- digitalWrite(BUTTON_UP, HIGH);
- pinMode(BUTTON_RIGHT, INPUT);
- digitalWrite(BUTTON_RIGHT, HIGH);
- pinMode(BUTTON_DOWN, INPUT);
- digitalWrite(BUTTON_DOWN, HIGH);
- pinMode(BUTTON_LEFT, INPUT);
- digitalWrite(BUTTON_LEFT, HIGH);
- pinMode(BUTTON_E, INPUT);
- digitalWrite(BUTTON_E, HIGH);
- pinMode(BUTTON_F, INPUT);
- digitalWrite(BUTTON_F, HIGH);
- }
- void loop() {
- if(digitalRead(BUTTON_UP) == LOW) {
- Serial.println("Button A is pressed");
- delay(DELAY);
- }
- else if(digitalRead(BUTTON_RIGHT) == LOW) {
- Serial.println("Button B is pressed");
- delay(DELAY);
- }
- else if(digitalRead(BUTTON_DOWN) == LOW) {
- Serial.println("Button C is pressed");
- delay(DELAY);
- }
- else if(digitalRead(BUTTON_LEFT) == LOW) {
- Serial.println("Button D is pressed");
- delay(DELAY);
- }
- else if(digitalRead(BUTTON_E) == LOW) {
- Serial.println("Button E is pressed");
- delay(DELAY);
- }
- else if(digitalRead(BUTTON_F) == LOW) {
- Serial.println("Button F is pressed");
- delay(DELAY);
- }
- }
复制代码
|