Compare commits
2 commits
6d4965095d
...
4dfb136693
Author | SHA1 | Date | |
---|---|---|---|
4dfb136693 | |||
f5ae34863b |
|
@ -98,18 +98,42 @@
|
||||||
uint32_t count_all = 0;
|
uint32_t count_all = 0;
|
||||||
unsigned long lastTime = millis();
|
unsigned long lastTime = millis();
|
||||||
|
|
||||||
void entprellung( volatile uint8_t *port, uint8_t maske ) {
|
#define debounce( port, pin ) \
|
||||||
uint8_t port_puffer;
|
({ \
|
||||||
uint8_t entprellungs_puffer;
|
static uint8_t flag = 0; /* new variable on every macro usage */ \
|
||||||
|
uint8_t i = 0; \
|
||||||
|
\
|
||||||
|
if( flag ){ /* check for key release: */ \
|
||||||
|
for(;;){ /* loop ... */ \
|
||||||
|
if( !(port & 1<<pin) ){ /* ... until key pressed or ... */ \
|
||||||
|
i = 0; /* 0 = bounce */ \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
_delay_us( 98 ); /* * 256 = 25ms */ \
|
||||||
|
if( --i == 0 ){ /* ... until key >25ms released */ \
|
||||||
|
flag = 0; /* clear press flag */ \
|
||||||
|
i = 0; /* 0 = key release debounced */ \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}else{ /* else check for key press: */ \
|
||||||
|
for(;;){ /* loop ... */ \
|
||||||
|
if( (port & 1<<pin) ){ /* ... until key released or ... */ \
|
||||||
|
i = 0; /* 0 = bounce */ \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
_delay_us( 98 ); /* * 256 = 25ms */ \
|
||||||
|
if( --i == 0 ){ /* ... until key >25ms pressed */ \
|
||||||
|
flag = 1; /* set press flag */ \
|
||||||
|
i = 1; /* 1 = key press debounced */ \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
i; /* return value of Macro */ \
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
for( entprellungs_puffer=0 ; entprellungs_puffer!=0xff ; ) {
|
|
||||||
entprellungs_puffer<<=1;
|
|
||||||
port_puffer = *port;
|
|
||||||
_delay_us(150);
|
|
||||||
if( (*port & maske) == (port_puffer & maske) )
|
|
||||||
entprellungs_puffer |= 0x01;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Global Variable to Track Deep Sleep
|
// Global Variable to Track Deep Sleep
|
||||||
|
@ -244,9 +268,9 @@ uint8_t calcEepromAddr(uint16_t framecounter) {
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
#ifndef HAS_MANNLCOUNTER
|
#ifndef HAS_MANNLCOUNTER
|
||||||
// Initialize Sleep Timer
|
// Initialize Sleep Timer
|
||||||
init_wdt();
|
init_wdt();
|
||||||
PRR = bit(PRTIM1);
|
PRR = bit(PRTIM1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef RF_LORA
|
#ifdef RF_LORA
|
||||||
|
@ -415,19 +439,23 @@ void loop()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAS_MANNLCOUNTER
|
#ifdef HAS_MANNLCOUNTER
|
||||||
|
|
||||||
|
pinMode(ALARM_PIN, INPUT_PULLUP);
|
||||||
|
// FIXME Timer interrupt
|
||||||
while(millis() - lastTime < 60000){
|
while(millis() - lastTime < 60000){
|
||||||
entprellung( &PINA, (1<<PINA0) ); // ggf. Prellen abwarten
|
|
||||||
if( PINA & (1<<PINA0) ) // dann stabilen Wert einlesen
|
if( debounce( PINA, PA0 ) ){
|
||||||
{
|
|
||||||
count_all++;
|
|
||||||
count_min++;
|
count_min++;
|
||||||
|
count_all++;
|
||||||
|
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastTime = millis();
|
lastTime = millis();
|
||||||
// nach 60 sek
|
|
||||||
data.count_all=count_all;
|
data.count_all=count_all;
|
||||||
data.count_min=count_min;
|
data.count_min=count_min;
|
||||||
|
count_min=0;
|
||||||
|
// nach 60 sek
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue