Здравствуйте. Нужно для одного проекта вводить цифры через монитор порта на Ардуинку. Вот код: Код (C++): int val; void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) // проверяем, поступают ли какие-то команды { val = Serial.read(); // переменная val равна полученной команде delay(1000); Serial.print(val); } } Но, например, ввожу "21", а на монитор потом выводится "50" и "49". В чем дело, кто подскажет? Пробовал разные типы данных - ничего не помогает.
Это коды символов 0x32 и 0x31 (шестнадцатеричное) то есть символы 2 и 1. Вам надо принимать строку и применив функцию "atoi" преобразовать её в число.
Код (C++): char str[16]; //строка (массив) куда принимаем символы int val; //полученное число .... //тут принимаем и размещаем символы в строку //начиная с str[0] и далее //строка должна быть завершена нулём .... val = atoi(&str[0]); //получаем число ...
Сделал вот так. Теперь всегда нули выходят: Код (C++): char str[16]; int val; void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) // проверяем, поступают ли какие-то команды { str[16] = Serial.parseInt(); // переменная val равна полученной команде val = atoi(&str[0]); delay(1000); Serial.print(val); }
А если серьёзно - достаточно просто почитать документацию и примеры: https://www.arduino.cc/en/Tutorial/ReadASCIIString, и тогда не будет подобной чуши: Код (C++): str[16] = Serial.parseInt(); // переменная val равна полученной команде val = atoi(&str[0]);
Всем спасибо. Тему можно закрыть. Сделал так: Код (C++): int val; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { val = Serial.parseInt(); Serial.println(val); delay(1000); } }
так может их и нет? Михаил, вопрос в "лучших" ваших традициях - и ни схемы, ни кода. Сейчас мы снова страницу будем из вас вытягивать, в чем проблема?