Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. float photoVal;
  2. const int ledPIN = 7;
  3.  
  4. void setup()
  5. {
  6. Serial.begin(9600);
  7. enableADC();
  8. PORTD |= (1<<2); // internal pullup pin 2
  9. pinMode(ledPIN, OUTPUT);
  10. timerInterrupt();
  11. setButtonInterrupt();
  12. }
  13.  
  14. void loop()
  15. {
  16.  
  17. delay(1000);
  18.  
  19. }
  20.  
  21. //timer interrrupt
  22. ISR(TIMER1_COMPA_vect) {
  23.  
  24. static byte state = LOW;
  25. static int counter = 0;
  26. counter++;
  27. if (counter >= photoVal)
  28. {
  29. state = !state;
  30. digitalWrite(ledPIN, state);
  31. counter = 0;
  32. }
  33.  
  34. }
  35. //button interrupt
  36. ISR(INT0_vect) {
  37. photoVal = manualAnalogRead() + 100; // legger til 100 for å gi en minsteverdi
  38. Serial.print(photoVal);
  39. Serial.print("\n");
  40. }
  41.  
  42.  
  43.  
  44. void timerInterrupt() {
  45. cli();
  46. //Clear registers
  47. TCCR1A = 0;
  48. TCCR1B = 0;
  49. TCNT1 = 0;
  50.  
  51. //Timer control B
  52. //Set timer speed (prescaler)
  53. TCCR1B |= (1 << CS12);
  54. //Enable timer compare mode
  55. TCCR1B |= (1 << WGM12);
  56.  
  57. //Set compare value
  58. OCR1A = 16000000 / 256 / 1000;
  59.  
  60. //Enable compare interrupt
  61. TIMSK1 |= (1 << OCIE1A);
  62.  
  63. sei();
  64. }
  65.  
  66. void setButtonInterrupt() {
  67. cli();
  68. EICRA = (1 << ISC01); //ISC00 = CHANGE, ISC01 = FALLING(?)
  69. EIMSK |= (1 << INT0); //INT0 = PIN 2
  70. sei();
  71. }
  72.  
  73. float manualAnalogRead()
  74. {
  75.  
  76. ADCSRA |= (1 << 6);
  77. while (ADCSRA & (1 << 6));
  78.  
  79. int val = ADCL;
  80. val |= (ADCH << 8);
  81.  
  82.  
  83.  
  84. float r = val + 0.00;
  85.  
  86. return r;
  87. }
  88. void enableADC() {
  89. //Setter bit 7 til 1
  90. ADCSRA |= (1 << 7);
  91.  
  92. //XXXX0000 = A0
  93. ADMUX &= ~0xF;
  94.  
  95. //bit 6 aka REFS0 til 1, intern reference
  96. ADMUX |= (1 << 6);
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement