I have removed as much code as possible, and auto-formatted it:-
static int BtnNxtPin = 9;
static int BtnOkPin = 8;
static int IRledPin = 13;
byte BtnNxt = 0;
byte BtnOk = 0;
void setup() {
Serial.begin(9600);
pinMode(IRledPin, OUTPUT);
pinMode(BtnNxtPin, INPUT_PULLUP);
pinMode(BtnOkPin, INPUT_PULLUP);
Send_ChnUp();
}
void loop() {
GetBtn();
delay(200);
}
void GetBtn() {
BtnNxt = 0; BtnOk = 0;
if (digitalRead(BtnNxtPin) == 0) BtnNxt = 1;
if (digitalRead(BtnOkPin) == 0) BtnOk = 1;
do {
/*wait for button release */
} while (digitalRead(BtnNxtPin) == 0 || digitalRead(BtnOkPin) == 0);
delay(10); //debounce
}
void pulseIR(long microsecs) { // 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 Send_ChnUp() {
pulseIR(9240); delayMicroseconds(4620);
pulseIR(560); delayMicroseconds(540);
pulseIR(600); delayMicroseconds(540);
pulseIR(600); delayMicroseconds(540);
pulseIR(580); delayMicroseconds(540);
pulseIR(600); delayMicroseconds(540);
pulseIR(580); delayMicroseconds(560);
pulseIR(580); delayMicroseconds(540);
pulseIR(600); delayMicroseconds(540);
pulseIR(580); delayMicroseconds(1740);
pulseIR(560); delayMicroseconds(1740);
pulseIR(540); delayMicroseconds(1740);
pulseIR(580); delayMicroseconds(1720);
pulseIR(560); delayMicroseconds(1740);
pulseIR(560); delayMicroseconds(1740);
pulseIR(560); delayMicroseconds(1720);
pulseIR(580); delayMicroseconds(1720);
pulseIR(560); delayMicroseconds(540);
pulseIR(600); delayMicroseconds(1740);
pulseIR(560); delayMicroseconds(1720);
pulseIR(560); delayMicroseconds(580);
pulseIR(560); delayMicroseconds(540);
pulseIR(600); delayMicroseconds(540);
pulseIR(580); delayMicroseconds(540);
pulseIR(600); delayMicroseconds(540);
pulseIR(600); delayMicroseconds(1720);
pulseIR(560); delayMicroseconds(580);
pulseIR(560); delayMicroseconds(560);
pulseIR(560); delayMicroseconds(1740);
pulseIR(560); delayMicroseconds(1820);
pulseIR(480); delayMicroseconds(1760);
pulseIR(540); delayMicroseconds(1800);
pulseIR(500); delayMicroseconds(1840);
pulseIR(440); delayMicroseconds(50000);
}
I still have the same problem. If I comment out the lines with digitalread then the function call at the end of setup does knock my receiver up a channel.
Alternatively if I comment out "GetBtn" in the main loop, then again it will work.
However without commenting out one of these two things means the led does not flash, despite the "Send_ChnUp" being called before the main loop.