Advertisement
justhrun

Arduino_PWLamp_AnyIR

Jul 11th, 2014
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.49 KB | None | 0 0
  1. /*
  2. // tombol ok   50168955 - 2FD847B
  3.  |DIL 8 | Arduino|
  4.  |------|--------|
  5.  |  1   |        | reset
  6.  |  2   |   3    | Analog in / digial in or out
  7.  |  3   |   4    | Analog in / digial in or out
  8.  |  4   |        | GND
  9.  |  5   |   0    | PWM / digial in or out
  10.  |  6   |   1    | PWM / digial in or out
  11.  |  7   |   2    | Analog in / digial in or out
  12.  |  8   |        | VCC
  13.  *---------------*
  14.  Stat : L1    L2
  15.    0  : 0     0
  16.    1  : 1     0
  17.    2  : 0     1
  18.   */
  19. /* SATU KODE REMOTE AJA DECH...RRRIBED */
  20.  
  21. #include <IRTinyHash.h>    // Hash Unique Code
  22. #include <EEPROM.h>
  23.  
  24. #define CONF_ADDR  32
  25. #define LAST_ADDR  128
  26. const unsigned long MIN_IR = 0xFFFFF;
  27. const unsigned long MAX_IR = 0xFFFFFFFF;
  28. unsigned long confTimer = 0;
  29. unsigned long confLimit = 5555;
  30. byte  confCounter = 0;
  31.  
  32. #define IR_SENSOR   PORTB0
  33. #define IR_PIN      0      // PORTB0
  34. #define LAMP1PIN    PORTB1
  35. #define PUSHPIN     PORTB2
  36. #define PUSH_PIN    2
  37. #define LEDPIN      PORTB3
  38. #define LAMP2PIN    PORTB4
  39.  
  40. #define LAMP1ON     { PORTB &=~(1<<LEDPIN); PORTB |= (1<<LAMP1PIN); }
  41. #define LAMP1OF     PORTB &=~(1<<LAMP1PIN)
  42.  
  43. #define LAMP2ON     PORTB |= (1<<LAMP2PIN)
  44. #define LAMP2OF     { PORTB &=~(1<<LAMP2PIN); PORTB |= (1<<LEDPIN); }
  45.  
  46. IRrecv irrecv(IR_PIN);
  47. decode_results results;
  48. unsigned long resValue = 0;
  49. volatile boolean resCode = false;
  50. volatile boolean isSkip = false;
  51.  
  52. unsigned long tmpVal = 0, oldVal = 0;
  53. volatile unsigned long OKBUTTON = 0;
  54. volatile boolean isConfiged = false;
  55.  
  56. volatile byte lampPos = 1;
  57. volatile boolean isPro = true;
  58. volatile boolean diReset = false;
  59. volatile unsigned long durasi = 0;
  60. const unsigned long maxDurasi = 4000;
  61.  
  62. const unsigned long idleTimer = 60000;
  63. unsigned long idleCount = 0;
  64.  
  65. void(* ReStart) (void) = 0;
  66.  
  67. void setup() {
  68.   DDRB |= (1<<LEDPIN);
  69.   DDRB &=~(1<<PUSHPIN);
  70.   DDRB &=~(1<<IR_SENSOR);
  71.   DDRB |= (1<<LAMP1PIN);
  72.   DDRB |= (1<<LAMP2PIN);
  73.   LAMP1OF; LAMP2OF;
  74.  
  75. /*
  76.     EEPROM_writelong(CONF1_ADDR, 0);
  77.     EEPROM_writelong(CONF2_ADDR, 0);
  78.     EEPROM_writeint(LAST_ADDR, 1);
  79. */
  80.  
  81.   tmpVal = EEPROM_readlong(CONF_ADDR);
  82.   if(tmpVal>MIN_IR && tmpVal<MAX_IR) {
  83.     OKBUTTON = tmpVal;
  84.     isConfiged = true;
  85.   }
  86.  
  87.   _kedipLed(1);
  88.  
  89.   if(digitalRead(PUSH_PIN)==HIGH) {
  90.     while(digitalRead(PUSH_PIN)==HIGH) {
  91.       _kedipLed(1);
  92.     }
  93.   }
  94.  
  95.   if(isConfiged) {
  96.     lampPos = EEPROM_readint(LAST_ADDR);
  97.     isPro = false;
  98.   } else  {
  99.     EEPROM_writeint(LAST_ADDR, 1);
  100.     _kedip(3);
  101.     LAMP1ON;
  102.   }
  103.  
  104.   irrecv.enableIRIn();
  105.  
  106. };
  107.  
  108. void loop() {    
  109.   if(irrecv.decode(&results)) {
  110.     resValue = results.value;
  111.     if(resValue>MIN_IR && resValue<MAX_IR) resCode = true;
  112.   }
  113.  
  114.   if(resCode) {    // start resCode
  115.     resCode = false;
  116.     if(isConfiged && resValue==OKBUTTON) {
  117.       lampPos++;
  118.       idleCount = 0;
  119.       isSkip = true;
  120.       if(lampPos>2) lampPos = 0;
  121.       EEPROM_writeint(LAST_ADDR, lampPos);
  122.       switch(lampPos) {
  123.         case 0: LAMP2OF; break;
  124.         case 1: LAMP1ON; break;
  125.         case 2: LAMP1OF; LAMP2ON; break;
  126.       }
  127.       _delay(250);
  128.     }
  129.  
  130.     if(!isConfiged && !isSkip) { // start belum diconfig
  131.       oldVal = resValue;
  132.       confTimer = millis();
  133.       irrecv.resume();
  134.       while( millis()-confTimer < confLimit ) { // start while
  135.         if(irrecv.decode(&results)) {  // strat if(irrecv.decode
  136.           resValue = results.value;
  137.           if(resValue>MIN_IR && resValue<MAX_IR) { //start if(resValue>MIN_IR
  138.             tmpVal = resValue;
  139.             if(tmpVal==oldVal) {
  140.               confCounter++;
  141.             } else {
  142.               confCounter = 1;
  143.               oldVal = tmpVal;
  144.             }
  145.           }  // end if(resValue>MIN_IR
  146.           _delay(100);
  147.           irrecv.resume();
  148.         }  // end if(irrecv.decode
  149.         if(confCounter>7) break;
  150.       }  // end while
  151.  
  152.       if(confCounter>7) {
  153.         OKBUTTON = tmpVal;
  154.         isConfiged = true;
  155.         EEPROM_writelong(CONF_ADDR, tmpVal);
  156.         EEPROM_writeint(LAST_ADDR, 1);
  157.         LAMP2OF; LAMP1OF; _delay(150);
  158.         _kedip(2);
  159.         _delay(2000);
  160.         lampPos = 1;
  161.         isPro = false;
  162.       }
  163.       confCounter = 0;
  164.     }    // end belum diconfig
  165.     if(isSkip) isSkip = false;
  166.     irrecv.resume();
  167.   }  // end resCode
  168.  
  169.   if(digitalRead(PUSH_PIN)==HIGH) {
  170.     durasi = 0;
  171.     confTimer = millis();
  172.     while(digitalRead(PUSH_PIN)==HIGH) {
  173.       if( millis()-confTimer > maxDurasi) break;
  174.       _delay(20);
  175.     }
  176.     durasi = millis() - confTimer;
  177.     if(durasi>maxDurasi) diReset = true;
  178.     else {
  179.       isPro = false;
  180.       lampPos++;
  181.       if(lampPos>2) lampPos = 0;
  182.     }
  183.   }
  184.    
  185.   if(!isPro) {
  186.     isPro = true;
  187.     idleCount = 0;
  188.     if(isConfiged) EEPROM_writeint(LAST_ADDR, lampPos);
  189.     switch(lampPos) {
  190.       case 0: LAMP2OF; break;
  191.       case 1: LAMP1ON; break;
  192.       case 2: LAMP1OF; LAMP2ON; break;
  193.     }
  194.     _delay(250);
  195.     irrecv.resume();
  196.   }
  197.  
  198.   if(diReset) {
  199.     EEPROM_writelong(CONF_ADDR, 0);
  200.     EEPROM_writeint(LAST_ADDR, 1);
  201.     LAMP1OF; LAMP2OF; _delay(150);
  202.     _kedip(1);
  203.     _delay(1500);
  204.     ReStart();
  205.   }
  206.  
  207.   if(!lampPos) {
  208.     if(!idleCount)
  209.       idleCount = millis();
  210.     else {
  211.       if(millis()-idleCount>=idleTimer) {
  212.         PORTB &=~(1<<LEDPIN); _delay(450);
  213.         PORTB |= (1<<LEDPIN); _delay(250);
  214.         PORTB &=~(1<<LEDPIN); _delay(250);
  215.         PORTB |= (1<<LEDPIN); _delay(250);
  216.         PORTB &=~(1<<LEDPIN); _delay(450);
  217.         PORTB |= (1<<LEDPIN);
  218.         idleCount = millis();
  219.       }
  220.     }
  221.   }
  222.  
  223. };
  224.  
  225. unsigned int EEPROM_readint(int address) {
  226.   unsigned int word = word(EEPROM.read(address), EEPROM.read(address+1));
  227.   return word;
  228. };
  229.  
  230. void EEPROM_writeint(int address, int value) {
  231.   EEPROM.write(address,highByte(value));
  232.   EEPROM.write(address+1 ,lowByte(value));
  233. };
  234.  
  235. unsigned long EEPROM_readlong(int address) {
  236.   unsigned long dword = EEPROM_readint(address);
  237.   dword = dword << 16;
  238.   dword = dword | EEPROM_readint(address+2);
  239.   return dword;
  240. };
  241.  
  242. void EEPROM_writelong(int address, unsigned long value) {
  243.   EEPROM_writeint(address+2, word(value));
  244.   value = value >> 16;
  245.   EEPROM_writeint(address, word(value));
  246. };
  247.  
  248. void _kedip(byte x) {
  249.   for(byte i=0;i<x;i++) {
  250.     LAMP1ON; _delay(150);
  251.     LAMP1OF; _delay(150);
  252.   }
  253. }
  254.  
  255. void _kedipLed(byte x) {
  256.   for(byte i=0;i<x;i++) {
  257.     PORTB |= (1<<LEDPIN); _delay(150);
  258.     PORTB &=~(1<<LEDPIN); _delay(150);
  259.   }
  260. }
  261. void _delay(unsigned long delayTime) {
  262.   unsigned long delayStart = millis();
  263.   while(millis()-delayStart<delayTime) {}
  264. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement