// seta
detector infrarojos //Código SIRCS de SONY //28-11-2011 //xsetaseta@gmail.com // 1Logico=110 0Logico=60 #define xT4 190 #define xT5 240 #define xT3 140 #define xT15 75 byte datos[20]; byte x; byte x1; byte comando; byte direccion; int xx; void setup() { Serial.begin(9600); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(11, INPUT); pinMode(12, INPUT); //devolver codigo } void loop() { if((x=ReadIR())==0) { if(comando==0) digitalWrite(2, HIGH); if(comando==1) digitalWrite(2, LOW); if(comando==3) digitalWrite(3, HIGH); if(comando==4) digitalWrite(3, LOW); if(comando==6) digitalWrite(4, HIGH); if(comando==7) digitalWrite(4, LOW); Serial.println("--"); Serial.print("-Comando="); Serial.print(comando,DEC); Serial.print("-Direccion="); Serial.print(direccion,DEC); } else { if(x!=1)Serial.print("E"); } } //Valor retornado en comando y direccion //Si existe error retorna mayor de 0, y valor correcto retorna 0 //si retorna 1 significa tiempo de espera excesivo int ReadIR() { xx=400; while(xx>1) { xx--; if (digitalRead(11)==LOW) { x1=0; while(digitalRead(11)==LOW) { x1++; for(xx=0;xx<15;xx++); } if(x1<xT4 || x1>xT5) goto error; datos[0]=x1; for(x=1;x<13;x++) { x1=0; while(digitalRead(11)==HIGH) { x1++; for(xx=0;xx<15;xx++); } x1=0; while(digitalRead(11)==LOW) { x1++; for(xx=0;xx<15;xx++); if(x1>xT3)goto error; } datos[x]=x1; } comando=0; for(x=7;x>0;x--) if(datos[x]>xT15) comando = (comando << 1) | 1; else comando <<= 1; direccion=0; for(x=12;x>7;x--) if(datos[x]>xT15) direccion = (direccion << 1) | 1; else direccion <<= 1; // for(x=0;x<13;x++) Serial.println(datos[x], DEC); goto salto; error: //Serial.print("E-"); //Serial.print(x1,DEC); return x1; salto: return 0; } return 1; } } |