Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- // tombol ok 50168955 - 2FD847B
- |DIL 8 | Arduino|
- |------|--------|
- | 1 | | reset
- | 2 | 3 | Analog in / digial in or out
- | 3 | 4 | Analog in / digial in or out
- | 4 | | GND
- | 5 | 0 | PWM / digial in or out
- | 6 | 1 | PWM / digial in or out
- | 7 | 2 | Analog in / digial in or out
- | 8 | | VCC
- *---------------*
- Stat : L1 L2
- 0 : 0 0
- 1 : 1 0
- 2 : 0 1
- */
- /* SATU KODE REMOTE AJA DECH...RRRIBED */
- #include <IRTinyHash.h> // Hash Unique Code
- #include <EEPROM.h>
- #define CONF_ADDR 32
- #define LAST_ADDR 128
- const unsigned long MIN_IR = 0xFFFFF;
- const unsigned long MAX_IR = 0xFFFFFFFF;
- unsigned long confTimer = 0;
- unsigned long confLimit = 5555;
- byte confCounter = 0;
- #define IR_SENSOR PORTB0
- #define IR_PIN 0 // PORTB0
- #define LAMP1PIN PORTB1
- #define PUSHPIN PORTB2
- #define PUSH_PIN 2
- #define LEDPIN PORTB3
- #define LAMP2PIN PORTB4
- #define LAMP1ON { PORTB &=~(1<<LEDPIN); PORTB |= (1<<LAMP1PIN); }
- #define LAMP1OF PORTB &=~(1<<LAMP1PIN)
- #define LAMP2ON PORTB |= (1<<LAMP2PIN)
- #define LAMP2OF { PORTB &=~(1<<LAMP2PIN); PORTB |= (1<<LEDPIN); }
- IRrecv irrecv(IR_PIN);
- decode_results results;
- unsigned long resValue = 0;
- volatile boolean resCode = false;
- volatile boolean isSkip = false;
- unsigned long tmpVal = 0, oldVal = 0;
- volatile unsigned long OKBUTTON = 0;
- volatile boolean isConfiged = false;
- volatile byte lampPos = 1;
- volatile boolean isPro = true;
- volatile boolean diReset = false;
- volatile unsigned long durasi = 0;
- const unsigned long maxDurasi = 4000;
- const unsigned long idleTimer = 60000;
- unsigned long idleCount = 0;
- void(* ReStart) (void) = 0;
- void setup() {
- DDRB |= (1<<LEDPIN);
- DDRB &=~(1<<PUSHPIN);
- DDRB &=~(1<<IR_SENSOR);
- DDRB |= (1<<LAMP1PIN);
- DDRB |= (1<<LAMP2PIN);
- LAMP1OF; LAMP2OF;
- /*
- EEPROM_writelong(CONF1_ADDR, 0);
- EEPROM_writelong(CONF2_ADDR, 0);
- EEPROM_writeint(LAST_ADDR, 1);
- */
- tmpVal = EEPROM_readlong(CONF_ADDR);
- if(tmpVal>MIN_IR && tmpVal<MAX_IR) {
- OKBUTTON = tmpVal;
- isConfiged = true;
- }
- _kedipLed(1);
- if(digitalRead(PUSH_PIN)==HIGH) {
- while(digitalRead(PUSH_PIN)==HIGH) {
- _kedipLed(1);
- }
- }
- if(isConfiged) {
- lampPos = EEPROM_readint(LAST_ADDR);
- isPro = false;
- } else {
- EEPROM_writeint(LAST_ADDR, 1);
- _kedip(3);
- LAMP1ON;
- }
- irrecv.enableIRIn();
- };
- void loop() {
- if(irrecv.decode(&results)) {
- resValue = results.value;
- if(resValue>MIN_IR && resValue<MAX_IR) resCode = true;
- }
- if(resCode) { // start resCode
- resCode = false;
- if(isConfiged && resValue==OKBUTTON) {
- lampPos++;
- idleCount = 0;
- isSkip = true;
- if(lampPos>2) lampPos = 0;
- EEPROM_writeint(LAST_ADDR, lampPos);
- switch(lampPos) {
- case 0: LAMP2OF; break;
- case 1: LAMP1ON; break;
- case 2: LAMP1OF; LAMP2ON; break;
- }
- _delay(250);
- }
- if(!isConfiged && !isSkip) { // start belum diconfig
- oldVal = resValue;
- confTimer = millis();
- irrecv.resume();
- while( millis()-confTimer < confLimit ) { // start while
- if(irrecv.decode(&results)) { // strat if(irrecv.decode
- resValue = results.value;
- if(resValue>MIN_IR && resValue<MAX_IR) { //start if(resValue>MIN_IR
- tmpVal = resValue;
- if(tmpVal==oldVal) {
- confCounter++;
- } else {
- confCounter = 1;
- oldVal = tmpVal;
- }
- } // end if(resValue>MIN_IR
- _delay(100);
- irrecv.resume();
- } // end if(irrecv.decode
- if(confCounter>7) break;
- } // end while
- if(confCounter>7) {
- OKBUTTON = tmpVal;
- isConfiged = true;
- EEPROM_writelong(CONF_ADDR, tmpVal);
- EEPROM_writeint(LAST_ADDR, 1);
- LAMP2OF; LAMP1OF; _delay(150);
- _kedip(2);
- _delay(2000);
- lampPos = 1;
- isPro = false;
- }
- confCounter = 0;
- } // end belum diconfig
- if(isSkip) isSkip = false;
- irrecv.resume();
- } // end resCode
- if(digitalRead(PUSH_PIN)==HIGH) {
- durasi = 0;
- confTimer = millis();
- while(digitalRead(PUSH_PIN)==HIGH) {
- if( millis()-confTimer > maxDurasi) break;
- _delay(20);
- }
- durasi = millis() - confTimer;
- if(durasi>maxDurasi) diReset = true;
- else {
- isPro = false;
- lampPos++;
- if(lampPos>2) lampPos = 0;
- }
- }
- if(!isPro) {
- isPro = true;
- idleCount = 0;
- if(isConfiged) EEPROM_writeint(LAST_ADDR, lampPos);
- switch(lampPos) {
- case 0: LAMP2OF; break;
- case 1: LAMP1ON; break;
- case 2: LAMP1OF; LAMP2ON; break;
- }
- _delay(250);
- irrecv.resume();
- }
- if(diReset) {
- EEPROM_writelong(CONF_ADDR, 0);
- EEPROM_writeint(LAST_ADDR, 1);
- LAMP1OF; LAMP2OF; _delay(150);
- _kedip(1);
- _delay(1500);
- ReStart();
- }
- if(!lampPos) {
- if(!idleCount)
- idleCount = millis();
- else {
- if(millis()-idleCount>=idleTimer) {
- PORTB &=~(1<<LEDPIN); _delay(450);
- PORTB |= (1<<LEDPIN); _delay(250);
- PORTB &=~(1<<LEDPIN); _delay(250);
- PORTB |= (1<<LEDPIN); _delay(250);
- PORTB &=~(1<<LEDPIN); _delay(450);
- PORTB |= (1<<LEDPIN);
- idleCount = millis();
- }
- }
- }
- };
- unsigned int EEPROM_readint(int address) {
- unsigned int word = word(EEPROM.read(address), EEPROM.read(address+1));
- return word;
- };
- void EEPROM_writeint(int address, int value) {
- EEPROM.write(address,highByte(value));
- EEPROM.write(address+1 ,lowByte(value));
- };
- unsigned long EEPROM_readlong(int address) {
- unsigned long dword = EEPROM_readint(address);
- dword = dword << 16;
- dword = dword | EEPROM_readint(address+2);
- return dword;
- };
- void EEPROM_writelong(int address, unsigned long value) {
- EEPROM_writeint(address+2, word(value));
- value = value >> 16;
- EEPROM_writeint(address, word(value));
- };
- void _kedip(byte x) {
- for(byte i=0;i<x;i++) {
- LAMP1ON; _delay(150);
- LAMP1OF; _delay(150);
- }
- }
- void _kedipLed(byte x) {
- for(byte i=0;i<x;i++) {
- PORTB |= (1<<LEDPIN); _delay(150);
- PORTB &=~(1<<LEDPIN); _delay(150);
- }
- }
- void _delay(unsigned long delayTime) {
- unsigned long delayStart = millis();
- while(millis()-delayStart<delayTime) {}
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement