Скетч светофора без delay.

Пельмень
Offline
Зарегистрирован: 23.03.2015

Прошу помощи,я уже писал в нескольких темах о своей проблеме.Ардуино только начал осваивать,буду рад любым замечаниям и комментариям.Собственно стоит задача реализовать светофор с включением от удержания кнопки 5 сек. c начала работы программы не менее 2с,хотя последнее условие не обязательно выполнять.Написал скетч,опять же как мог,а он не работает.Заранее спасибо за помощь.

int pedYellow = 12; //желтый
int pedRed = 13;   //Красный
int pedGreen = 8;  //Зеленый
int button = 2;    //Контакт кнопки
 
int crossTime = 5000; //Время ожидания
unsigned long changeTime; //Время с начала работы программы
 
void setup() {
  // Контакты на выход
  pinMode(pedYellow, OUTPUT);  // Светодиод желтый
  pinMode(pedRed, OUTPUT);   //светодиод красный
  pinMode(pedGreen, OUTPUT);
  //Контакт на вход (кнопка)
  pinMode(button, INPUT);}
//Кнопка
 
void loop() {
  //Нажать кнопку 
  int state = digitalRead(button); //Получаем статус кнопки
  delay(5000);
  int state2 = digitalRead(button);
  //Если кнопка нажата и время с начала работы программы минус changeTime больше 2 сек, то
  if (state == state2) {
    if (state == HIGH && (millis() - changeTime) > 2000) {
      //1. Действие
      digitalWrite(pedYellow, HIGH); // Включаем желтый
      delay(2000); // Ждем 2 сек
      //2. Действие
      digitalWrite(pedYellow, LOW); // Выключаем желтый
      digitalWrite(pedRed, HIGH);   // Включаем красный
      delay(1000); // Ждем 1 сек
      //3. Действие
      digitalWrite(pedRed, LOW); // Выключаем красный
      digitalWrite(pedGreen, HIGH); // Включаем зеленый
      delay(crossTime); // Ждем 5 сек
      // Мигаем зеленым для пешеходов 5 раз
      for (int x = 0; x < 5; x++) {
        digitalWrite(pedGreen, HIGH);
        delay(250);
        digitalWrite(pedGreen, LOW);
        delay(250);
      }
      
    }changeTime = millis();      //changeTime равно время с начала работы программы
    }
  
  
SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

готов помочь в свободное время ( и дети подключатся ) , только алгоритм нужен поточнее-поподробнее....
....да , видел вас :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Написал скетч,опять же как мог,а он не работает.
фиг !!!!! он работает ! как вы и написали код..... только результат работы кода - не как вы хотели......
...не пеняйте на ардуину ! :)-

Пельмень
Offline
Зарегистрирован: 23.03.2015

Спасибо большое за ответ!!!!Опыта в написании программ практически нет,до этого писал на delay,собирал схему на макетной плате,все работало(т.е. светодиоды мигали в заданном режиме и времени).После осознания ошибки выбранного пути,вернее подсказки,накидал скетч светофора без delay-в итоге после удержания кнопки 5,и соответственно прошествии 2 сек. работы программы светодиоды не оживают,хотя скетч проходит проверку в программной среде.На ардуино не пиняю ни в коем случае,пиняю на кривые руки и недоразвитый мозг:-)Если не трудно,какой результат то хоть получился?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Пельмень пишет:

Спасибо большое за ответ!!!!Опыта в написании программ практически нет,до этого писал на delay,собирал схему на макетной плате,все работало(т.е. светодиоды мигали в заданном режиме и времени).После осознания ошибки выбранного пути,вернее подсказки,накидал скетч светофора без delay-в итоге после удержания кнопки 5,и соответственно прошествии 2 сек. работы программы светодиоды не оживают,хотя скетч проходит проверку в программной среде.На ардуино не пиняю ни в коем случае,пиняю на кривые руки и недоразвитый мозг:-)Если не трудно,какой результат то хоть получился?

подумай пока над тем что :
- все операторы в секции сетап выполняются сверху до низу ОДИН раз пр запуске
все операторы в секции луп выполняются сверху до низу в цикле !
                                                      и опять - 
сверху до низу
                                                      и опять - сверху до низу

X-Dron
Offline
Зарегистрирован: 24.01.2015

Если совсем без delay(), то так

#include <DI.h>
#include <Meander.h>
#include <Timer_P.h>

#define Button     3
#define LedYellow  12
#define LedRed     13
#define LedGreen   8 


