Помощь в коде
- Войдите на сайт для отправки комментариев
Чт, 14/01/2016 - 00:59
Помогите пожалуйста! Задача такая, машинка на ардуино с управлением с телефона через геймпад. Проблема:Есть код, но он не работает. К примеру, вбиваю в консоль w, должно откликнутся словом forward, и конечно же поехать, но , не тут то было. С помощью Serial.println (Serial.read()); мониторю ввод, видно ,команды идут, но в if() почему то не работают.
void loop(){ int in = Serial.read()+1; Serial.println (Serial.read()); if(Serial.available()){ if(in == 'w'){ Forward(); Serial.println("Forward"); } if(in == 's'){ Reverse(); Serial.println("Reverse"); } if(in == 'a')turnLeft(); if(in == 'd')turnRight(); } Serial.println (Serial.read()); }
P.S. - Forward();Reverse();turnLeft();turnRight(); - заранее созданные функции, название которых достаточно обьясняет их предназначение
Четвертую строчку вырежьте и вставьте между void loop(){ и int in =...., и всё заработает) P.S. ещё замените int на char.
В дополнении к вышесказанному. Строка 2, убрать +1. И в строке 3 в Сериал выводится не переменная, а следующее значение из Сериал.
А еще так http://arduino.ru/Reference/SwitchCase
ну еще добавлю, что "w" и "W" разные (не смотря, что клавиша одна), а так-же есть еще русская раскладка.... это я к тому, что надо смотреть чего комп шлет а не какую клавишу нажимал :)
Если я использую switch, то код будет обрабатывать только одно нажатие за цикл.
Именно поэтому я if использовал.
Но спасибо.
Ну за этим я следил)
Четвертую строчку вырежьте и вставьте между void loop(){ и int in =...., и всё заработает) P.S. ещё замените int на char.
Спасибо большое.
Можете обьяснить, почему так ?
Ведь переменная находилась в том же классе, в той же функции.
Насколько я понимаю, if должна была иметь полный доступ к ней.
Страна советов...
Четвертую строчку вырежьте и вставьте между void loop(){ и int in =...., и всё заработает) P.S. ещё замените int на char.
Спасибо большое.
Можете обьяснить, почему так ?
Ведь переменная находилась в том же классе, в той же функции.
Насколько я понимаю, if должна была иметь полный доступ к ней.
Так потому, что ветка if(Serial.available())... выполнится только тогда, когда есть символ в UART-буфере. А вы этот символ считываете, потом, если он есть, будет выполнен весь остальной код...но его в буфере нет, вы его уже считали! Поэтому if далее и не выполнялся))