Я правильно понял, что надо в приведенный код длинное нажатие дописать просто?
Если так, то я бы типа такого сделал:
PHP код:
#include <avr/interrupt.h>
#include <avr/io.h>
#define BUTTON 2
#define RELAY 3
#define PAUSE 4
byte time=0;
boolean state=false;
boolean a=false;
ISR(TIMER1_COMPA_vect)
{
TCNT1H=0x00;
TCNT1L=0x00;
if (digitalRead(BUTTON) == LOW)
{
time++;
if(time>PAUSE && !a)
{
if(!state)
{
digitalWrite(RELAY, HIGH);
state=true;
a=true;
}
else
{
digitalWrite(RELAY, LOW);
state=false;
a=true;
}
}
}
}
void setup()
{
pinMode(RELAY,OUTPUT);
pinMode(BUTTON,INPUT);
digitalWrite(BUTTON, HIGH); //подключить внутренний подтягивающий резистор
TCCR1A=0x00;
TCCR1B=0x04;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x7A;
OCR1AL=0x12;
TIMSK1=0x02;
}
void loop()
{
if (digitalRead(BUTTON) == HIGH)
{
a=false;
time=0;
}
}