Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <avr/delay.h>
  3.  
  4. #define MIN(a, b) (a < b) ? a : b
  5. #define MAX(a, b) (a > b) ? a : b
  6. #define BTN(id) (0xFF ^ (1 << id))
  7.  
  8. #define RGBDOWN(dest, src) {\
  9. src = MAX(src - 1, 0);\
  10. dest = levels[src];\
  11. break;\
  12. }
  13.  
  14. #define RGBUP(dest, src) {\
  15. src = MIN(src + 1, 7);\
  16. dest = levels[src];\
  17. break;\
  18. }
  19.  
  20. int16_t levels[] = {
  21. 255 - 0,
  22. 255 - 255 * 0.1429,
  23. 255 - 255 * 0.2857,
  24. 255 - 255 * 0.4286,
  25. 255 - 255 * 0.5714,
  26. 255 - 255 * 0.7142,
  27. 255 - 255 * 0.8571,
  28. 255 - 255
  29. };
  30.  
  31. int main(void) {
  32. TCCR0|=(1<<WGM00)|(1<<WGM01)|(1<<COM01)|(0<<CS02)|(0<<CS01)|(1<<CS00);
  33. TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
  34. TCCR1B|=(1<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);
  35. ICR1=255;
  36. DDRB |= (1 << PB3);
  37. DDRD |= (1 << PD5) | (1 << PD4);
  38. DDRA = 0x00;
  39. PORTA = 0xFF;
  40.  
  41. int rLvl = 0;
  42. int gLvl = 0;
  43. int bLvl = 0;
  44. OCR0 = levels[rLvl];
  45. OCR1B = levels[gLvl];
  46. OCR1A = levels[bLvl];
  47.  
  48. uint32_t counter = 0;
  49. uint32_t lastDebounceTime = 0;
  50. uint32_t debounceDelay = 10000;
  51. int buttonState = 0;
  52. int lastButtonState = 0;
  53.  
  54. while(1) {
  55. counter++;
  56. int reading = PINA;
  57. if (reading != lastButtonState) {
  58. lastDebounceTime = counter;
  59. }
  60. if ((counter - lastDebounceTime) > debounceDelay) {
  61. if (reading != buttonState) {
  62. buttonState = reading;
  63. switch (PINA) {
  64. case BTN(0): RGBDOWN(OCR0, rLvl);
  65. case BTN(1): RGBUP(OCR0, rLvl);
  66. case BTN(2): RGBDOWN(OCR1B, gLvl);
  67. case BTN(3): RGBUP(OCR1B, gLvl);
  68. case BTN(4): RGBDOWN(OCR1A, bLvl);
  69. case BTN(5): RGBUP(OCR1A, bLvl);
  70. }
  71. }
  72. }
  73. lastButtonState = reading;
  74. }
  75. return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement