我正在编写一个 Arduino Sketch,一般来说它是一个使用 4 个数字系统的计算器:十进制、二进制、八进制和十六进制。当我向用户询问数字系统时,他将使用键盘输入所需的系统(十进制为 1,十六进制为 2,八进制为 3,二进制为 4),然后,在收到此输入后,arduino 在 LCD 上打印选择的系统。但是这部分代码似乎无限重复,没有执行输入数字和操作数的部分。我不能输入不是 1、2、3 或 4 的数字,如果我按下其中一个数字,它会打印它的系统,完全忽略之前的输入。
我尝试使用布尔开关来指示程序如果之前已执行过该部分代码但它似乎不起作用,则不运行该部分代码
这是接收输入并对其进行验证的代码部分。开关盒在其他 3 次中重复其他 3 次,改变了打印的数字系统。
void loop()
{
char base = calcuShift.getKey();
if (base != NO_KEY && (base == '1' || base == '2' || base == '3' || base == '4')) {
switch (base) {
case '1':
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Sistema");
lcd.setCursor(0,1);
lcd.print("Decimal");
delay(3000);
lcd.clear();
break;
在 switch case 之后,它必须执行以下代码:
char key;
if (digitalRead(A0) == HIGH) {
key = calcuShift.getKey();
} else {
key = calcu.getKey();
}
if (key != NO_KEY &&
(key=='1' || key=='2' || key=='3' || key=='4' || key=='5' || key=='6' || key=='7' || key=='8' || key=='9') &&
base == '1') {
if (inicio == false) {
num1 = num1 + key;
int numLength = num1.length();
lcd.setCursor(15-numLength,0);
lcd.print(num1);
} else {
num2 = num2 + key;
int numLength = num2.length();
lcd.setCursor(15-numLength,1);
lcd.print(num2);
final = true;
}
显然包括其他 if 条件,这些条件取决于变量“base”(用户在开始时输入的那个)。如果它是 1(十进制)它接受数字 0 到 9,如果它是 2(十六进制)它接受数字 0 到 F 等等。用户使用变量键输入他的数字。calcuShift 对象只是 shift 模式下的普通键盘,用字母和其他两个操作数代替数字,乘法和除法操作数由幂和根操作数代替。
我希望我的计算器接收所需的数字系统,接收此类系统中的数字并使用这些数字进行运算,在先前选择的系统中返回答案,但只是坚持输入指示数字系统的变量“base”用过的。