Таймер и работа с серво

Нет ответов
Demiel
Offline
Зарегистрирован: 26.10.2011

Привет!

  Помогите разобраться с решением задачи. Сам я не электронщик и не программист, поэтому и обращаюсь за помощью.

  Требуется создать часы на базе 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])

Думаю, что это работать не будет, подскажите как сделать чтоб заработало:)

Зарание прошу извинить за мои фантазии, я не программист. Изложил как смог.

Спасибо за внимание!