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

, поэтому мне нужно сделать программу 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);

  }
}
2 голоса | спросил Kalle Perälä 24 PMpTue, 24 Apr 2018 15:30:24 +030030Tuesday 2018, 15:30:24

3 ответа


2

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

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

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

ответил gabonator 24 PMpTue, 24 Apr 2018 19:55:27 +030055Tuesday 2018, 19:55:27
1

Вы читаете «Серийный номер» перед тем, как проверить, что есть что-то, что можно прочитать:

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

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

ответил CrossRoads 24 PMpTue, 24 Apr 2018 15:33:36 +030033Tuesday 2018, 15:33:36
0

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

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

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

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


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

ответил PiGuy2 24 PMpTue, 24 Apr 2018 22:34:01 +030034Tuesday 2018, 22:34:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132