Guest User

Untitled

a guest
Dec 13th, 2011
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.77 KB | None | 0 0
  1. #include <RemoteReceiver.h>
  2. #include <RemoteTransmitter.h>
  3.  
  4. #include <SensorReceiver.h>
  5. #include <SensorTransmitter.h>
  6.  
  7. #include <InterruptChain.h>
  8.  
  9. #define SEN_WAIT_LED 3
  10. #define REM_WAIT_LED 4
  11. #define SEN_TRANS_LED 5
  12. #define REM_TRANS_LED 13
  13.  
  14. #define TRANSMITTER_PIN 11
  15.  
  16. BlokkerTransmitter blokkerTransmitter(11);
  17. ActionTransmitter actionTransmitter(11);
  18. KaKuTransmitter kakuTransmitter(11);
  19.  
  20. unsigned long actionAOn = actionTransmitter.getTelegram(1,'A',true);
  21. unsigned long actionAOff = actionTransmitter.getTelegram(1,'A',false);
  22. unsigned long actionBOn = actionTransmitter.getTelegram(1,'B',true);
  23. unsigned long actionBOff = actionTransmitter.getTelegram(1,'B',false);
  24. unsigned long actionCOn = actionTransmitter.getTelegram(1,'C',true);
  25. unsigned long actionCOff = actionTransmitter.getTelegram(1,'C',false);
  26. unsigned long actionDOn = actionTransmitter.getTelegram(1,'D',true);
  27. unsigned long actionDOff = actionTransmitter.getTelegram(1,'D',false);
  28.  
  29. unsigned long blokkerDOn = blokkerTransmitter.getTelegram(8,true);
  30. unsigned long blokkerDOff = blokkerTransmitter.getTelegram(8,false);
  31.  
  32. unsigned long kakuO10On = kakuTransmitter.getTelegram('O',10,true);
  33. unsigned long kakuO10Off = kakuTransmitter.getTelegram('O',10,false);
  34.  
  35. void setup() {
  36.   pinMode(SEN_WAIT_LED, OUTPUT);
  37.   pinMode(REM_WAIT_LED, OUTPUT);
  38.   pinMode(SEN_TRANS_LED, OUTPUT);
  39.   pinMode(REM_TRANS_LED, OUTPUT);
  40.  
  41.   // When no signal has been received, the LED is lit.
  42.   digitalWrite(SEN_TRANS_LED, HIGH);  
  43.  
  44.   RemoteReceiver::init(-1, 3, processCode);
  45.  
  46.   // Again, interrupt -1 to indicate you will call the interrupt handler with InterruptChain
  47.   SensorReceiver::init(-1, retransmit);
  48.  
  49.   // On interrupt, call the interrupt handlers of remote and sensor receivers
  50.   InterruptChain::addInterruptCallback(0, RemoteReceiver::interruptHandler);
  51.   InterruptChain::addInterruptCallback(0, SensorReceiver::interruptHandler);
  52. }
  53.  
  54. void loop() {
  55. }
  56.  
  57. void processCode(unsigned long receivedCode, unsigned int period) {
  58.   // Make RemoteReceiver the exclusive interrupt handler.
  59.   // RemoteReceiver::isReceiving() requires "normal" handling,
  60.   // but interference from SensorReceiver, which messes with interrupts
  61.   // as well, should be avoided.
  62.   attachInterrupt(0, RemoteReceiver::interruptHandler, CHANGE);
  63.  
  64.   interrupts();
  65.  
  66.   digitalWrite(REM_WAIT_LED, HIGH);
  67.   // Wait for a free ether
  68.   while(RemoteReceiver::isReceiving());
  69.   digitalWrite(REM_WAIT_LED, LOW);
  70.  
  71.   // Ether is free.
  72.  
  73.   // Flash LED when transmitting.
  74.   digitalWrite(REM_TRANS_LED, HIGH);
  75.  
  76.   for (byte i = 0; i < 2; i++) {
  77.     if (RemoteTransmitter::isSameCode(actionAOn, receivedCode)) {
  78.       blokkerTransmitter.sendSignal(5,true);
  79.     } else if (RemoteTransmitter::isSameCode(actionAOff, receivedCode)) {
  80.       blokkerTransmitter.sendSignal(5,false);
  81.     } else if (RemoteTransmitter::isSameCode(actionBOn, receivedCode)) {
  82.       blokkerTransmitter.sendSignal(6,true);
  83.     } else if (RemoteTransmitter::isSameCode(actionBOff, receivedCode)) {
  84.       blokkerTransmitter.sendSignal(6,false);
  85.     } else if (RemoteTransmitter::isSameCode(actionCOn, receivedCode)) {
  86.       blokkerTransmitter.sendSignal(7,true);
  87.     } else if (RemoteTransmitter::isSameCode(actionCOff, receivedCode)) {
  88.       blokkerTransmitter.sendSignal(7,false);
  89.     } else if (RemoteTransmitter::isSameCode(actionDOn, receivedCode) || RemoteTransmitter::isSameCode(blokkerDOn, receivedCode) || RemoteTransmitter::isSameCode(kakuO10On, receivedCode)) {
  90.       blokkerTransmitter.sendSignal(5,true);
  91.       blokkerTransmitter.sendSignal(6,true);
  92.       blokkerTransmitter.sendSignal(7,true);
  93.     } else if (RemoteTransmitter::isSameCode(actionDOff, receivedCode) || RemoteTransmitter::isSameCode(blokkerDOff, receivedCode) || RemoteTransmitter::isSameCode(kakuO10Off, receivedCode)) {
  94.       blokkerTransmitter.sendSignal(5,false);
  95.       blokkerTransmitter.sendSignal(6,false);
  96.       blokkerTransmitter.sendSignal(7,false);
  97.     }
  98.   }
  99.  
  100.   // Flash LED when transmitting.
  101.   digitalWrite(REM_TRANS_LED, LOW);
  102.  
  103.   noInterrupts();  
  104.  
  105.   // Re-enable the interrupt chain.
  106.   InterruptChain::enable(0);
  107. }
  108.  
  109.  
  110. void retransmit(byte *data) {  
  111.   // Data received
  112.  
  113.   // Wait a second after a receiving. There's little point for decoding and sending the same signal multiple times.
  114.   InterruptChain::disable(0);
  115.   interrupts(); // delay() requires that interrupts are enabled
  116.  
  117.   digitalWrite(SEN_WAIT_LED, HIGH);
  118.   delay(1000);    
  119.   digitalWrite(SEN_WAIT_LED, LOW);
  120.  
  121.   // Flash LED when transmitting.
  122.   digitalWrite(SEN_TRANS_LED, HIGH);
  123.  
  124.   // Transmit signal. Note: this is a static method, no object required!
  125.   SensorTransmitter::sendPackage(TRANSMITTER_PIN, data);
  126.  
  127.   digitalWrite(SEN_TRANS_LED, LOW);
  128.  
  129.   noInterrupts();
  130.   InterruptChain::enable(0);    
  131. }
  132.  
Advertisement
Add Comment
Please, Sign In to add comment