//Контакт на вход (кнопка)
DI Key(Button, 10);
Timer_P KeyDelay, Cycle;
Meander P_500ms;
boolean KeyDelay_old; 

void setup()
{
   // Контакты на выход
   pinMode(LedYellow, OUTPUT);  // Светодиод желтый
   pinMode(LedRed, OUTPUT);     //светодиод красный
   pinMode(LedGreen, OUTPUT);
}

void loop()
{
  //Запускаем меандр
  P_500ms.MeanderV(500, 250);
  //Обновляем вход клавиши
  Key.DI_Refresh();
  //Задержка после нажатия кнопки
  KeyDelay.TimerV(Key.DI_Read(), 0, 1, 5000);
  // Если задержка истекла, то запускаем основной цикл светофора
  Cycle.TimerV(!KeyDelay.Q0() && KeyDelay_old, 0, 1, 10000);
  
  if (Cycle.Q0()){
    long Remains = Cycle.GetRemains();
    digitalWrite(LedYellow, Remains >8000 && Remains < 10000);
    digitalWrite(LedRed,    Remains >7000 && Remains < 8000);
    digitalWrite(LedGreen,  (Remains >2000 && Remains < 7000) || (Remains <2000 && P_500ms.Q0()));
  }else{
    digitalWrite(LedYellow, LOW);
    digitalWrite(LedRed, LOW);
    digitalWrite(LedGreen, LOW);
  }
  //сохраняем значение таймера задержки 
  KeyDelay_old = KeyDelay.Q0();
}

понадобится эта библиотека.
https://yadi.sk/d/hGQy8xu1fZNks
класс DI считывает входы клавиш и фильтрует дребезг. Кнопки должны быть подключены как здесь:
http://wiki.amperka.ru/конспект-arduino:миксер
класс Meander - для меандра мигания
класс Timer_P - для формирования задержки после нажатия на кнопку и для основного цикла светофора. (два таймера)

http://youtu.be/zbuOzEBgoVI
 

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

что-то я не понял тз, как-то невнятно оно написано

std
Offline
Зарегистрирован: 05.01.2012
#include <avr/sleep.h>
#include <avr/power.h>

const byte light_data[120]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,
   3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
   4,4,4,4,4,4,4,4,4,4,4,4,0,4,0,4,0,4,2,2,2,2,2,2,2,2,2,2};

#define RED    5
#define YELLOW 6
#define GREEN  7

volatile boolean onflag=false,         // going on state
                 onflagdone=false;     // on state
int              seconds=0;
unsigned long    last_on=millis(),     // timestamps
                 last_traff=millis();
byte             pos;                  // cycle position

void waking(void){
  onflag=true;
}

void sleeping(void){
  onflag=false;
  onflagdone=false;
  seconds=0;
  digitalWrite(RED,LOW);
  digitalWrite(YELLOW,LOW);
  digitalWrite(GREEN,LOW);
  delay(100);
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_mode();
  sleep_disable(); 
}

void setup(){
  pinMode(RED,OUTPUT);       // outs
  pinMode(YELLOW,OUTPUT);
  pinMode(GREEN,OUTPUT);
  pinMode(2,INPUT_PULLUP); // on
  attachInterrupt(0,waking,LOW);
  pos=0;
  sleeping();
}

void loop(){
  if(onflag){
    if(millis()-last_on>=1000){
      seconds++;
      last_on=millis();
    }
    if(!onflagdone){
      delay(5000);
      if(digitalRead(3)==LOW) onflagdone=true;
      else sleeping();
    }else{
      // -------------- traffic light cycle ---------------------------
      if(millis()-last_traff>=500){
        if(pos<=118) pos+=1;
         else pos=0;
        last_traff=millis();
      }
      switch(light_data[pos]){
        case 0:
         digitalWrite(RED,LOW);
         digitalWrite(YELLOW,LOW);
         digitalWrite(GREEN,LOW);
        break;
        case 1:
         digitalWrite(RED,HIGH);
         digitalWrite(YELLOW,LOW);
         digitalWrite(GREEN,LOW);
        break;
        case 2:
         digitalWrite(RED,LOW);
         digitalWrite(YELLOW,HIGH);
         digitalWrite(GREEN,LOW);
        break;
        case 3:
         digitalWrite(RED,HIGH);
         digitalWrite(YELLOW,HIGH);
         digitalWrite(GREEN,LOW);
        break;
        case 4:
         digitalWrite(RED,LOW);
         digitalWrite(YELLOW,LOW);
         digitalWrite(GREEN,HIGH);
        break;
      }
      // -------------- traffic light cycle ends ----------------------
      if(digitalRead(3)==LOW && seconds>=2){
        digitalWrite(5,LOW);
        delay(500);
        sleeping();
      }
    }
  }
}

