Как использовать кнопку на время l oop в Arduino? - PullRequest
0 голосов
/ 17 января 2020

Итак, я попытался сделать небольшую викторину, в нее можно было бы внести множество улучшений, но я хотел бы закончить проект, прежде чем я его улучшу. Я хочу, чтобы пользователь выбрал ответ, нажав кнопку.

Мой код в настоящее время выглядит следующим образом.

char serialData;
int i = 1;
int redLed = 12;
int greenLed=13;
int buttonA=11;
int buttonB=10;
int buttonC=9;
int lastState = LOW;
int currentState;

void setup()
{
    Serial.begin(9600);
    pinMode(redLed, OUTPUT);
    pinMode(greenLed, OUTPUT);
    pinMode(buttonA,INPUT);
    pinMode(buttonB,INPUT);
    pinMode(buttonC,INPUT);

    // read the state of the switch/button:
    currentState = digitalRead(buttonA);

    if(lastState == HIGH && currentState == LOW)
        Serial.println("A");

    // save the the last state
    lastState = currentState;
    delay(100);
}

void loop()
{
    vraag1();
    delay(1000);
    vraag2();
    delay(1000);
    vraag3();
    delay(1000);
    vraag4();
    delay(1000);
    vraag5();
    delay(1000);
    vraag6();
}

void vraag1()
{                                               //1
    Serial.println(" 3+3=? ");
    delay(400);
    Serial.println(" A) 6");
    delay(200);
    Serial.println(" B) 5 ");
    delay(200);
    Serial.println(" C) 4 ");
    delay(200);
    while  (Serial.available() ==0){}             //2-2

    /*
        This is the part I added to resolve the issue - but it
        does not work.
    */
    currentState = digitalRead(buttonA);
    if(lastState == HIGH && currentState == LOW)
        Serial.println("A");
    lastState = currentState;

    if (Serial.available())
    {                                             //3
        serialData = Serial.read();
        if (serialData == '6' || serialData == 'a' || serialData == 'A')
        {                                             //4
            Serial.println(" Correct ");
            i++;
            digitalWrite(greenLed, HIGH);
        }                                             //4
        else
        {                                           //5
            Serial.println(" Incorrect ");
            digitalWrite(redLed, HIGH);
        }                                         //5
    }

    delay(1000);
    digitalWrite(redLed, LOW);
    digitalWrite(greenLed, LOW);
}

Это код, который я добавил, чтобы попробовать его, но он не работает совсем. У кого-нибудь есть другое предложение?

      currentState = digitalRead(buttonA);
      if(lastState == HIGH && currentState == LOW)
        Serial.println("A");
      lastState = currentState;
...