Просматриваю примеры в Wiki Видео Код (Text): void setup() { Serial.begin(9600); } void loop() { while (Serial.available() == 0); int val = Serial.read(); Serial.println(val); } Посылаю 1. В ответ должен получить 49. Но получаю 2 строки Вношу правки как в видео Код (Text): void setup() { Serial.begin(9600); } void loop() { while (Serial.available() == 0); int val = Serial.read() - '0'; Serial.println(val); } В ответ вместо 1 получаю : Почему такая разница с видео примером, почему в ответ лупит 2 строки? Заранее спасибо
10 — это перенос строки, обозначаемый как \n. На разных системах по разному принято обозначать новую линию. Так в винде это обычно пара следующих друг за дружкой \r\n, где \r — это символ с кодом 13 называемый возвратом каретки. А в linux перенос строки — это просто \n. Также, например, в протоколе HTTP и формате JSON принято использовать \r\n. В общем, всё зависит от контекста. Так вот. Судя по всему, когда вы посылаете данные в serial monitor, на стороне компьютера не съедается \n, съедается только \r. Почему так — отдельный вопрос. Может у кого-нибудь есть идеи? Может дело в настройках Arduino IDE? Но так или иначе, вы можете просто проверять символ на равенство \n и просто игнорировать его в этом случае.
Торможу, не додумался в ту же ASCII таблицу посмотреть, что значит 10 Выбрал в Serial Monitor No line Ending и десятки пропали Спасибо Тогда еще такой вопрос, он собственно по этой же теме. Раньше программил только на PHP там все проще с видами данных. Хочу вот такой вот код Код (Text): int ledPin = 13; int wait = 1500; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()) { wait = Serial.read(); Serial.println(wait); } digitalWrite(ledPin, HIGH); delay(wait); digitalWrite(ledPin, LOW); delay(wait); } Засылаю по сериалу 3000 В ответ получаю И диод начинает сумасшедше блымать Как мне 4 CHAR 3 0 0 0 превратить в INT 3000 Гуглю-муглю, не могу найти
Это довольно просто, хотя и достаточно low-level'ish: Код (Text): int readSerialInt() { int result = 0; while (Serial.available()) result = result * 10 + (Serial.read() - '0'); return result; } Суть понятна думаю: читаем циферки одна за другой и, увеличивая всякий раз временный результат на порядок, в итоге получаем наше значение.
Суть понятна Спасибо Просто понагуглил такое количество разно мудреного кода, что все никак не получалось добитсья нужного результата. В реальности же все оказалось гораздо проще Еще раз спасибо