Раздел кода Arduino не повторяется в нужное время - PullRequest
0 голосов
/ 04 марта 2019

Я новичок в C ++ и Arduino, но для классного проекта я начал работать над простым калькулятором Arduino.Это код, который у меня есть:

#include <Keypad.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(5, 4, 3, 2, A4, A5);



const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {A0, A1, 11, 10}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad
int LCDRow = 0;


Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


void setup(){
    Serial.begin(9600);
    lcd.begin(16, 2);
    lcd.setCursor(LCDRow, 0);
    lcd.print("Enter first");
    lcd.setCursor (++LCDRow, 15);
    lcd.print("number");
}

void loop(){
    char key = keypad.getKey();


    int firstNumber = 0;
    int selecting = 1;
    int secondNumber = 0;

    if (key && selecting == 1){
        key = key - 48;
        firstNumber = key;
        lcd.setCursor(LCDRow, 0);
        lcd.clear();
        selecting = 2;
        lcd.print("Selected");
        lcd.setCursor (++LCDRow, 15);
        lcd.print(firstNumber);
        delay(2000);
        lcd.clear();
    } 
    key =  0;
    if (selecting == 2){
        lcd.print("Enter second");
        lcd.setCursor (++LCDRow, 15);
        lcd.print("number");
    }

    if (key && selecting == 2){
        key = key - 48;
        secondNumber = key;
        lcd.setCursor(LCDRow, 0);
        lcd.clear();
        selecting = 3;
        lcd.print("Selected");
        lcd.setCursor (++LCDRow, 15);
        lcd.print(secondNumber);
        delay(2000);
        lcd.clear();
    } 
    key =  0;
    if (selecting == 3){
        lcd.print("Enter");
        lcd.setCursor (++LCDRow, 15);
        lcd.print("operation");
    }
}

Код должен просить вас ввести число, ввести второе число, а затем ввести операцию (плюс, минус и т. Д.).Я еще не выполнил код для фактического ввода операции, но не знаю, вызывает ли это проблему.

В настоящее время, после выбора второго числа, он просит ввести второе число еще раз.Кто-нибудь знает, что я сделал не так?(Все выводится на стандартный ЖК-дисплей 16x2)

1 Ответ

0 голосов
/ 05 марта 2019

Ваша проблема здесь, в начале loop:

void loop(){
    char key = keypad.getKey();

    int firstNumber = 0;
    int selecting = 1;
    int secondNumber = 0;

При каждом цикле времени эти переменные эффективно воссоздаются с нуля - они не сохраняют свое значение из предыдущих прогонов loop.Поэтому selecting будет сбрасываться на 1 каждый раз при запуске loop.

Хороший пример для переменной времени жизни этот вопрос .

Вы можете исправитьсделав переменные static:

void loop(){
    char key = keypad.getKey();

    static int firstNumber = 0;
    static int selecting = 1;
    static int secondNumber = 0;

Это означает, что они сохранят свое значение при нескольких прогонах loop.

...