2

我刚刚开始用几个 Teensy 和 Teensy++ 深入研究 arduino 的世界,到目前为止,除了我在尝试从多个按钮获取输入时遇到的极其奇怪的行为外,它已经变得很好。

几乎,我只有一个 teensy++、一个 LCD 显示屏和 3 个按钮。我刚刚读取所有三个按钮的状态的代码,然后将结果发布到屏幕上,0 或 1。再简单不过了,这就是为什么我无法弄清楚它为什么不起作用的原因。

使用一个按钮,上述工作正常。但是,当我将其他按钮之一添加到组合中时,当我按下按钮 1 时,按钮 1 和按钮 2 都变为 1,而不是正常工作。按钮 2 什么也不做。按钮 3 也没有任何作用,甚至在按下任何其他按钮时都不会变为 1。

我的第一个倾向是我笨拙的屁股在板上用焊料桥接了一些痕迹。我抓起一个新的并重新焊接,检查每个触点以确保它是好的,而且确实如此。我没有使用我通常使用的面包板线,而是使用实芯线来确保电线不是问题。我还更换了面包板以防万一出现故障。

同样的问题。我不确定是什么导致它不起作用。我希望你们中的一位大师可以突然出现并告诉我我做错了什么,因为我不明白为什么它根本不起作用

这是我的代码:

#include <LiquidCrystal.h>

LiquidCrystal lcd(5,6,7,8,9,10);

void setup(){

pinMode(13,INPUT);pinMode(21,OUTPUT);  //Button one
pinMode(12,INPUT);pinMode(20,OUTPUT);  //Button two
pinMode(11,INPUT);pinMode(19,OUTPUT);  //Button three

digitalWrite(21,HIGH); //Power buttons
digitalWrite(20,HIGH);
digitalWrite(19,HIGH);

lcd.begin(16,4);

}

int resp1 = 3;  //Variables for responses 
int resp2 = 3;
int resp3 = 3;

void loop(){

 resp1 = digitalRead(13); //Read button 1
 resp2 = digitalRead(12); //Read button 2
 resp3 = digitalRead(11); //Read button 3

 //Print it to screen
 lcd.clear();
 lcd.print("Mike's Devboard");
 lcd.setCursor(0,1);
 lcd.print("Btn 1:");
 lcd.print(resp1);
 lcd.print("    Btn 2:");
 lcd.print(resp2);
 lcd.setCursor(0,2);
 lcd.print("Btn 3:");
 lcd.print(resp3);
 delay(48);
}    

有任何想法吗?

4

3 回答 3

1

阅读我猜的按钮引脚的注释,您将每个按钮的两侧都连接到芯片的上述引脚而没有其他任何东西(即没有电阻器等)

如果是这样的话

pinMode(13,INPUT);pinMode(21,OUTPUT);
digitalWrite(21,HIGH); //Power buttons

只要按钮打开,就会驱动引脚 21 HIGH 和引脚 13 进入高阻抗模式。这意味着输入引脚基本上是“浮动的” - 环境的任何影响都会使其切换。它基本上是随机输入。

如果关闭按钮,输入引脚连接到 HIGH 并提供强 HIGH。

你需要什么:

您需要在两种情况下将输入引脚置于定义的“强”状态 - 按钮打开时打开时。

你可以这样做:

pinMode(13,INPUT); digitalWrite(13, HIGH);  // input pin with internal pullup enabled
pinMode(21,OUTPUT); digitalWrite(21,LOW);   // other pin to ground

现在按钮的一条腿总是低(在地面上)。当按钮打开时,输入引脚被 CPU 的内部电阻“上拉”至高电平。当按钮关闭时,一些电流从高电平通过电阻器通过按钮流入另一个仍为低电平的引脚。这也将输入引脚驱动为低电平。

有关更多信息,请参阅教程中的数字引脚

一个值得注意的副作用:

您将获得“否定”输入:如果按钮打开,您将读取 HIGH (1),当按钮关闭时,您将读取 LOW (0)。

于 2012-04-04T20:14:44.957 回答
0

请注意,函数 digitalRead() 返回一个 HIGH 或 LOW,它们对应于 TRUE、FALSE 或 1,0 。顺便说一句,不需要重置这些值,它们将在每个循环中重新设置为按钮的状态。

于 2012-04-04T19:57:41.127 回答
0

您必须重置三个变量 resp1、resp2 和 resp3 的值,这些变量用于在 loop() 函数的末尾保持按钮的状态。

于 2012-04-04T06:15:25.183 回答