Paso 6: Programa 1
#include
int RECV_PIN = A5;
int BUTTON_PIN = 12;
int STATUS_PIN = 13;
Irrecv(RECV_PIN) de IRrecv;
Irsend de IRsend;
resultados de la decode_results;
void setup()
{
Serial.Begin(9600);
irrecv.enableIRIn(); Inicio del receptor
pinMode (BUTTON_PIN, entrada);
pinMode (STATUS_PIN, salida);
}
Almacenamiento de información para el código grabado
codeType int = -1; El tipo de código
sin firmar largo codeValue; El valor del código si no cruda
unsigned int rawCodes [RAWBUF]; Las duraciones si raw
int codeLen; La longitud del código
conmutador int = 0; El estado de la palanca de RC5/6
Almacena el código para su posterior reproducción
La mayor parte de este código sólo es registro
void storeCode(decode_results *results) {}
codeType = resultados -> decode_type;
int cuenta = resultados -> rawlen;
Si (codeType == desconocido) {}
Serial.println ("recibido código desconocido, como materia prima de ahorro");
codeLen = resultados -> rawlen - 1;
Para almacenar los códigos de la materia prima:
Primer valor (gap)
Convertir de garrapatas a microsegundos
Tweak marca más corta y más espacios para cancelar hacia fuera distorsión del receptor de IR
para (int i = 1; i < = codeLen; i ++) {}
Si (i % 2) {}
Marca
rawCodes [i - 1] = resultados -> rawbuf [i] * USECPERTICK - MARK_EXCESS;
Serial.Print ("m");
}
Else {}
Espacio
rawCodes [i - 1] = resultados -> rawbuf [i] * USECPERTICK + MARK_EXCESS;
Serial.Print ("s");
}
Serial.Print (rawCodes [i - 1], DEC);
}
Serial.println("");
}
Else {}
Si (codeType == NEC) {}
Serial.Print ("recibido NEC:");
Si (resultados -> valor == repetición) {}
No se registra un valor de repetición de NEC como es inútil.
Serial.println ("repetición; ignorar.");
retorno;
}
}
else if (codeType == SONY) {}
Serial.Print ("recibido SONY:");
}
else if (codeType == RC5) {}
Serial.Print ("recibido RC5:");
}
else if (codeType == RC6) {}
Serial.Print ("recibido RC6:");
}
Else {}
Serial.Print ("codeType inesperado");
Serial.Print (codeType, DEC);
Serial.println("");
}
Serial.println (resultados -> valor);
codeValue = resultados -> valor;
codeLen = resultados -> bits;
}
}
void sendCode (int repeat) {}
Si (codeType == NEC) {}
Si {} (repetición)
irsend.sendNEC (repetir, codeLen);
Serial.println ("repetición de NEC enviado");
}
Else {}
irsend.sendNEC (codeValue, codeLen);
Serial.Print ("enviada NEC");
Serial.println (codeValue, hexagonal);
}
}
else if (codeType == SONY) {}
irsend.sendSony (codeValue, codeLen);
Serial.Print ("enviada Sony");
Serial.println (codeValue, hexagonal);
}
else if (codeType == RC5 || codeType == RC6) {}
Si (! repetir) {}
Tirón de la punta de la palanca para una nueva pulsación
Toggle = 1 - alternar;
}
Poner el bit de conmutación en el código para enviar
codeValue = codeValue & ~ (1 << (codeLen - 1));
codeValue = codeValue | (palanca << (codeLen - 1));
Si (codeType == RC5) {}
Serial.Print ("enviada RC5");
Serial.println (codeValue, hexagonal);
irsend.sendRC5 (codeValue, codeLen);
}
Else {}
irsend.sendRC6 (codeValue, codeLen);
Serial.Print ("enviada RC6");
Serial.println (codeValue, hexagonal);
}
}
else if (codeType == desconocido / * es decir, crudo * /) {}
Asumir 38 KHz
irsend.sendRaw (rawCodes, codeLen, 38);
Serial.println ("enviada crudo");
}
}
int lastButtonState;
void loop() {}
Si presiona el botón, enviar el código.
int buttonState = digitalRead(BUTTON_PIN);
Si (lastButtonState == alto & & buttonState == LOW) {}
Serial.println("Released");
irrecv.enableIRIn(); Volver a activar el receptor
}
Si (buttonState) {}
Serial.println ("presionado, enviando");
digitalWrite (STATUS_PIN, alto);
sendCode(lastButtonState == buttonState);
digitalWrite (STATUS_PIN, bajo);
Delay(50); Esperar un poco entre las retransmisiones
}
else if (irrecv.decode (y resultados)) {}
digitalWrite (STATUS_PIN, alto);
storeCode(&results);
irrecv.resume(); reanudar el receptor
digitalWrite (STATUS_PIN, bajo);
}
lastButtonState = buttonState;
}