Установить значение переменной с помощью serial?

Итак, мне нужно написать программу для Arduino, которая генерирует два случайных числа, выполняет над ними вычисление (+) и запрашивает у пользователя правильный ответ. Если ответ правильный (то есть вычисление == ответ пользователя), светодиод переключается в режим LOW, и команда SerialPrint отправляется. Если ответ неверный, светодиод загорается, и команда SerialPrint отправляется снова. Программа работает, если я задаю переменные вручную и т.д. Но, думаю, проблема в моём SerialRead: он почему-то не устанавливает значение, полученное от пользователя, в качестве значения переменной (Luku4).

Вот код, надеюсь, вы мне поможете.

int Luku1 = 0;
int Luku2 = 0;  
int Luku3 = 0;  //Сумма
int Luku4 = 0; //Ответ
const int ledPin = 13;
byte i = 0;

void setup() {

  for (i=0; i<4; i++){
pinMode(ledPin, OUTPUT); 
}

randomSeed(analogRead(0));
Serial.begin(9600);
Serial.println("Давайте угадаем 2 случайных числа и сложим их. Назовите правильный ответ");
}



void loop() {
  Serial.println("Оценка 2 случайных чисел");
  Luku1 = random(1,5);
  Luku2 = random(1,5);
  Serial.println(Luku1);
  Serial.println("+");
  Serial.println(Luku2);
  Luku3 = Luku1 + Luku2;
  delay(100);
  Serial.println("Какой ответ?");
  Luku4 = Serial.read();
    while(Serial.available() == 0){}

  if (Luku4==Luku3) {
    digitalWrite(ledPin, LOW);
    Serial.println("Правильный ответ");
    delay(2000);
  }

  else{
    digitalWrite(ledPin, HIGH);
    Serial.println("Wrong");
    delay(2000);
    digitalWrite(ledPin, LOW);

  }
}

, 👍2


3 ответа


1

Вы читаете Serial, не убедившись, что там есть что-то годное для чтения:

Luku4 = Serial.read();
while(Serial.available() == 0){}

Попробуйте поменять местами эти две строки.

,

2

Вы сравниваете байт, прочитанный через UART, с числом. Если вы отправите через UART число «5», вы получите не число «5», а символ «5». Чтобы преобразовать один символ в число, выполните следующие действия:

Luku4 = Serial.read(); // '0' .. '9'
Luku4 = Luku4 - '0'; // 0..9

Но это будет работать только для однозначных чисел. Для более надежного решения обратитесь к функции readString, чтобы узнать, как считывать строки из UART, и к функции atoi, которая преобразует строку в число.

,

0

Попробуйте изменить эти строки

Luku4 = Serial.read();
while(Serial.available() == 0){}

к этим строкам

while(Serial.available() == 0){}
Luku4 = Serial.parseInt();


Как показано в документации Arduino, функция Serial.parseInt() считывает число из Serial. Если введен символ, отличный от цифры, функция вернет 0.

,