таймер с кнопкой вкл. выкл
- Войдите на сайт для отправки комментариев
Ср, 02/11/2016 - 15:25
алгоритм такой после нажатия кнопки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);
}
Ощущаю некоторую недосказанность в теме (и в скетче)...
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); }вот так надо оформлять
я хотел чтоб мне помогли усовершенствовать скетч
класс титановый велосипед для тактовой кнопки.
я хотел чтоб мне помогли усовершенствовать скетч
А можно Ваши хотелки поподробнее? Цель усовершенствования? Что именно не устравивает в нынешнем?
добавить таймер к данному скетчу
добавить таймер к данному скетчу
Простите, я ещё раз напишу, но больше не буду.
Если Вы хотите помощи, потрудитесь объяснять что Вам нужно понятно и подробно.
Вот что значит "добавить таймер"? Для чего его добавлять и что этот таймер должен делать?
Пока же Вам можно лишь посоветовать "ну, купите таймер и примотайте его скотчем к ардуине".
Если Вы не хотите обяснять что Вам нужно подробно и понятно, не удивляйтесь, что Вам либо вовсе не ответят, либо постебаются как про скотч выше.
Алгоритм такой после нажатия кнопки1 включается реле1 и запускается таймер на 3 часа , и выключается сам и может выключиться по нажатию кнопки и так со всеми.
Просто в данном скетче установленна защита от дребежания кнопки и надо добавить к нему после нажатия кнопки включается реле, запустился таймер на 3 часа и по окончанию он выключает реле, но реле с таймером можно выключвить с помощью тойже кнопки.
я хотел чтоб мне помогли усовершенствовать скетч
Что там соверщенствовать? Сейчас это просто клочек непонятно чего!
Могу проедложить ТРИ пути:
1. Пойти в институт и может быть там смогуть тебя чему-то научить
2. Напрячь мозг и попытаться выучить это самостоятельно (информации сейчас в отличии от 70-80х годов прошлого столетия не море а просто океан)
3. Заплатить денег тем у кого есть мозги, знания и свободное время......
PS - любая задача начинается с ТЗ - технического задания.
И самое главное , что если вам "нарисуют" код, то вы в нем разберетесь. Вот как в этом. Там только на 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) ; //потушим } } }qwone, в твоем говнокоде нет смысла разбираться, пока ты не исправишь в нем ошибки.