Официальный сайт компании Arduino по адресу arduino.cc
Таймер и работа с серво
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Привет!
Помогите разобраться с решением задачи. Сам я не электронщик и не программист, поэтому и обращаюсь за помощью.
Требуется создать часы на базе arduino (используется DAGU Spider Robot controller) Индикация времени происходит путем поворота 16 кубов (по 4 куба на цифру) с помощью сервомашинок. Плюс 12 светодиодов, по 3 на цифру.
Каждый отдельный куб имеет 4 рабочих поверхности с фрагментами цифры. Поворачиваясь определенной поверхностью, кубы формируют изображение цифры. На каждую цифру отведены 4 куба (4 серво) и 3 светодиода. Итого 4 блока по 4 сервы и 3 светодиода для отображение времени в формате ЧЧ:ММ.
И так, вопросы:
1. Реализация таймера и запись текущего времени в переменные sec, minute и hour
Подойдет ли такой таймер?
// переменные long timer = 0;//переменная для хранения значений таймера int sec=0; //значение секунд int minute=0; //значение минут int hour=0; //значение часов //сам таймер if (millis() - timer >500) { timer = millis(); //запуcкаем таймер digitalWrite(13, !digitalRead(13));//меняем значение порта каждые 0.5секунд if(digitalRead(13)==HIGH)//если 13 нога лог1 то... { sec++;//переменная секунда + 1 if(sec>59)//если переменная секунда больше 59 { sec=0;//сбрасываем ее на 0 minute++;//пишем +1 в переменную минута } if(minute>59)//если переменная минута больше 59 { minute=0;//сбрасываем ее на 0 hour++;//пишем +1 в переменную час } if(hour>23)//если переменная час больше 23 { hour=0;//сбрасываем ее на 0
2. Создание библиотеки градусов поворота 4-х серво и алгоритма зажигания светодиодов на каждую цифру, пока условно
int digit0 = {30, 60, 30, 60, 1, 0, 1}; //градусы для 4-х серво и HIGH - LOW для LED для цифры "0" int digit1 = {30, 60, 60, 60, 0, 0, 0}; //градусы для 4-х серво и HIGH - LOW для LED для цифры "1" int digit2 = {60, 30, 0, 30, 0, 1, 0}; //градусы для 4-х серво и HIGH - LOW для LED для цифры "2" и т.д. для 3-9
Или есть другие варианты?
3. Считывание данных с таймера и формирование цифр на основе данных библиотеки
Вот здесь, собственно, загвоздка и состоит
3.1 Считать данные таймера в формате чч:мм и записать в соответствующие переменные для передачи информации о состоянии каждого из 4-х блоков
// чтение таймера block01 = lowByte(hour); // первая цифра часа Ч1 block02 = highByte(hour); // вторая цифра часа Ч2 block03 = lowByte(minute); // первая цифра часа М1 block04 = highByte(minute); // вторая цифра часа М2
Будет ли это работать? Т.е. хочется получить, например, из 21:34 переменнные
block01 = 2
block02 = 1
block03 = 3
block04 = 4
3.2 Ну и камень преткновения - формирование цифр в 4-блоках
3.2.1 Есть ли возможность языка arduino работать с переменными в таком формате:
Формирование блока 1 (первая цифра часа) в цифру "2"
for (int i=0; i <= 3; i++){ digitalWrite(i, digit(block01)[i+1]); //внимание на digit(block01) delay(10); }
Что хотел из этого бреда получить:) :
digitalWrite (i - номер пина для серво куда пишем - digit(block01) - данные из массива, в данном случае переменной digit2 (2 появляется из переменной block01 = 2), [i+1] - чтение ячейки массива (градусов для серво) По-человечески это должно выглядеть в данном случае как digitalWrite(i, digit2[i+1])
Думаю, что это работать не будет, подскажите как сделать чтоб заработало:)
Зарание прошу извинить за мои фантазии, я не программист. Изложил как смог.
Спасибо за внимание!