Временной профиль в массиве, его длина 120 т. о. по полсекунды на кадр. Мигает 3 раза, и это можно подредактировать. 0 - всё выключено, 1 - красный, 2 - жёлтый, 3 - оба, 4 - зелёный (что видно из свитча). Жать кнопку на D2 долго (5 сек или больше) - включится, нажать долго или кратко, но минимум через 2 сек после включения - отключится. Из питания можно исключить линейный стабилизатор, тогда в выключенном режиме ест микроамперы (то есть кнопка и будет служить выключателем). Кнопка от D2 к Gnd.

Донатить на ЯД 410011919696337 :)

Пельмень
Offline
Зарегистрирован: 23.03.2015

Спасибо большое всем тем,кто откликнулся!!!Действительно,я,наверное,не правильно,вернее туманно обрисовал ТЗ.Просто сам пытаюсь,с малого,поэтому не все написал.насчет без delay- предыдущий скетч не работал,вернее кнопка,так как delay ее блокировал.Насчет вариантов решений-они бесспорно очень хороши!к сожалению я медленно отвечал,поэтому исправляюсь!Итак:1.Светофор.Три индикатора обозначают цвета.2.Кнопка-короткое нажатие-не более 2 сек.-перевод в дежурный режим(мигающий желтый)3.кнопка-долгое нажатие - не более 3 сек.-отключение нагрузки.И самое интересное для меня,даже не знаю как реализовать 4.Предусмотреть подключение нагрузки с потребляемым током до 2.5ампер на канал.Просьба,большая,обойтись малой кровью-без меандров и массивов,если это возможно,потому как разбираться надо с азов,а до них я еще не скоро доберусь-допустим мой скетч в шапке темы не годится вообще,или я сделал ошибку в нем?Уважаемый STD,вы поставили меня в неловкое положение,я сам виноват,конечно,ТЗ довольно туманно обрисовал,Вы сделали работу,не жалко было бы и задонатить,чем можно,но она оказалась бесполезна для меня.1-Пока не разбираюсь так глубоко,как Вы в этом коде,для меня разобраться и повторить при необходимости важно2.-немного не попали в ТЗ.

std
Offline
Зарегистрирован: 05.01.2012

ув. Пельмень, я лишь предлагаю :)

Разные режимы работы кнопки приведут к некоторым квестам (понадобится делать прерывание CHANGE, и ловить также время отпускания, чтобы понять длительность), так что лучше две. На D2 или D3 (прерывания) - выключатель питания, на ещё каком-нибудь входе - переключатель светофор/мигать жёлтым.

Чтобы коммутировать 2.5 А, достаточно почти любого транзистора с low-ultralow Rds(on), главное чтобы управлялся лог. уровнями (Vgt = 4 В или ниже). Это к коду не относится, для тех кто в танке.

Исходный скетч принципиально рабочий, но хуже воспринимается лично вами. Пишите код, который проще понять. Всегда.

Пельмень пишет:
2.-немного не попали в ТЗ.

Лехко. Написано же,

std пишет:
можно подредактировать

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

"тз" все-таки какое-то мутное. пока четко не сформулируете что вам нужно вряд ли кто-то толково поможет.

какие есть режимы работы? я так понял режима три:

1."выключено" (ничего не горит)

2."дежурный" (мигает желтый)

3."рабочий" (красный-желтый-зеленый по очереди)

какой режим устанавливается при старте системы?

и с кнопкой что? я не понял полет мысли. 
кнопка, я так понимаю, выбирает режимы работы?
Типа так:
нажатие до 1с - "дежурный" режим
нажатиеот 1 до 3с - "рабочий" режим
нажатие более 3с - "выключено"
 
ну а для мощной нагрузки можно использовать реле.
X-Dron
Offline
Зарегистрирован: 24.01.2015

Переключать режимы разной длительностью нажатия клавиши - геморрой еще тот. Гораздо проще циклически переключать режимы одержанием клавиши в течение, скажем, 1сек.
Вешать клавишу на прерывание без аппаратной фильтрации на триггере Шмитта - плохая идея. Будете ловить каждый дребезг.
Организовать задержку срабатывания с использованием прерывания - геморрой, равнозначный использованию delay().
 Организация меандра сигнала - самый простой способ сформировать мигающий сигнал без delay().

