document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. //#define _DOTTIME 100
  5. #define LED PB2
  6. #define HALL PA3
  7. #define LDR PA2
  8. #define BUT PA7
  9.  
  10. #define BUT_PRESS !(PINA & (1<<PA7))
  11.  
  12. #define output(directions,pin) (directions |= pin) // set port direction for output
  13. #define set(port,pin) (port |= pin) // set port pin
  14. #define clear(port,pin) (port &= (~pin)) // clear port pin
  15. #define pin_test(pins,pin) (pins & pin) // test for port pin
  16. #define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set
  17. #define bit_delay_time 102 // bit delay for 9600 with overhead
  18. #define bit_delay() _delay_us(bit_delay_time) // RS232 bit delay
  19. #define half_bit_delay() _delay_us(bit_delay_time/2) // RS232 half bit delay
  20. #define char_delay() _delay_ms(10) // char delay
  21.  
  22. uint8_t hallVal;
  23. uint8_t lightVal;
  24.  
  25. void blinkFast(uint8_t);
  26. void blinkSlow(uint8_t);
  27.  
  28. int main (void)
  29. {
  30.     DDRB |= (1<<LED); //set as output
  31.     PORTA |= (1<<BUT); //pull up enabled
  32.     //hall as input (ADC)
  33.     //ldr as input (ADC)
  34.    
  35.     //init A/D
  36.     ADMUX = (0 << REFS1) | (0 << REFS0) // Vcc ref
  37.     | (0 << ADLAR); // right adjust
  38.    
  39.     ADCSRA = (1 << ADEN) // enable
  40.     | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // prescaler /128
  41.  
  42.     while(1){
  43.        
  44.         ADMUX =  (0 << MUX5)| (0 << MUX4)| (0 << MUX3) | (0 << MUX2) | (1 << MUX1) | (0 << MUX0); // ADC2 LDR
  45.        
  46.         ADCSRA |= (1 << ADSC);
  47.         while (ADCSRA & (1 << ADSC))
  48.             ;
  49.         lightVal=ADC;
  50.        
  51.         ADMUX =  (0 << MUX5)| (0 << MUX4)| (0 << MUX3) | (0 << MUX2) | (1 << MUX1) | (1 << MUX0); // ADC3 HALL
  52.        
  53.         ADCSRA |= (1 << ADSC);
  54.         while (ADCSRA & (1 << ADSC))
  55.             ;
  56.         hallVal=ADC;
  57.        
  58.         if (hallVal>100)
  59.             blinkSlow(5);
  60.         if (lightVal<100)
  61.             blinkFast(2);
  62.         _delay_ms(200);
  63.        
  64.     }
  65. }
  66.  
  67. void blinkSlow(uint8_t repeats){
  68.     int i=0;
  69.     for (i=0; i<repeats;i++){
  70.         PORTB |= (1<<LED);
  71.         _delay_ms(500);
  72.         PORTB &= ~(1<<LED);
  73.         _delay_ms(500);
  74.     }
  75. }
  76.  
  77. void blinkFast(uint8_t repeats){
  78.     int i=0;
  79.     for (i=0; i<repeats;i++){
  80.         PORTB |= (1<<LED);
  81.         _delay_ms(100);
  82.         PORTB &= ~(1<<LED);
  83.         _delay_ms(100);
  84.     }
  85. }
');