使用操纵杆和Arduino控制多个LED灯亮灭的过程

描述

操纵杆的工作原理

一个简单的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

该项目的布线相对简单。每个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亮起。您可以通过根据操纵杆指向的位置触发不同的操作来扩展此项目。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分