Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino:按钮的令人费解的行为_Arduino - Fatal编程技术网

Arduino:按钮的令人费解的行为

Arduino:按钮的令人费解的行为,arduino,Arduino,我刚刚开始钻研arduino的世界,使用了几个Teensy和Teensy++,到目前为止,除了我在尝试从多个按钮获取输入时遇到的极其奇怪的行为外,一切都很顺利 基本上,我只有一个teensy++,一个LCD显示屏和3个按钮。我刚才的代码读取所有三个按钮的状态,然后将结果发布到屏幕上,0或1。再简单不过了,这就是为什么我很难弄清楚它为什么不起作用的原因 只需一个按钮,上述功能就可以正常工作。但是,当我在混音中添加一个其他按钮时,当我按下按钮1时,按钮1和按钮2都变为1,而不是正常工作。按钮2不起作

我刚刚开始钻研arduino的世界,使用了几个Teensy和Teensy++,到目前为止,除了我在尝试从多个按钮获取输入时遇到的极其奇怪的行为外,一切都很顺利

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

只需一个按钮,上述功能就可以正常工作。但是,当我在混音中添加一个其他按钮时,当我按下按钮1时,按钮1和按钮2都变为1,而不是正常工作。按钮2不起作用。按钮三也不起任何作用,当按下任何其他按钮时,按钮三甚至不转为按钮一

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

同样的问题。我不确定是什么原因导致这一切不起作用。我希望你们中的一位大师能突然出现,告诉我我做了一些完全错误的事情,因为我不明白为什么它根本不起作用

这是我的代码:

#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);
}    
#包括
液晶显示器(5,6,7,8,9,10);
无效设置(){
pinMode(13,输入);pinMode(21,输出);//按钮一
pinMode(12,输入);pinMode(20,输出);//按钮二
pinMode(11,输入);pinMode(19,输出);//按钮三
digitalWrite(21,高);//电源按钮
数字写入(20,高);
数字写入(19,高);
lcd.begin(16,4);
}
int-resp1=3//回答的变量
int-resp2=3;
int-resp3=3;
void循环(){
resp1=digitalRead(13);//读取按钮1
resp2=digitalRead(12);//读取按钮2
resp3=digitalRead(11);//读取按钮3
//将其打印到屏幕上
lcd.clear();
lcd.print(“Mike's Devboard”);
lcd.setCursor(0,1);
lcd.打印(“Btn 1:”);
lcd.打印(resp1);
lcd.打印(“Btn 2:”);
lcd.打印(resp2);
lcd.setCursor(0,2);
lcd.打印(“Btn 3:”);
lcd.打印(resp3);
延迟(48);
}    

有什么想法吗?

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

请注意,函数digitalRead()返回一个高或低值,对应于TRUE、FALSE或1,0。顺便说一句,不需要重置值,它们将服从每个循环按钮的状态

阅读按钮引脚的注释,我想,您可以将每个按钮的两侧连接到芯片提到的引脚,而无需其他任何东西(即无电阻等)

如果是这样的话

pinMode(13,INPUT);pinMode(21,OUTPUT);
digitalWrite(21,HIGH); //Power buttons
只要按钮打开,将驱动针脚21高电平和针脚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的内部电阻器将输入引脚“拉高”到高电平。当按钮闭合时,一些电流从高压流过电阻器,通过按钮流入另一个仍处于低压的引脚。这将使输入引脚也处于低位

有关这方面的详细信息,请参见教程中的

一个值得注意的副作用:


您将有“否定”输入:如果按钮打开,您将读取高(1),当按钮关闭时,您将读取低(0)。

您可以发布接线图吗?看看你的代码,我看到了一些奇怪的事情。1) 不要使用输出作为按钮的电源使用gnd和5V在按钮和5V之间串联添加一个电阻器,就像在arduino中一样,这正是我做错的地方,谢谢。我以为电阻只是为了阻止LED发光,但仔细阅读后,我明白为什么我需要它了。它正在工作。
digitalRead
s将确保这些值已定义状态。