Działanie programu będzie standardowe jeśli przycisk będzie wciśnięty to odczeka 100 ms, po tym czasie ponownie sprawdzi czy przycisk jest wciśnięty. Jeśli tak to zapali diodę wbudowaną do płytki Arduino.
Program wygląda następująco:
- #include <avr/io.h>
- #include <util/delay.h>
- #define DELAY_TIME 100
- int main (void)
- {
- //Ustawienie pin 5 GPIOB jak wyjście,
- DDRB |= _BV(DDB5);
- DDRD != ~_BV(DDD7); //Ustawienie jako wejsciowy
- PORTD |= _BV(DDD7); //
- while(1) {
- if(!(PIND & (1<<PD7)))
- {
- _delay_ms(DELAY_TIME);
- if(!(PIND & (1<<PD7)))
- {
- PORTB |= _BV(PORTB5);
- _delay_ms(DELAY_TIME+100);
- }
- else
- {
- PORTB &= ~_BV(PORTB5);
- }
- }
- }
- }
Domyślnie piny w rejestrze DDRx są ustawione na zera, wobec tego nie trzeba negować poszczególnych operacji, wystarczy tylko włączyć odpowiednie wyprowadzenia.