Данные из COM порта
- Войдите на сайт для отправки комментариев
Вс, 01/05/2016 - 14:44
Здравствуйте. Имею такой код. Как мне сделать, чтобы при отправке в порт, скажем, числа "13" моё условие работало и светодиод загорался.
int val; int ledPin =13; boolean ledOn=false; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(115200); } void loop() { if (Serial.available()) { val = Serial.read(); if (val == 110) // n = 110 in dec { ledOn=!ledOn; digitalWrite(ledPin, ledOn); } } }
Числа 13 или строки "13"?
Если числа, то в строке 15 замените 110 на 13
Если строки, то она состоит из двух байтов. Надо принять оба и сравнивать
В порт будет отправлено число 13
Замена в 15 строке числа 110 на 13 не работает, 110 это буква n
13 это 4951 в DEC, но даже если я пишу
if
(val == 4951)
и отправляю в порт число 13, не работает условие.
Сергей, число 13, оно 13 и есть.
4951 - это не число. Это представление строки.
Строка состоит из двух байтов 49 и 51.
Принимайте два байта. Первый сравнивайте с 49, а следующий с 41
Тогда почему не работает?
if
(val == 13)
Потому, что Вы передаёте строку, а не число.
Я не зря спрашивал, что Вы передаёте.
А как принять байты?
Вы чем передаете? Ардуиновским монитором? Так он только строки шарит. Для начала перейдите на буквы, например Замените
if
(val == 's')
и передайте. После того как заработает - открывайте учебник на разделе "Типы данных" и желаю успеха.Передаю через php
Ну это тоже строка. Замените 13 для начала на одну букву, проверте, а потом - учится, учится и еще раз...
С одной буквой всё понятно, вместо буквы в php скрипте я пишу DEC число этой буквы
Наверно и просто буквы достаточно. Хотя всякие юникоды способны внести неповторимую прелесть в это дело. Если заработало - ок. Теперь учите сишные типы данных. Без этого никак. А пыха (и др. высокоуровневые интерпретируемые языки) дает плохой опыт в этом вопросе, она скрвает истину от програмиста.
Так вот это (в кавычках) строка и есть. Вы её и передаёте.
Принимайте два байта, а не один и сравнивайте первый с '1', а второй с '3'