Advertisement
babyyoda_

Interrupt

Feb 12th, 2021
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #include <IRremote.h>
  3. #define triacPulse A0
  4. #define ZCD 2           // Zero Cross Detector
  5. #define RECV_PIN 7      // IR Pin
  6.  
  7. IRrecv irrecv(RECV_PIN);
  8. decode_results results;
  9. unsigned long key_value = 0;
  10. const byte ZCDinterruptPin = 2;
  11. int x = 0;
  12. void setup() {
  13.   Serial.begin(9600);
  14.   irrecv.enableIRIn();
  15.   irrecv.blink13(false);
  16.   pinMode(ZCD, INPUT_PULLUP);
  17.   pinMode(triacPulse, OUTPUT);
  18. }
  19.  
  20. void loop() {
  21.  
  22.   if (irrecv.decode(&results)) {
  23.     if (results.value == 0XFFFFFFFF)
  24.       results.value = key_value;
  25.      
  26.     if (results.value == 0x88C000C) {   // LOW
  27.       detachInterrupt(digitalPinToInterrupt(ZCDinterruptPin));
  28.       motorLOW();
  29.     }
  30.     if (results.value == 0x88C0084) {   // MED
  31.       detachInterrupt(digitalPinToInterrupt(ZCDinterruptPin));
  32.       motorMED();
  33.     }
  34.     if (results.value == 0x880834F) {   // HIGH
  35.       detachInterrupt(digitalPinToInterrupt(ZCDinterruptPin));
  36.       motorHIGH();
  37.     }
  38.     key_value = results.value;
  39.     irrecv.resume();
  40.   }
  41. }
  42.  
  43. void motorLOW(){
  44.     attachInterrupt(digitalPinToInterrupt(ZCDinterruptPin), acon, FALLING); // attach Interrupt at PIN2
  45.     x = 6600;     // LOW
  46. }
  47. void motorMED(){
  48.     attachInterrupt(digitalPinToInterrupt(ZCDinterruptPin), acon, FALLING); // attach Interrupt at PIN2
  49.     x = 4866;     // MED
  50. }
  51. void motorHIGH(){
  52.     attachInterrupt(digitalPinToInterrupt(ZCDinterruptPin), acon, FALLING); // attach Interrupt at PIN2
  53.     x = 2533;     // HIGH
  54. }
  55.  
  56. void acon()
  57. {
  58. //  detachInterrupt(digitalPinToInterrupt(ZCDinterruptPin));
  59.   delayMicroseconds(x); // read AD0
  60.   digitalWrite(triacPulse, HIGH);
  61.   delayMicroseconds(50);  //delay 50 uSec on output pulse to turn on triac
  62.   digitalWrite(triacPulse, LOW);
  63.   detachInterrupt(digitalPinToInterrupt(ZCDinterruptPin));
  64. }
  65.  
  66.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement