таймер с кнопкой вкл. выкл

Dkolia
Offline
Зарегистрирован: 02.11.2016

алгоритм такой после нажатия кнопки1 включается реле1 и запускается таймер на 3 часа , и выключается сам или по повторному нажатию кнопки1 и так со всеми.

int switchPin1 = 8;
int ledPin1 = 13;
boolean lastButton1 = LOW;
boolean currentButton1 = LOW;
boolean ledOn1 = false;
 
int switchPin2 = 9;
int ledPin2 = 12;
boolean lastButton2 = LOW;
boolean currentButton2 = LOW;
boolean ledOn2 = false;
 
int switchPin3 = 5;
int ledPin3 = 7;
boolean lastButton3 = LOW;
boolean currentButton3 = LOW;
boolean ledOn3 = false;
 
int switchPin4 = 3;
int ledPin4 = 6;
boolean lastButton4 = LOW;
boolean currentButton4 = LOW;
boolean ledOn4 = false;
 
int switchPin5 = 4;
int ledPin5 = 2;
boolean lastButton5 = LOW;
boolean currentButton5 = LOW;
boolean ledOn5 = false;
 
void setup()
{
  pinMode(switchPin1, INPUT);
  pinMode(ledPin1, OUTPUT);
 
  pinMode(switchPin2, INPUT);
  pinMode(ledPin2, OUTPUT);
 
  pinMode(switchPin3, INPUT);
  pinMode(ledPin3, OUTPUT);
 
  pinMode(switchPin4, INPUT);
  pinMode(ledPin4, OUTPUT);
 
 pinMode(switchPin5, INPUT);
  pinMode(ledPin5, OUTPUT);
}
 
boolean debounce1(boolean last)
{
  boolean current1 = digitalRead(switchPin1);
  if(last != current1)
  
    delay(5);
    current1 = digitalRead(switchPin1);
  
  return current1;
}
 
boolean debounce2(boolean last)
{
  boolean current2 = digitalRead(switchPin2);
  if(last != current2)
  
    delay(5);
    current2 = digitalRead(switchPin2);
  
  return current2;
}
 
     boolean debounce3(boolean last)
{
              boolean current3 = digitalRead(switchPin3);
              if(last != current3)
  
    delay(5);
    current3 = digitalRead(switchPin3);
  
  return current3;
}
  boolean debounce4(boolean last)
{
  boolean current4 = digitalRead(switchPin4);
  if(last != current4)
  
    delay(5);
    current4 = digitalRead(switchPin4);
  
  return current4;
}
 
boolean debounce5(boolean last)
{
  boolean current5 = digitalRead(switchPin5);
  if(last != current5)
  
    delay(5);
    current5 = digitalRead(switchPin5);
  
  return current5;
}
 
  void loop()
{
 
  currentButton1 = debounce1(lastButton1 == LOW);
  if (lastButton1 == LOW && currentButton1 == HIGH)
                 ledOn1 = !ledOn1; 
 
lastButton1 = currentButton1;
digitalWrite(ledPin1, ledOn1);
 
 
  currentButton2 = debounce2(lastButton2 == LOW);
     if (lastButton2 == LOW && currentButton2 == HIGH)
                  ledOn2 = !ledOn2;
 
 
lastButton2 = currentButton2; 
digitalWrite(ledPin2, ledOn2);
 
 
  currentButton3 = debounce3(lastButton3 == LOW);
     if (lastButton3 == LOW && currentButton3 == HIGH)
                  ledOn3 = !ledOn3;
 
 
lastButton3 = currentButton3; 
digitalWrite(ledPin3, ledOn3);
 
 
  currentButton4 = debounce4(lastButton4 == LOW);
     if (lastButton4 == LOW && currentButton4 == HIGH)
                  ledOn4 = !ledOn4;
 
 
lastButton4 = currentButton4; 
digitalWrite(ledPin4, ledOn4);
 
 currentButton5 = debounce5(lastButton5 == LOW);
  if (lastButton5 == LOW && currentButton5 == HIGH)
                 ledOn5 = !ledOn5; 
 
lastButton5 = currentButton5;
digitalWrite(ledPin5, ledOn5);
 
}
 
Araris
Offline
Зарегистрирован: 09.11.2012

Ощущаю некоторую недосказанность в теме (и в скетче)...

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015
int switchPin1 = 8;
int ledPin1 = 13;
boolean lastButton1 = LOW;
boolean currentButton1 = LOW;
boolean ledOn1 = false;
 
