Serial анализ данных с com-порта
- Войдите на сайт для отправки комментариев
Ср, 10/02/2016 - 14:52
К сожалению сейчас нет возможности проверить код на работоспособность практически, т.к. нету модуля Ардуино, но в дальнейшем это потребуется. Может кто нибудь проверить работает ли этот код? Ну или хотя бы теоретически, всё правильно написано? (именно в плане анализа пришедших данных)
С компьютера с com-порта посылаем 0 - светодиод тухнет. Посылаем 1 - светодиод зажигается.
void setup() { Serial.begin(9600); // устанавливаем последовательное соединение pinMode(13, OUTPUT); //сделать вывод выходным } void loop() { //ПРИНЯТЬ ДАННЫЕ С COM-ПОРТА if (Serial.available() > 0) //если есть доступные данные { byte ByteData; //Переменная для хранения полученного байта ByteData = Serial.read(); //Считываем данные с COM-порта (1 байт) if (ByteData == 48) { //Пришёл 0 digitalWrite(13, LOW); //ВЫКЛ светодиод delay(1000); //Ждём секунду } if (ByteData == 49) { //Пришёла 1 digitalWrite(13, HIGH); //ВКЛ светодиод delay(1000); //Ждём секунду } } }
Непонятно для чего delay'и и почему сравнение идёт с 48 и 49, а не с '0' и '1'. Оно, конечно, на скорость не влияет, но так как-то нагляднее было бы.
Ну да, delay можно убрать. А вот собственно в этом и вопрос, как принимать и анализировать информацию. Я передаю 0 и 1 в байтах, я так понимаю в байтах я её и принимаю? Собственно потому и сравниваю с кодом цифр (0 код 48, 1 код 49). Или ардуино принимает инфо в строке, а не в байтах?
Я передаю 0 и 1 в байтах, я так понимаю в байтах я её и принимаю? Собственно потому и сравниваю с кодом цифр (0 код 48, 1 код 49). Или ардуино принимает инфо в строке, а не в байтах?
1. Причём тут вообще строки? Я что-то писал про строки? Строки записываются в двойных кавычках, я же использовал одинарные, значит, это была не строка, а одиночный символ. В программировании это огромная разница – не путайте.
Ну. а по сути …
«Не мудрствуйте лукаво», в компьютере (любом, не только в Ардуино) всё проще, чем Вам с испугу кажется. Ему (компьютеру) абсолютно по барабану, число там, символ или ещё что-то. Он такими понятиями не оперирует.
Вот сидит у него в каком-то регистре последовательность HIGH (1) и LOW (0), например такая:
00110001
И он знает только про эти нули и единицы. Ему глубоко плевать, что они значат для Вас – это не его дело.
А для Вас они могут значить совершенно разные вещи. Если Вы по каким-то причинам считаете их числом, то это 49. Если же Вам взбрындило считать их символом, то это '1'. Но это Ваши человеческие заморочки. Для компьютера это последовательность 00110001 – и ничего более.
Понимаете?
Поэтому когда Вы сравниваете в программе этот регистр с числом 49 – компьютер скажет «да, равны». Если Вы его же сравните с символом '1' – он тоже скажет «да, равны». Просто потому, что для него нет никаких 49 и '1' – для его это одна и та же последовательность 00110001 – одна и таже и никакой разницы между 49 и '1’ он не видит потому, что её и нет вовсе.
Отсюда следует, что будете Вы сравнивать с числом 49 или с символом '1' – абсолютно фиолетово, т.к. это одно и тоже.
А моё замечание касалось лишь «зраительно-визуальных» вещей. Если Вы вводите в сериал символы 0 и 1 (а именно их Вы давите на клавиатуре и видите в окне сериала!!!), то и сравнивать надо с символами '0’ и ‘1’, а не с невесть откуда взявшимися 48 и 49. Но, повторяю, разница только в визуальном восприятии человеком – так понятнее человеку. С точки зрения же компьютера – это фиолетово (потому я и написал там. что «на скорость не влияет»).
Сколько вы всего написали)
Если я посылаю информацию в байтах, то логично что в байтах я её должен получить. На c# я написал программу которая посылает нажатие клавиш в байтах, соответственно если я нажал "1" с клавиатуры, то моя программа посылает эту клавишу переведённую в байты (а именно перевести "1" в байты получается 49). И тут у меня тогда вопрос, в каком виде в ардуино приходит эта информация. Либо она думает что ей прислали 49 ввиде байтов (т.е. цифра "1" с клавиатуры), либо она думает что ей прислали цифры "4" и "9".
Надеюсь ясно выразился ибо либо сейчас я дико туплю, либо вы меня не понимаете)
Если отправляешь байт с компа, то он так байтом и придет, никто его не будет пилить на части по дороге.
Либо она думает что ей прислали 49 ввиде байтов (т.е. цифра "1" с клавиатуры), либо она думает что ей прислали цифры "4" и "9".
Ну, похоже, это Вы ничего не поняли из того, что писал. Зря время потерял.
Повторяю ещё раз - не мудрствуйте лукаво! Что Вы посылали, точно то и приходит на Ардуино. Так понятнее?
Если нет, то по-другому. Вы читаете функцией read. Что она читает? И сколько этого она читает?