Пельмень
Offline
Зарегистрирован: 23.03.2015

Ув. STD Вы правы,проще,наверное поставить две кнопки-меньше проблем,тем более,как уже отмечалось,что ТЗ довольно неоднозначно звучит.Одна включение-выключение,другая переключение режимами работы.Про транзистор на ток 2.5 А даже не подумал,что реализовать можно схемно,спасибо за подсказку.

Пельмень
Offline
Зарегистрирован: 23.03.2015

Ув. KVadik согласен,ТЗ звучит очень неоднозначно.Думаю проще будет сделать как предлагал ув.STD.

Пельмень
Offline
Зарегистрирован: 23.03.2015

Благодарю за подсказки!Думаю мне не стоит так глубоко лезть пока...Воспользуюсь советами форумчан.

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Пельмень пишет:

Ув. KVadik согласен,ТЗ звучит очень неоднозначно.Думаю проще будет сделать как предлагал ув.STD.

С точки зрения разработки, вариант std для Вас будет, пожалуй, самый "сложный", т.к. Вам придется работать с прерываниями. С точки зрения юзабилити самый "сложный" вариант Ваш. Проще всего сделать как X-Dron предложил. Ну или несколько кнопок, как предложил std, но обойтись без прерываний.

X-Dron
Offline
Зарегистрирован: 24.01.2015

Так пойдет?
http://youtu.be/LBmVHV8NmH4
если да - выложу код. Управление одной клавишей с удержанием в секунду.

Для мигающей нагрузки с большими токами крайне рекомендуется использование SSR(Solid State Relay) - твердотельных реле.

Al_Ninyo
Offline
Зарегистрирован: 09.11.2014

Не сочтите рекламой :) Может вам пригодится моя реализация светофора? Там есть простой вариант, а есть вариант с кнопкой/экраном/пищалкой.

Пельмень
Offline
Зарегистрирован: 23.03.2015

Ув. X-Dron видео не открывается...Спасибо,что не безучастны в моей теме.ПИшет пользователь заблокировал доступ:-)

Пельмень
Offline
Зарегистрирован: 23.03.2015

Благодарю за ответ!!!!Тут маленько не так,проблемы я так понял с работой кнопки-как я понял ТЗ-Состояние светофора включается сразу,затем удержанием копки 2 сек. включается дежурный режим-мигает желтый...Затем при включении этой же кнопки 3 секунды и более светофор выключается.В любом случае,спаибо за ответ!

X-Dron
Offline
Зарегистрирован: 24.01.2015

Попробуйте сейчас. Ссылка та же.

Пельмень
Offline
Зарегистрирован: 23.03.2015

Ув. X-Dron,ссылка работает,видео очень интересно для меня!В принципе как я понял ТЗ,это то,что Вы и реализовали.Один вопрос- Вы одной кнопкой режимы переключали и выключали светофор?Просто на видео две кнопки.

Пельмень
Offline
Зарегистрирован: 23.03.2015

Только вот по секундам не распознял я,2 сек-желтый вроде,а ывключение 3?И еще вопрос-если шилд подключать,как мне здесь советовали,нужно под него отдельный код писать и библиотеку искать?

X-Dron
Offline
Зарегистрирован: 24.01.2015

код

#include <DI.h>
#include <Meander.h>
#include <Timer_P.h>

#define Button     3
#define LedYellow  12
#define LedRed     13
#define LedGreen   8 


//Контакт на вход (кнопка)
DI Key(Button, 10);
Timer_P KeyDelay, Cycle;
Meander P_1s;
boolean KeyDelay_old; 
byte mode;

void setup()
{
   // Контакты на выход
   pinMode(LedYellow, OUTPUT);  // Светодиод желтый
   pinMode(LedRed, OUTPUT);     //светодиод красный
   pinMode(LedGreen, OUTPUT);
}

