#define pinRelay 13 //Пин реле
#define buttPin 3 //Пин кнопки
#define Delay 5000 //Задержка после нажатия кнопки
void setup() {
pinMode(buttPin, INPUT_PULLUP); //Подключить кнопку со встроенным резистором
pinMode(pinRelay, OUTPUT); //Режим пина реле, как выход
}
void loop() {
byte buttStat = digitalRead(buttPin); //считываем статус кнопки и записываем в переменную
if(buttStat == 0){ //Если кнопка нажата
uint32_t now = millis(); //Создаём локальную переменную с millis()
while (millis () - now < Delay) { //Выполняем цикл, пока millis меньше Delay
digitalWrite(pinRelay, 1); //Включаем.
digitalWrite(pinRelay, 0); //Выключаем.
}
}
}
#define pinRelay 13
#define buttPin 3
#define Delay 5000 //Лучше так не называть
void setup() {
pinMode(buttPin, INPUT_PULLUP); //Подтянуть пин к плюсу
pinMode(pinRelay, OUTPUT);
}
void loop() {
byte buttStat = digitalRead(buttPin); //не кажется лишним?
if(buttStat == 0){ //Если кнопка нажали - код ниже будет работать
uint32_t now = millis(); //Так тоже лучше не называть переменные
while (millis () - now < Delay) { //просто представим, что цикл будет работать как надо.
digitalWrite(pinRelay, 1); //Внутри цикла у Вас будет ШИМ сигнал
digitalWrite(pinRelay, 0);
}
} // а если кнопку отпустили или не нажали то мы будем выполнять только 11 строку
}
#define PIN_RELAY 13 //Пин реле
#define PIN_BUTTON 3 //Пин кнопки
#define DELAY_RELAY_ON 5000 //Задержка после нажатия кнопки
void setup() {
pinMode(PIN_BUTTON, INPUT_PULLUP); //Кнопку тянем к + питания
pinMode(PIN_RELAY, OUTPUT);
}
void loop() {
static uint32_t TimeStart;
if(!digitalRead(PIN_BUTTON) && !digitalRead(PIN_RELAY)){ //Если кнопка нажата И реле выключено
digitalWrite(PIN_RELAY, HIGH); //Включаем реле
TimeStart = millis(); //Запоминаем время включения
}
//Если реле включено и прошло заданное время
if (digitalRead(PIN_RELAY)&& (millis()-TimeStart < DELAY_RELAY_ON)) {
digitalWrite(PIN_RELAY, LOW); // реле надо выключить
}
}
#ifndef F_CPU
#define F_CPU 8000000UL
#endif
#include <avr/io.h>
#include <avr/interrupt.h>
#define PIN_RELAY PINB0 //Пин реле
#define PIN_BUTTON PINB1 //Пин кнопки
#define DELAY_RELAY_ON 5000 //Задержка после нажатия кнопки
uint16_t micro_timer = 0;
uint16_t sec_timer = 0;
void _loop() {
if(sec_timer > DELAY_RELAY_ON) {
sec_timer = 0;
PORTB &= ~(1<< PIN_RELAY);
}
else {
if(!(PINB & (1<<PIN_BUTTON)) && !sec_timer) {
sec_timer = 1;
PORTB |= (1 << PIN_RELAY); // вклчаем
}
}
}
ISR(TIMER0_COMPA_vect) {
micro_timer++;
if(micro_timer > 100) {
micro_timer = 0;
if(sec_timer) sec_timer++;
}
_loop();
}
void timer_init() {
TCCR0A = (1<<WGM01);
TCCR0B = (1<<CS01);
OCR0A = 1;
TIMSK = (1<<OCIE0A);
sei();
}
int main(void)
{
DDRB |= (1 << PIN_RELAY); // устанавлеваем как выход
PORTB &= ~(1<< PIN_RELAY); //выключаем рел
DDRB &= ~(1 << PIN_BUTTON); // устанавливаем как вход;
PORTB |= (1 << PIN_BUTTON); //подтягиваем
timer_init();//настраиваем таймерж
}
Да потому. Вы задание ТС читали?Почему же не то,что надо?
То есть реле должно включится на 2 сек, а потом выключится. А что у вас? - у вас реле включается и выключается сотни раз в секунду. Это разве одно и то же?Мне нужно чтобы один раз нажал на кнопку и на 2 или 3 секунды включалось реле а потом выключалось.
Иногда лучше направить в нужное русло, что бы человек почитал, попробовал сделать сам, чем вот так вот подать ему готовый рабочий код, в котором много всяких цифр, букв и не привычных для русскоязычного человека слов. И для новичка ничего не понятно, что может отбить всё желание кодить дальше.он первый кто хоть какой-то код скинул, да не правильный, но хотя-бы попытался
практика показывает, что если человеку дать готовый код, он ничего в нем разбирать не будет, а просто вставит в программу и тут же забудет. А когда нужно будет исправить одну запятую - снова побежит на форум.по мне наоборот лучший дать готовый код и чтоб человек в нем стал разбирать
так обычно пишут те, кто даже не пытался ничего искать. Таким тем более не надо давать готовое, иначе будет именно так, как я написал вышеА написать "я 14 дней пытаюсь, но не получатся" я тоже могу. Не за что не поверю что человек за 2 недели не нашёл, как считать кнопку и как сделать простой таймер
Говорю значит такое желания научитсяпрактика показывает, что если человеку дать готовый код, он ничего в нем разбирать не будет, а просто вставит в программу и тут же забудет. А когда нужно будет исправить одну запятую - снова побежит на форум.
Тем более он даже читать не будет ваши статьи, тут не ответят он на другом напишет форуме напишет, там помогутак обычно пишут те, кто даже не пытался ничего искать. Таким тем более не надо давать готовое, иначе будет именно так, как я написал выше