Estou desenvolvendo esse código, que ele deve ser um controle universal, ele cópia comandos dos controles externos, e associa cada código a um botão, mais durante a execução do código, quando aperto o botão 1 ele entra no laço e fica preso num loop "pressione para atribuir 4" que é um dos sinalizadores que coloquei no código para saber onde o código estava rodando, a perto o botão no controle que quero copiar, e aperto o botão no meu controle que vou atribuir, mais ele não entra nas condições do botão(a parte de atribuição), se alguém puder me ajudar com esse problema agradeço imensamente!
código logo abaixo:
// This sketch will send out a Nikon D50 trigger signal (probably works with most Nikons)
// See the full tutorial at http://www.ladyada.net/learn/sensors/ir.html
// this code is public domain, please enjoy!
#define IRpin_PIN PIND
#define IRpin 2
#include <SPI.h>
#include <SD.h>
#define MAXPULSE 65000
#define RESOLUTION 20
uint16_t pulses[100][2]; // pair is high and low pulse
uint8_t currentpulse = 0; // index for pulses we're storing
//***********************definição de pinos**********************************************
File myFile;
File power;
File aumentoTemperatura;
File diminuiTemperatura;
const int botao1 =22;
const int botao2 = 3;
const int botao3 = 6;
const int botao4 = 7;
const int botao5 = 8;
int IRledPin = 9; // LED connected to digital pin 13
boolean estadoBotao1 = 0;
boolean estadoBotao2 = 0;
boolean estadoBotao3 = 0;
boolean estadoBotao4 = 0;
boolean estadoBotao5 = 0;
// The setup() method runs once, when the sketch starts
//************************FUnção PRINTPULSES**********************************************
void printpulses(void) {
myFile = SD.open("copia.txt", FILE_WRITE);
if (myFile) {
Serial.println("\n\r\n\rReceived: \n\r OFF \t ON");
// Gera o codigo da tecla pressionada.
for (uint8_t i = 0; i < currentpulse; i++) {
myFile.println("delayMicroseconds(");
myFile.println(pulses[i][0] * RESOLUTION, DEC);
myFile.println(");\n");
myFile.println("pulseIR(");
myFile.println(pulses[i][1] * RESOLUTION, DEC);
myFile.println(");\n");
}
myFile.close();
}
}
//************************FIM FUnção PRINTPULSES**********************************************
void setup() {
// initialize the IR digital pin as an output:
pinMode(botao1,INPUT);
pinMode(botao2,INPUT);
pinMode(botao3,INPUT);
pinMode(botao4,INPUT);
pinMode(botao5,INPUT);
pinMode(IRledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
estadoBotao1 = digitalRead(botao1);
estadoBotao2 = digitalRead(botao2);
estadoBotao3 = digitalRead(botao3);
estadoBotao4 = digitalRead(botao4);
estadoBotao5 = digitalRead(botao5);//criar outros botoes para associar
if (estadoBotao1) {
//código para gravar
Serial.println("pressione o botão para atribuir");
uint16_t highpulse, lowpulse; // temporary storage timing
highpulse = lowpulse = 0; // start out with no pulse length
// while (digitalRead(IRpin)) { // this is too slow!
while (IRpin_PIN & _BV(IRpin)) {
Serial.println("pressione o botão para atribuir 2");
// pin is still HIGH
// count off another few microseconds
highpulse++;
delayMicroseconds(RESOLUTION);
// If the pulse is too long, we 'timed out' - either nothing
// was received or the code is finished, so print what
// we've grabbed so far, and then reset
if ((highpulse >= MAXPULSE) && (currentpulse != 0)) {
Serial.println("pressione o botão para atribuir 3");
printpulses();
currentpulse=0;
return;
}
}
// we didn't time out so lets stash the reading
pulses[currentpulse][0] = highpulse;
// same as above
while (! (IRpin_PIN & _BV(IRpin))) {
Serial.println("pressione o botão para atribuir 4");
// pin is still LOW
lowpulse++;
delayMicroseconds(RESOLUTION);
if ((lowpulse >= MAXPULSE) && (currentpulse != 0)) {
Serial.println("pressione o botão para atribuir 5");
printpulses();
currentpulse=0;
return;
}
}
pulses[currentpulse][1] = lowpulse;
// we read one high-low pulse successfully, continue!
currentpulse++;
//high
//***********************************************************************
Serial.println("pressione o botão para atribuir ***");
if (estadoBotao2){
myFile = SD.open("copia.txt");
power = SD.open("Botao2.txt", FILE_WRITE);//Atribuir copia
power.println(myFile.read());
Serial.println("Código atribuido ao botão On/off");
myFile.close();
power.close();
SD.remove("copia.txt");
//mandar o conteudo do aquivo de texto para um novo que estara integrado na função de seu respectivo botão
}
if (digitalRead(botao3)){
myFile = SD.open("copia.txt");
aumentoTemperatura = SD.open("Botao3.txt", FILE_WRITE);//Atribuir copia
aumentoTemperatura.println(myFile.read());
myFile.close();
aumentoTemperatura.close();
//mandar o conteudo do aquivo de texto para um novo que estara integrado na função de seu respectivo botão
SD.remove("copia.txt");
Serial.println("Código atribuído ao botão Volume +");
}
if (digitalRead(botao4)){
myFile = SD.open("copia.txt");
diminuiTemperatura = SD.open("Botao4.txt", FILE_WRITE);//Atribuir copia
diminuiTemperatura.println(myFile.read());
myFile.close();
diminuiTemperatura.close();
//mandar o conteudo do aquivo de texto para um novo que estara integrado na função de seu respectivo botão
SD.remove("copia.txt");
Serial.println("Código atribuído ao botão volume -");
}
}
if (digitalRead(botao2)){
Serial.println("On/off");
SendChannelUpCodePower();
delay(500);
}
if (digitalRead(botao3)){
Serial.println("Aumentar temperatura");
SendChannelUpCodeAumento();
delay(500);
}
if (digitalRead(botao4)){
Serial.println("Diminuir temperatura");
SendChannelUpCodeDiminui();
delay(500);
}
if (digitalRead(botao5)){ //botao de reset
Serial.println("reset power");
if(digitalRead(botao2)){
SD.remove("Botao2.txt");
}
if(digitalRead(botao3)){
SD.remove("Botao3.txt");
}
delay(500);
}
if(digitalRead(botao4)){
SD.remove("Botao4.txt");
}
}
// This procedure sends a 38KHz pulse to the IRledPin
// for a certain # of microseconds. We'll use this whenever we need to send codes
void pulseIR(long microsecs) {
// we'll count down from the number of microseconds we are told to wait
cli(); // this turns off any background interrupts
while (microsecs > 0) {
// 38 kHz is about 13 microseconds high and 13 microseconds low
digitalWrite(IRledPin, HIGH); // this takes about 3 microseconds to happen
delayMicroseconds(10); // hang out for 10 microseconds
digitalWrite(IRledPin, LOW); // this also takes about 3 microseconds
delayMicroseconds(10); // hang out for 10 microseconds
// so 26 microseconds altogether
microsecs -= 26;
}
sei(); // this turns them back on
}
void SendChannelUpCodePower() {
power = SD.open("Botao2.txt");
if (power) {
while (power.available()) {
Serial.write(power.read());
}
}
power.close();
}
void SendChannelUpCodeAumento() {
aumentoTemperatura = SD.open("Boto3.txt");
if (aumentoTemperatura) {
while (aumentoTemperatura.available()) {
Serial.write(aumentoTemperatura.read());
}
}
aumentoTemperatura.close();
}
void SendChannelUpCodeDiminui() {
diminuiTemperatura = SD.open("botao4.txt");
if (diminuiTemperatura) {
while (diminuiTemperatura.available()) {
Serial.write(diminuiTemperatura.read());
}
}
diminuiTemperatura.close();
}