void loop()
{
  //Запускаем меандр
  P_1s.MeanderV(800, 400);  //(период, длительность импульса)
  //Обновляем вход клавиши
  Key.DI_Refresh();
  //Задержка после нажатия кнопки
  KeyDelay.TimerV(Key.DI_Read(), 0, 2, 2000);
  //Если задержка истекла, то изменяем режим
  if (KeyDelay.Q0() && !KeyDelay_old) mode = (++mode)%3;
  //Цикл светофора
  Cycle.TimerV(!Cycle.Q0() && mode==0, false, 2, 15000);
  
  switch (mode) {
    case 0:
      {long Remains = Cycle.GetRemains();
      digitalWrite(LedRed,    Remains >8000);
      digitalWrite(LedYellow, Remains <10000 && Remains >8000);
      digitalWrite(LedGreen, (Remains <8000 && Remains >3000) || (Remains <3000 &&  P_1s.Q0()));
      }
      break;
    case 1:
      digitalWrite(LedYellow, P_1s.Q0());
      digitalWrite(LedRed, LOW);
      digitalWrite(LedGreen, LOW);
      break;
    case 2:
      digitalWrite(LedYellow, LOW);
      digitalWrite(LedRed, LOW);
      digitalWrite(LedGreen, LOW);
      break;
  }
  //сохраняем значение таймера задержки 
  KeyDelay_old = KeyDelay.Q0();
}

Управляется одной клавишей с задержкой переключения режимов 2 сек.

axill
Offline
Зарегистрирован: 05.09.2011

вот здесь в проекте (там внизу исходники) сделано не только без delay но еще и все на прерываниях, МК все время спит

правда это чисто Си, а не ардуиновский С++, но там разница с ардуино минимальна

http://radiokot.ru/circuit/digital/game/41

Пельмень
Offline
Зарегистрирован: 23.03.2015

огромная благодарность в помощи!!!!код поа не пробовал,постараюсь в ближайшее время.Не подскажите еще,как правильно  подключать кнопку на макетной плате,интересует не принцип,а практически.

Пельмень
Offline
Зарегистрирован: 23.03.2015

огромная благодарность в помощи!!!!код поа не пробовал,постараюсь в ближайшее время.Не подскажите еще,как правильно  подключать кнопку на макетной плате,интересует не принцип,а практически.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

кнопкаКонтакт_1 = земля , кнопкаКонтакт_2 = пин ,  включить внутреннюю подтяжку пина к VCC....
...нажатие кнопки = if(digitalRead(пин)==LOW))

кнопкаКонтакт_1 = VCC , кнопкаКонтакт_2 = пин ,  пин через резистор 10 kOm на GND.....
...нажатие кнопки = if(digitalRead(пин)==HIGH))

первый вариант - не нужен внешний резистор, второй - нужен.... код обработки - разный....

...оба варианта подключения - равноправны

Пельмень
Offline
Зарегистрирован: 23.03.2015

Ув.SU-27-16 я больше спрашивал о практической части...куда какой провод подключается к кнопке,если нужно использовать 10КОм,то получается на кнопку идут 2 провода,как реалиовать это на макетной схеме?

Пельмень
Offline
Зарегистрирован: 23.03.2015

И один на вход к конпке,конечно же

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

странно... в #27 всё описано до тонкостей....

X-Dron
Offline
Зарегистрирован: 24.01.2015

в #5 написано как подключать кнопки, если используете мой код

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Пельмень пишет:

Ув.SU-27-16 я больше спрашивал о практической части...куда какой провод подключается к кнопке,если нужно использовать 10КОм,то получается на кнопку идут 2 провода,как реалиовать это на макетной схеме?

http://arduino.ru/tutorials/button

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

X-Dron пишет:

в #5 написано как подключать кнопки, если используете мой код

извини, но я там не нашёл такого.... как подключить....
...не все по коду понимают - как ЕЁ подключить :(

X-Dron
Offline
Зарегистрирован: 24.01.2015

Кнопки должны быть подключены как здесь:
http://wiki.amperka.ru/конспект-arduino:миксер

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Kolchugin пишет:

Пельмень пишет:

http://arduino.ru/tutorials/button

это один из вариантов.... в моём посте - номер 2

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

X-Dron пишет:

Кнопки должны быть подключены как здесь:
http://wiki.amperka.ru/конспект-arduino:миксер

это вариант 1 :)

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Ещё можно добавить вариант 3 ;)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Kolchugin пишет:

Ещё можно добавить вариант 3 ;)

добавьте-просвятите.... с одновременной отправкой заявки на на Нобелевскую премию....
....шутка, канечно же :)

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Да я подключение нескольких кнопок к аналоговому входу.

Пельмень
Offline
Зарегистрирован: 23.03.2015

Благодарю,этот вариант наиболее понятен для моего восприятия как шаблон.уже думал навесным монтажом паять.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Kolchugin пишет:

Да я подключение нескольких кнопок к аналоговому входу.

