Управление Ардуиной из теринала.
- Войдите на сайт для отправки комментариев
Вс, 27/01/2013 - 15:42
Всем привет. Читал на форуме про то как управляли роботами и прочими устройствами из компа ардуиной.
У меня задача похожая, нужно управлять к примеру одним светодиодом. Например пишу в терминале ledon- светодиод включился, ledoff- выключился. Вроде все просто но не работает. Помогите плиз. Вот мой кусок кода:
int led = 13; int ledon; int ledoff; void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { if (Serial.available() > 0) { // read the incoming byte: ledon = Serial.read(); digitalWrite(led, HIGH); // say what you got: Serial.print("I received: "); Serial.println(ledon); } if (Serial.available() > 0) { // read the incoming byte: ledoff = Serial.read(); digitalWrite(led, LOW); // say what you got: Serial.print("I received: "); Serial.println(ledoff); } }
Светодиод зажигается и выключается не важно что я шлю в терминал. Как мне привезать "ledon" и "ledoff" к определенному светодиоду и ими управлять???
не важно что я шлю в терминал.
Ну, логично. Вот вы прочитали
ledoff =
Serial
.read();
что-то из терминала, а где-то потом сравнили "что же вы прочитали"? Решение какое-то приняли? Нет. выПрочитали.
Включили диод (без каких-либо условий).
Вывели обратно в Serial что вы прочитали.
Это не говоря уже про что в какую ветку вы попадете 15 или 26 - чисто как повезет. Поиска ли бы по форуму. да и в гугле. Примеров "включаем LED" по командам из Serial - масса.
1 - включает, 2 - выключает, 3 - меняет состояние на противоположное. Все остальное - кричит "неизвестная комманда".
Спасибо, заработало! Но тут у меня эсть одно НО. Мне нужно дать кейсам читаемие имена. Такие Led1On, Led1Off... А компилятор ругается на то что там многострочная константа и происходит переполнение переменной, переменная не соответствует данным. Это все можно организовать как небуть через "if" ? Ишр еще как небуть?
Решение зависит от того что же именно вы хотите. Сделать сами команды многобуквенными, и в Serial писать "led1on" или "просто что-бы в коде видно было".
Первый вариант "так просто" уже не сделаешь. Нужно будет будет разобратся со строками, научится вычитывать из Serial строку, научится сравнивать строки, заморочится с определением "начало и конец строки" при чтении.
Во втором варианте, когда нужно просто в коде дать читаемые имена - тут все просто.
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/10/1002.htm
Нужно в сериал писать Led1On :)
Ну тогда айда в раздел программирование в шапке сайта, читать про массивы и строки (желательно C-шные, который string, а не String). Вначале просто учится их читать и выводить. Какая-нибудь книжка/учебник по C - тоже в этом помогут (в документации скупо это освещено).
Можно поиском по форуму поискать - задача не раз поднималась. Что-то типа "чтение строки из Serial", чтение массива из ком-порта, strcmp и т.п. и т.д.
Вообщем для начала - решите две задачи:
1. Как прочитать строку из сериал и запихнуть в какой-то массив
2. Как сравнивать две C-шный строки.
Ну а после этого - решение уже будет тривиальным. Как вы и говорили - через if.
Ок, спасибо!