#include <avr/io.h>
#include <util/delay.h>
//#define _DOTTIME 100
#define LED PB2
#define HALL PA3
#define LDR PA2
#define BUT PA7
#define BUT_PRESS !(PINA & (1<<PA7))
#define output(directions,pin) (directions |= pin) // set port direction for output
#define set(port,pin) (port |= pin) // set port pin
#define clear(port,pin) (port &= (~pin)) // clear port pin
#define pin_test(pins,pin) (pins & pin) // test for port pin
#define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set
#define bit_delay_time 102 // bit delay for 9600 with overhead
#define bit_delay() _delay_us(bit_delay_time) // RS232 bit delay
#define half_bit_delay() _delay_us(bit_delay_time/2) // RS232 half bit delay
#define char_delay() _delay_ms(10) // char delay
uint8_t hallVal;
uint8_t lightVal;
void blinkFast(uint8_t);
void blinkSlow(uint8_t);
int main (void)
{
DDRB |= (1<<LED); //set as output
PORTA |= (1<<BUT); //pull up enabled
//hall as input (ADC)
//ldr as input (ADC)
//init A/D
ADMUX = (0 << REFS1) | (0 << REFS0) // Vcc ref
| (0 << ADLAR); // right adjust
ADCSRA = (1 << ADEN) // enable
| (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // prescaler /128
while(1){
ADMUX = (0 << MUX5)| (0 << MUX4)| (0 << MUX3) | (0 << MUX2) | (1 << MUX1) | (0 << MUX0); // ADC2 LDR
ADCSRA |= (1 << ADSC);
while (ADCSRA & (1 << ADSC))
;
lightVal=ADC;
ADMUX = (0 << MUX5)| (0 << MUX4)| (0 << MUX3) | (0 << MUX2) | (1 << MUX1) | (1 << MUX0); // ADC3 HALL
ADCSRA |= (1 << ADSC);
while (ADCSRA & (1 << ADSC))
;
hallVal=ADC;
if (hallVal>100)
blinkSlow(5);
if (lightVal<100)
blinkFast(2);
_delay_ms(200);
}
}
void blinkSlow(uint8_t repeats){
int i=0;
for (i=0; i<repeats;i++){
PORTB |= (1<<LED);
_delay_ms(500);
PORTB &= ~(1<<LED);
_delay_ms(500);
}
}
void blinkFast(uint8_t repeats){
int i=0;
for (i=0; i<repeats;i++){
PORTB |= (1<<LED);
_delay_ms(100);
PORTB &= ~(1<<LED);
_delay_ms(100);
}
}