/**************************************
*
*
*
**************************************/
#include <avr/wdt.h>
#include <avr/delay.h>
#define pinLed4 PD4
#define pinLed13 PB5
#define pinLed2 PD2
#define ledOn(port,pin) (port |= (1<<pin))
#define ledOff(port,pin) (port &= ~(1<<pin))
uint32_t tiempo;
uint32_t tiempo_ant_led = 0;
uint32_t intervalo = 500;
uint32_t tiempo_WD;
uint32_t tiempo_ant_WD = 0;
uint32_t intervalo_WD = 7000;
uint8_t counter;
bool ledStatus = false;
void doBlink(uint8_t pin,uint8_t anz,uint16_t onTime,uint16_t offTime){
for(uint8_t d=0; d<anz; d++){
PORTD |= (1<<pin);
_delay_ms(onTime);
PORTD &= ~(1<<pin);
_delay_ms(offTime);
}
}
void setup() {
wdt_disable();
DDRD |= (1<<pinLed2) | (1<<pinLed4);
DDRB |= (1<<pinLed13);
ledOff(PORTD, pinLed2);
ledOff(PORTD, pinLed4);
doBlink(pinLed4,2,120,875);
wdt_enable(WDTO_8S);
counter = 0;
}
void loop() {
// tiempo = millis();
// tiempo_WD = millis();
if ((millis() - tiempo_ant_led) >= intervalo){
tiempo_ant_led = millis();
counter++;
PORTB ^= (1<<pinLed13);
}
if ((millis() - tiempo_ant_WD) >= intervalo_WD){
tiempo_ant_WD = millis();
ledOn(PORTD, pinLed2);
_delay_ms(500);
ledOff(PORTD, pinLed2);
wdt_reset();
}
if(counter > 254)
counter = 0;
if(counter > 250) {
ledOff(PORTB,pinLed13);
PORTD |= (1<<pinLed4);
_delay_ms(500);
PORTD &= ~(1<<pinLed4);
while(1){}
}
}
/*
for (uint8_t d=0; d<5; d++) {
PORTB ^= (1<<pin13);
_delay_ms(500);
wdt_reset();
}
// doBlink(pinLed, 1, 250, 750);
// while(1){}
*/
/*
if(ledStatus == false){ // wenn ledStatus = FALSE
ledStatus = !ledStatus; // setze ledStatus TRUE
PORTB |= (1<<pin13); // schalte Led an Pin13 ein
} else { // sonst
ledStatus = !ledStatus; // setze ledStatus FALSE
PORTB &= ~(1<<pin13); // schalte Led an Pin13 aus
}
}
*/
/*
if(!ledStatus){ // wenn ledStatus = FALSE
PORTB &= ~(1<<pin13); // schalte led an Pin13 aus
} else { // sonst
PORTB |= (1<<pin13); // schalte Led an Pin13 ein
}
ledStatus = !ledStatus; // drehe ledStatus
// aus TRUE wird FALSE um umgekehrt
*/