это частный вариант.... моя ждал чего-то.... которое с ног на голову перевернёт МК :)-

Пельмень
Offline
Зарегистрирован: 23.03.2015

В ходе работы назрело еще несколько вопросов,если они не новые,прошу отправить к первоисточнику.Ув.X-Dron ситуация в следующем-код работает на ура,но с одной оговоркой-режимы переключаются только тогда,когда вытаскиваешь из макетной платы провод с разъема 3 платы,а затем нажимаешь кнопку.Без этих действий режим вообще не переключается...Может собрал схему не так,но я по шаблону старался делать.Второй вопрос-каким параметром в таймере задается время мигания светодиодов?Третий-библиотека,которой Вы поделились здесь написана Вами,или есть в свободном доступе?

Пельмень
Offline
Зарегистрирован: 23.03.2015

Прошу прощения,в первом вопросе разобрался-не к тем контактам подключил провод с платы под номером 3.

X-Dron
Offline
Зарегистрирован: 24.01.2015

Период цикла светофора задается в
Cycle.TimerV(!Cycle.Q0() && mode==0, false, 2, 15000);
Т.е. каждые 15сек он пересбрасывается и начинает считать заново. Время до очередного пересброса записывается в пеерменную Remains
Сравнения с Remains определяют гореть или не гореть светодиоду. Начало цикла синхронизовано с включением красного светодиода
digitalWrite(LedRed, Remains >8000); говорит, что красный горит, 7 секунд с 15000 до 8000 по Remains
digitalWrite(LedYellow, Remains <10000 && Remains >8000); желтый с 2 секунды с 10000 до 8000 по Remains, т.е. гаснет одновременно с красным.
digitalWrite(LedGreen, (Remains <8000 && Remains >3000) || (Remains <3000 && P_1s.Q0())); горит 5 секунд с 8000 до 3000 по Remains, если меньше 3000, то мигает

Пельмень
Offline
Зарегистрирован: 23.03.2015

Не просвятите,как образовалась библиотека скетча?она универсальная,что описывает,если не трудно?

X-Dron
Offline
Зарегистрирован: 24.01.2015

Библиотека моя, естественно находится в свободном доступе, раз дал ссылку. Основной зеркало на github
https://github.com/X-Dron/X-Dron_lib
на ЯндексДиске - актуальная копия с которой работаю сам.
Библиотека универсальна.
пошло с этого
http://arduino.ru/forum/programmirovanie/taimery-i-programmnyi-antidrebe...
http://forum.amperka.ru/threads/%D0%A2%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%D1%...
 

Пельмень
Offline
Зарегистрирован: 23.03.2015

Я польщен вниманием Вашим вниманием!16 лет программирования промышленной автоматики!!!!Еще раз огромная благодарность Вам и Вашим учителям! 

Пельмень
Offline
Зарегистрирован: 23.03.2015

X-Dron пишет:

Библиотека моя, естественно находится в свободном доступе, раз дал ссылку. Основной зеркало на github
https://github.com/X-Dron/X-Dron_lib
на ЯндексДиске - актуальная копия с которой работаю сам.
Библиотека универсальна.
пошло с этого
http://arduino.ru/forum/programmirovanie/taimery-i-programmnyi-antidrebe...
http://forum.amperka.ru/threads/%D0%A2%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%D1%...
 

Как Вы считаете,с функцией delay возможно реализовать то же самое?

Пельмень
Offline
Зарегистрирован: 23.03.2015

Имеется в ввиду,те же функции кнопки,и работу диодов?

warik81
Offline
Зарегистрирован: 03.10.2016

Народ, я ни одного кода ещё не написал на ардуино, но уже собрался светофор делать в детсад обучать детей. Напишите, пожалуйста, скетч с пояснениями. Буду очень благодарен за подробное описание, так как не хочу останавливаться на этом.

Тех задание такое:

При подаче питания моргает жёлтый по 1 сек. Светофор управляться будет 4мя кнопками с радио пульта подключенного на аналоговые пины A2, A3, A4, A5 (удобно плату приёмника подключить сюда). Лампочки запитаю через реле (т.к. будет потребление большое) в те пины куда скажете (мне нравятся цифровые 7, 6, 5, 4).

A2 - вкл/выкл режима светофора (50 сек зелёный, зелёный мигает 3 раза по 1 сек, жёлтый 3 сек, красный 50 сек, красный с жёлтым 3 сек)

A3 - зелёный

A4 - жёлтый

A5 - красный