int switchPin2 = 9;
int ledPin2 = 12;
boolean lastButton2 = LOW;
boolean currentButton2 = LOW;
boolean ledOn2 = false;
 
int switchPin3 = 5;
int ledPin3 = 7;
boolean lastButton3 = LOW;
boolean currentButton3 = LOW;
boolean ledOn3 = false;
 
int switchPin4 = 3;
int ledPin4 = 6;
boolean lastButton4 = LOW;
boolean currentButton4 = LOW;
boolean ledOn4 = false;
 
int switchPin5 = 4;
int ledPin5 = 2;
boolean lastButton5 = LOW;
boolean currentButton5 = LOW;
boolean ledOn5 = false;
 
void setup()
{
  pinMode(switchPin1, INPUT);
  pinMode(ledPin1, OUTPUT);
 
  pinMode(switchPin2, INPUT);
  pinMode(ledPin2, OUTPUT);
 
  pinMode(switchPin3, INPUT);
  pinMode(ledPin3, OUTPUT);
 
  pinMode(switchPin4, INPUT);
  pinMode(ledPin4, OUTPUT);
 
 pinMode(switchPin5, INPUT);
  pinMode(ledPin5, OUTPUT);
}
 
boolean debounce1(boolean last)
{
  boolean current1 = digitalRead(switchPin1);
  if(last != current1)
  
    delay(5);
    current1 = digitalRead(switchPin1);
  
  return current1;
}
 
boolean debounce2(boolean last)
{
  boolean current2 = digitalRead(switchPin2);
  if(last != current2)
  
    delay(5);
    current2 = digitalRead(switchPin2);
  
  return current2;
}
 
     boolean debounce3(boolean last)
{
              boolean current3 = digitalRead(switchPin3);
              if(last != current3)
  
    delay(5);
    current3 = digitalRead(switchPin3);
  
  return current3;
}
  boolean debounce4(boolean last)
{
  boolean current4 = digitalRead(switchPin4);
  if(last != current4)
  
    delay(5);
    current4 = digitalRead(switchPin4);
  
  return current4;
}
 
boolean debounce5(boolean last)
{
  boolean current5 = digitalRead(switchPin5);
  if(last != current5)
  
    delay(5);
    current5 = digitalRead(switchPin5);
  
  return current5;
}
 
  void loop()
{
 
  currentButton1 = debounce1(lastButton1 == LOW);
  if (lastButton1 == LOW && currentButton1 == HIGH)
                 ledOn1 = !ledOn1; 
 
lastButton1 = currentButton1;
digitalWrite(ledPin1, ledOn1);
 
 
  currentButton2 = debounce2(lastButton2 == LOW);
     if (lastButton2 == LOW && currentButton2 == HIGH)
                  ledOn2 = !ledOn2;
 
 
lastButton2 = currentButton2; 
digitalWrite(ledPin2, ledOn2);
 
 
  currentButton3 = debounce3(lastButton3 == LOW);
     if (lastButton3 == LOW && currentButton3 == HIGH)
                  ledOn3 = !ledOn3;
 
 
lastButton3 = currentButton3; 
digitalWrite(ledPin3, ledOn3);
 
 
  currentButton4 = debounce4(lastButton4 == LOW);
     if (lastButton4 == LOW && currentButton4 == HIGH)
                  ledOn4 = !ledOn4;
 
 
lastButton4 = currentButton4; 
digitalWrite(ledPin4, ledOn4);
 
 currentButton5 = debounce5(lastButton5 == LOW);
  if (lastButton5 == LOW && currentButton5 == HIGH)
                 ledOn5 = !ledOn5; 
 
lastButton5 = currentButton5;
digitalWrite(ledPin5, ledOn5);
 
}

вот так надо оформлять

 

Dkolia
Offline
Зарегистрирован: 02.11.2016

я хотел чтоб мне помогли усовершенствовать скетч

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dkolia пишет:

я хотел чтоб мне помогли усовершенствовать скетч

А можно Ваши хотелки поподробнее? Цель усовершенствования? Что именно не устравивает в нынешнем?

Dkolia
Offline
Зарегистрирован: 02.11.2016

добавить таймер к данному скетчу

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dkolia пишет:

добавить таймер к данному скетчу

Простите, я ещё раз напишу, но больше не буду. 

Если Вы хотите помощи, потрудитесь объяснять что Вам нужно понятно и подробно.

