Advertisement
tomko222

Chain Oiler - ATtiny24/44/84 - tomko222

Jan 19th, 2015
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.06 KB | None | 0 0
  1. /*
  2. Chain oiler - tomko222
  3. attiny24/44/84
  4. PA0 - switch
  5. PA1, PA2, PA3 - LEDs
  6. PA7 - valve
  7. */
  8. #define F_CPU 1000000L
  9. #include <avr/io.h>
  10. #include <util/delay.h>
  11. #include <avr/eeprom.h>
  12. #include <avr/interrupt.h>
  13. void delay(int time);
  14. void ledBlink(int cont);
  15. struct mode
  16. {
  17.     volatile int wait_time;
  18.     volatile int open_time;
  19. };
  20. //modes - temp values!!!
  21. struct mode modeLow = {.wait_time = 60, .open_time = 5};
  22. struct mode modeMid = {.wait_time = 45, .open_time = 7};
  23. struct mode modeHigh = {.wait_time = 30, .open_time = 10};
  24. volatile struct mode* currentModeP;
  25. int volatile modeNumber = 0;//0 - off, 1 - modeLow, 2 - modeMid, 3 - modeHigh
  26. int volatile initializationFinished = 0;
  27. void setCurrentMode(int number);
  28. void init();
  29. int buttonPushed = 0;
  30.  
  31. void init()
  32. {
  33.     DDRA |= _BV(1) |_BV(2) |_BV(3);//LEDs - out
  34.     DDRA &= ~_BV(0);//PA0 (INT0) - switch - in
  35.     DDRA |= _BV(7);//valve - out
  36.  
  37.     //interrupts
  38.     GIMSK |= (1 << PCIE0);
  39.     PCMSK0 = (1<<PCINT0);
  40.     sei();
  41.  
  42.     ledBlink(3);
  43.     initializationFinished = 1;
  44. }
  45.  
  46. int main()
  47. {
  48.     initializationFinished = 0;
  49.     init();
  50.  
  51.     while(1)
  52.     {
  53.         if(modeNumber > 0 && modeNumber <= 3)
  54.         {
  55.             delay((*currentModeP).wait_time);//wait wait_time
  56.             PORTA |= _BV(7);//open
  57.             delay((*currentModeP).open_time);//wait open_time
  58.             PORTA &= ~_BV(7);//close
  59.         }else {
  60.             PORTA &= ~_BV(7);//close
  61.         }
  62.     }
  63.  
  64.     return 0;
  65. }
  66.  
  67. ISR(PCINT0_vect)
  68. {
  69.     if(!buttonPushed)
  70.         buttonPushed = 1;
  71.     else
  72.         buttonPushed = 0;
  73.  
  74.     if(initializationFinished == 1)
  75.     {
  76.         PORTA &= ~_BV(7);
  77.         if(buttonPushed)
  78.         {
  79.             if(modeNumber >= 0 && modeNumber < 3)
  80.             {
  81.                 setCurrentMode(++modeNumber);
  82.             }else if(modeNumber == 3)
  83.             {
  84.                 setCurrentMode(0);
  85.             }
  86.         }
  87.     }
  88. }
  89.  
  90. void delay(int time)
  91. {
  92.     while(time--)
  93.        _delay_ms(100);
  94. }
  95.  
  96. void ledBlink(int count)
  97. {
  98.     for(; count; count--)
  99.     {
  100.         _delay_ms(300);
  101.         PORTA &= ~_BV(1) & ~_BV(2) & ~_BV(3);//turn on
  102.         _delay_ms(300);
  103.         PORTA |= _BV(1) |_BV(2) |_BV(3);//turn off
  104.  
  105.     }
  106. }
  107.  
  108. void setCurrentMode(int number)
  109. {
  110.     if(number >=0 && number <=4)
  111.     {
  112.         if(number == 0)
  113.         {
  114.             PORTA &= ~_BV(7);
  115.             modeNumber = 0;
  116.             //LEDs
  117.             PORTA |= _BV(1) |_BV(2) |_BV(3);
  118.  
  119.         }else if(number == 1)
  120.         {
  121.             modeNumber = 1;
  122.             currentModeP = &modeLow;
  123.             //LEDs
  124.             PORTA |= _BV(2) |_BV(3);
  125.             PORTA &= ~_BV(1);
  126.         }else if(number == 2)
  127.         {
  128.             modeNumber = 2;
  129.             currentModeP = &modeMid;
  130.             //LEDs
  131.             PORTA |= _BV(1) |_BV(3);
  132.             PORTA &= ~_BV(2);
  133.         }else if(number == 3)
  134.         {
  135.             modeNumber = 3;
  136.             currentModeP = &modeHigh;
  137.             //LEDs
  138.             PORTA |= _BV(1) |_BV(2);
  139.             PORTA &= ~_BV(3);
  140.         }
  141.     }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement