Установить значение переменной с помощью серийного номера?
, поэтому мне нужно сделать программу arduino, создать 2 случайных числа, сделать с ними + расчет и запросить у пользователя правильный ответ. Если ответ правильный AKA Calculation == User Answer, тогда для led задано значение LOW и отправлено serialprint. Если это неправильно, светодиод загорается, а последовательный порт отправляется снова. Он работает, если я устанавливаю переменные вручную и т. Д. Но я думаю, что проблема связана с моим serialRead, так или иначе он не устанавливает значение, которое он получил от пользователя, как значение переменной (Luku4)
Вот код, надеюсь, вы сможете мне помочь.
int Luku1 = 0;
int Luku2 = 0;
int Luku3 = 0; //Summa
int Luku4 = 0; //Vastaus
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("Arvotaan 2 satunnaislukua ja summataan ne yhteen. Kerro oikea vastaus");
}
void loop() {
Serial.println("Arvotaan 2 satunnaislukua");
Luku1 = random(1,5);
Luku2 = random(1,5);
Serial.println(Luku1);
Serial.println("+");
Serial.println(Luku2);
Luku3 = Luku1 + Luku2;
delay(100);
Serial.println("Mika on vastaus?");
Luku4 = Serial.read();
while(Serial.available() == 0){}
if (Luku4==Luku3) {
digitalWrite(ledPin, LOW);
Serial.println("Oikea vastaus");
delay(2000);
}
else{
digitalWrite(ledPin, HIGH);
Serial.println("Vaarin");
delay(2000);
digitalWrite(ledPin, LOW);
}
}
3 ответа
Вы сравниваете байт, который был прочитан через uart с номером. Если вы отправите номер «5» через uart, вы не получите номер 5, а символ «5». Чтобы преобразовать один символ в число, вы можете сделать следующее:
Luku4 = Serial.read(); // '0' .. '9'
Luku4 = Luku4 - '0'; // 0..9
Но это будет работать только для чисел с одной цифрой, для более надежного решения см. функция readString , чтобы узнать, как вы можете читать строки из UART и выполнять функции atoi который преобразует строку в число.
Вы читаете «Серийный номер» перед тем, как проверить, что есть что-то, что можно прочитать:
Luku4 = Serial.read();
while(Serial.available() == 0){}
Попробуйте заменить эти две строки.
Попробуйте изменить эти строки
Luku4 = Serial.read();
while(Serial.available() == 0){}
к этим строкам
while(Serial.available() == 0){}
Luku4 = Serial.parseInt();
Как показано в документации Arduino , Serial.parseInt () будет читать номер из Serial , Если введен несимвольный символ, он вернет 0.