尝试制作一个简单的Arduino加法器,但我遇到编程问题。我不确定我犯了什么错误。任何帮助将不胜感激。
用户必须在键盘上输入两个数字,并且它们的总和将显示在LCD上。用户输入的两个数字中的每一个分别存储在它们的变量中。问题是在输入第一个数字后,程序会自动插入0(因为此时没有按下任何键)第二个变量。我已经尝试了“如果','而'和'做什么'消除NO_KEY的陈述,但这些都没有起作用。
问题是,是否有办法将用户输入的数字存储在变量中,而不是让程序用0覆盖它,因为此时没有按下任何键。或者,也可以在按下按键后不让Arduino从键盘接收更多输入(可能以某种方式禁用键盘)......
如果您愿意花一些时间查看代码,则链接的here网站包含代码和整个实验室设置。
#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd (7,8,9,10,11,12);
int backLight(13);
int Addition(int x, int y){
int z;
z = x+y;
lcd.setCursor(8,0);
lcd.write(z);
}
void setup() {
}
const byte rows =4;
const byte cols =3;
char keys[rows][cols]={
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[rows] = {0,1,2,3};
byte colPins[cols] = {4,5,6};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
void loop(){
int a;
int b;
a = keypad.getKey();
if (a != NO_KEY){
do {
b = keypad.getKey();
}while (b == NO_KEY);
pinMode (backLight, OUTPUT);
digitalWrite(backLight, HIGH);
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.write(a);
lcd.setCursor(2,0);
lcd.write("+");
lcd.setCursor(4,0);
lcd.write(b);
lcd.setCursor(6,0);
lcd.write("=");
Addition(a,b);
delay(10000);
}
}
答案 0 :(得分:1)
您有一段代码如下:
NO_KEY
在while条件下,您似乎正在使用b
将(b = NO_KEY)
分配给(b == NO_KEY)
,而不是检查与do {
b = keypad.getKey();
} while (b == NO_KEY);
的相等性。赋值返回true,因此循环不会退出。
它应该是这样的:
atoi()
对于Addition问题,您的keymap包含字符而不是整数。所以a和b应该是char类型,你可以使用char a;
char b;
// ...assign values to a and b as you already do...
Addition(atoi(a), atoi(b)); // use atoi() (ascii to int) to pass integer values to Addition
将它们转换为int:
int keys[rows][cols]={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{'*',0,'#'}
};
或者,您可以将键盘映射更改为:
lcd.print(a, DEC)
并使用atoi()
打印值。那么你不需要Addition(int x, int y) {
int z;
z = x+y; // z is now the integer sum
lcd.setCursor(8,0);
lcd.print(z, DEC); // print the decimal value of z (default is ascii)
}
而且我认为它更干净。
加法功能:
p['x']
A B C D E
2015-12-31 0.957941 -0.686432 1.087717 1.363008 -1.528369
2016-01-31 0.079616 0.524744 1.675234 0.665511 0.023160
2016-02-29 -0.300144 -0.705346 -0.141015 1.341883 0.855853
2016-03-31 0.435728 1.046326 -0.422501 0.536986 -0.656256
p['y']
A B C D E
2015-12-31 True False True False NaN
2016-01-31 True True True False NaN
2016-02-29 False True True True NaN
2016-03-31 NaN NaN NaN NaN NaN