Установить значение переменной с помощью 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);
}
}
@Kalle Perälä, 👍2
3 ответа
Вы читаете Serial, не убедившись, что там есть что-то годное для чтения:
Luku4 = Serial.read();
while(Serial.available() == 0){}
Попробуйте поменять местами эти две строки.
Вы сравниваете байт, прочитанный через UART, с числом. Если вы отправите через UART число «5», вы получите не число «5», а символ «5». Чтобы преобразовать один символ в число, выполните следующие действия:
Luku4 = Serial.read(); // '0' .. '9'
Luku4 = Luku4 - '0'; // 0..9
Но это будет работать только для однозначных чисел. Для более надежного решения обратитесь к функции readString, чтобы узнать, как считывать строки из UART, и к функции atoi, которая преобразует строку в число.
Попробуйте изменить эти строки
Luku4 = Serial.read();
while(Serial.available() == 0){}
к этим строкам
while(Serial.available() == 0){}
Luku4 = Serial.parseInt();
Как показано в документации Arduino, функция Serial.parseInt() считывает число из Serial. Если введен символ, отличный от цифры, функция вернет 0.
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Ошибка "'Serial' does not name a type"
- Асинхронные вызовы функций в скетче ардуино
- Как добавить гистерезис к пороговым значениям?
- Построение графика на Python с использованием Tkinter Canvas
- Команда strtok() с Serial связью
- Двигатель постоянного тока шумит, но не вращается
- Как отправить целое число через pyserial с Python на Arduino и получить тот же результат?