#include <avr/io.h>
#include <util/delay.h>
#define _DOTTIME 100 //Morse code timing is based on a dot duration
#define LED PB2 //Name for led pin
#define BUT PA7 //Name for button pin
//function prototypes
void morseSOS(void); //flashes SOS
void morseDot(void); //flashes a DOT
void morseDash(void); //flashes a Dash
void morseSpace(void); //waits a space between letters time
void morseNewWord(void); //waits a space between words time
void blink(void);
int main (void)
{
DDRB |= (1<<LED);
PORTA |= (1<<BUT);
//DDRB = 0x00; Still can see a dimm light even if not set as an output
while(1){
if (!(PINA & (1<<BUT))){
morseSOS();
morseNewWord();
}
}
}
void morseSOS(void){
morseDot();
morseDot();
morseDot();
morseSpace();
morseDash();
morseDash();
morseDash();
morseSpace();
morseDot();
morseDot();
morseDot();
}
void morseDot(void){
PORTB |= (1<<LED);
_delay_ms(_DOTTIME);
PORTB &= ~(1<<LED);
_delay_ms(_DOTTIME);
}
void morseDash(void){
PORTB |= (1<<LED);
_delay_ms(3*_DOTTIME);
PORTB &= ~(1<<LED);
_delay_ms(_DOTTIME);
}
void morseSpace(void){
_delay_ms(2*_DOTTIME);
}
void morseNewWord(void){
_delay_ms(6*_DOTTIME);
}
void blink(void){
PORTB |= (1<<LED);
_delay_ms(500);
PORTB &= ~(1<<LED);
_delay_ms(500);
}