Управление несколькими сервами через serial
- Войдите на сайт для отправки комментариев
Привет! Делаю проект для управления сервами по xbee. C одной стороы потенциометры, с другой - сервы. С одной сервой все получилось. А вот как быть с 2мя? Как через сериал отправить данные какой серве крутиться?
Мысли такие: нужны 2 переменные
1 - в которой хранится номер сервы,
2 - в которой хранится угол.
Но я не могу понять как это реализовать через сериал( Как отправлять данные побайтово? На стороне приемника должно быть что-то вроде if/case (в arduino IDE нет case? как можно его заменить? только if else?) которые определяют какой серве адресовать угол, ну и там уже крутить в теле.
Подскажите пожалуйста как это сделать?=)
Так же хотелось бы понять как все-таки serial работает, а конкретно Serial.print(println,write,read).
C avaiable тоже не ясно. Когда пишут if(Serial.available() == 1), что это значит? Проверка пришел 1 символ? или байт?
Еще думал о i2c. Но не знаю, поддерживают ли сервы i2c? И если да, то как узнать id сервы? Спасибо)
Для начала ознакомтесь с http://arduino.ru/Reference там все достаточно подробно ррасписано, с небольшими примерами.
Я читал. Но про сериал мне не понятно до конца. Опыт в программировании небольшой.
Здесь на форуме уже наверное с десяток тем про управление через сериал чем либо и тем пяток про хВее так что поиском воспользуйтесь! А в Аппаратные вопросы посмотрите самую первую прикрепленную тему.
Перечитал раздел прогаммирование, много прояснилось - спасибо Максим=)
Решил передавать данные массивами. Но почему то при передаче, крутиться только одна серва на стороне приемника. Сериал порт приемника не могу посмортеть, ардуино пишет "порт занят". Подскажите, плиз, в чем дело.
Передатчик:
Приемник:
Да и кстати, с версии 1.0 же serial.flush изменился. Почему то
while (Serial.available())
Serial.read();
не решает проблему. Приходится компилить в 0.22.
Да и все-таки не могу понять как работает Serial.read. Написано: Cчитывает очередной доступный байт из буфера последовательного соединения.
Т.е. если я пишу int a = Serial.read(); в int запишется первый байт? А если я следом напишу int b = Serial.read(); то в и запишется второй байт?
Сейчас код приемника такой:
Крутятся обе=) но порой меняются местами эмм как бы объясниться: ну скажем первый пот крутит первую серву, второй - вторую. Если выставить оба пота на ноль, а потом скажем крутить первый пот, то может крутиться вторая серва. Полагаю дело в
ServoOne.write(b[0]);
ServoSec.write(b[1]);
Изначально писал тут
if (i == 0)
ServoOne.write(a[i]);
else
ServoSec.write(a[i]);
но крутилось не так как надо=)
Еще бы как-то оптимизировать с массивами.
У меня просто опыт в программировании почти нулевой, поэтому сорри за такие вопросы..
И еще почему то одна серва постоянно гудит. именно гудит, слышно когда стоит