Вот что значит "добавить таймер"? Для чего его добавлять и что этот таймер должен делать? 

Пока же Вам можно лишь посоветовать "ну, купите таймер и примотайте его скотчем к ардуине".

Если Вы не хотите обяснять что Вам нужно подробно и понятно, не удивляйтесь, что Вам либо вовсе не ответят, либо постебаются как про скотч выше.

Dkolia
Offline
Зарегистрирован: 02.11.2016

Алгоритм такой после нажатия кнопки1 включается реле1 и запускается таймер на 3 часа , и выключается сам и может выключиться по нажатию кнопки  и так со всеми.

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

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Dkolia пишет:

я хотел чтоб мне помогли усовершенствовать скетч

Что там соверщенствовать? Сейчас это просто клочек непонятно чего!

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

Могу проедложить ТРИ пути:

1. Пойти в институт и может быть там смогуть тебя чему-то научить

2. Напрячь мозг и попытаться выучить это самостоятельно (информации сейчас в отличии от 70-80х годов прошлого столетия не море а просто океан)

3. Заплатить денег тем у кого есть мозги, знания и свободное время......

PS - любая задача начинается с ТЗ - технического задания.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

И самое главное , что если вам "нарисуют" код, то вы в нем разберетесь. Вот как в этом. Там только на 2 реле

/*
#1 таймер кнопка 1 ->2  (btn1_pin) 0- нажата /1 нет
                 GND->GND
          светодиод 1->3 (Led1_pin) 1- горит /0 нет
                 Ucc->Ucc
 #2 таймер кнопка 2->2  (btn1_pin) 0- нажата /1 нет
                 GND->GND
          светодиод 2->3 (Led1_pin) 1- горит /0 нет
                 Ucc->Ucc
*/
//#1
const int btn1_pin = 2; // нога кнопки 1
uint8_t btn1 = 0xFF;
const int Led1_pin = 3; // нога светодиода 1
uint8_t Led1;
//#2
const int btn2_pin = 4; // нога кнопки 2
uint8_t btn2 = 0xFF;
const int Led2_pin = 5; // нога светодиода 2
uint8_t Led2;

void setup() {
  //#1
  pinMode(btn1_pin, INPUT_PULLUP);
  pinMode(Led1_pin, OUTPUT);
  digitalWrite(Led1_pin, Led1 = 0);
  //#2
  pinMode(btn2_pin, INPUT_PULLUP);
  pinMode(Led2_pin, OUTPUT);
  digitalWrite(Led1_pin, Led2 = 0);
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ;
  //#1 200 миллисекунд вычислит. поток 1
  static uint32_t future1 = 0 ;
  static uint32_t fut1 = 0 ;
  if (Led1 & MILLIS >= fut1) // если прошло время и светодиод еще горит
    digitalWrite(Led1_pin, Led1 = 0); // то выключим его
  if (MILLIS >= future1) {
    future1 = MILLIS + 200 ;
    btn1 = btn1 << 1 | digitalRead(btn1_pin);
    if ((btn1 & 3) == 2) { //       если нажата клавиша (переход с 1 в 0)
      if (!Led1) { // и светодиод не горит
        fut1 = MILLIS + 5000 ; // то выставим время на 5 секунд
        digitalWrite(Led1_pin, Led1 = 1)   ; //и зажем
      }
      else // а иначе
        digitalWrite(Led1_pin, Led1 = 0)   ; //потушим
    }
  }
  //#2 200 миллисекунд вычислит. поток 2
  static uint32_t future2 = 0 ;
  static uint32_t fut2 = 0 ;
  if (Led2 & MILLIS >= fut2) // если прошло время и светодиод еще горит
    digitalWrite(Led2_pin, Led2 = 0); // то выключим его
  if (MILLIS >= future2) {
    future2 = MILLIS + 200 ;
    btn2 = btn2 << 1 | digitalRead(btn1_pin);
    if ((btn2 & 3) == 2) { //       если нажата клавиша (переход с 1 в 0)
      if (!Led2) { // и светодиод не горит
        fut2 = MILLIS + 5000 ; // то выставим время на 5 секунд
        digitalWrite(Led2_pin, Led2 = 1)   ; //и зажем
      }
      else // а иначе
        digitalWrite(Led2_pin, Led2 = 0)   ; //потушим
    }
  }
}
Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

qwone, в твоем говнокоде нет смысла разбираться, пока ты не исправишь в нем ошибки.