HELP: button counter using "IF" and"ELSE"?

Hi all
TO USE WITH A MEGA 2560

I would like to use a button that is on a analog line (A5)
this input has 12 other buttons one side is to ground the other
to (A5) via differnt values of resistors, and they all do as they should.

Heres the code that is used:



///***************  SUB-PROGRAM FOR DETERMINING ADC VALUE ON KEYBOARD  *****************************

void keyboard_check() {

if (keyboard_cycle_counter == 0) {
keyboard_value_1 = analogRead(keyboard_pin);        // we read the HARDWARE GLITCH! IF DON'T READ ANY TIME BEFORE GETTING THE VALUE ADC IS BUCKING !!!    
keyboard_value_1 = analogRead(keyboard_pin);}       // read 
 
if (keyboard_cycle_counter == 1){
keyboard_value_2 = analogRead(keyboard_pin);        // read it again  
keyboard_value_2 = analogRead(keyboard_pin);}

if (keyboard_cycle_counter == 2){  
keyboard_value_3 = analogRead(keyboard_pin);        // read it again 
keyboard_value_3 = analogRead(keyboard_pin);
keyboard_cycle_counter = 0;

if ( keyboard_value_2 >= keyboard_value_1-2 & keyboard_value_2 <= keyboard_value_1+2 & keyboard_value_2 >= keyboard_value_3-2 & keyboard_value_2 <= keyboard_value_3+2){keyboard_value = keyboard_value_2;} // if the difference does not exceed + - 1 then we load the value into value for processing 
                                }
                                
else {keyboard_cycle_counter++;}

if (keyboard_value_1 > 1010   ){keyboard_value = 1023; keyboard_cycle_counter = 0;}


//******************************* KEYBOARD PROCESSING *******************************

//*************** subroutine button 0 (+ range) (BAND UP BUTTON) *****************************

if (keyboard_value >= 0 & keyboard_value < 15){      // if within the set limits (the button is pressed)  
if ( flag_key_0==false ){                            // we check the flag (previous state) 
flag_key_0= true;}                                   // if it was not installed then install
else {goto out0;}                                    // if there is already FLAG (flag_key_) (BUTTON IS STILL PRESSED) then skip the trigger subroutine  
                    
//************ Trigger Subroutine 0 (or you can place a command here when the button is pressed !!!!!!)
//************ the commands that are here are executed once at the moment the button is pressed !!! 

chanel_counter ++;
 
goto out0; }                                         // exit bypassing the flag (flag_key_) 
 //********************* 
flag_key_0 = false;                                  // if the button is not pressed, we reset the flag  
out0: ;                                              // exit subroutine button 

//****************** End of subroutine button 0 (+ range)(BAND UP BUTTON) ***********************************


//*************** subroutine button 1 (- range) (BAND DOWN BUTTON) *****************************

if (keyboard_value >= 35 & keyboard_value < 60){     // if within the set limits (the button is pressed)  
if ( flag_key_1==false ){                            // we check the flag (the previous state) 
flag_key_1= true;}                                   // if it was not installed then install 
else {goto out1;}                                    // уже стоит ФЛАГ(flag_key_) (КНОПКА ВСЁ ЕЩЁ НАЖАТА) тогда пропускаем подпрограмму тригера 
                    
//************ подпрограмма тригера (или  тут  можно разместить  команду  при нажатии кнопки !!!!!!)
// команды которые находятся сдесь выполняются один раз  в момент нажатия кнопки !!!

chanel_counter --;

//************ 
goto out1; }                                         // выходим обходя флаг (flag_key_) 
 //********************* 
flag_key_1 = false;                                  // есле кнопка не неажата  сбрасываем флаг 
out1: ;                                              // выход подпрограмма кнопки 

//****************** End of subroutine button 1 (- range)(BAND DOWN BUTTON) ***********************************




//************* Button Subroutine 2 FAST ( шаг )
if (keyboard_value >= 80 && keyboard_value < 112){   // if within the set limits (the button is pressed)  
if ( flag_key_2==false ){                            // we check the flag (the previous state) 
flag_key_2= true;                                    // if it was not installed then install 

currentMillisB = millis();                           // текущее время в миллисекундах  для входа в режим калибровки С-метра
previousMillisB=currentMillisB ; }    
                 
else {
currentMillisB = millis();
if (currentMillisB-previousMillisB > 5000 ){Step_temp = 15; goto out2; } //  если в течении 5 сек  нажата кнопка ПИШИМ В СТЕП 15 ИСПОЛЬЗУЯ ЭТО ЧИСЛО КАК ФЛАГ ДЛЯ ВХОДА В РЕЖИМ КАЛИБРОВКИ

goto out2;
}                                          // уже стоит ФЛАГ(setB1) (КНОПКА ВСЁ ЕЩЁ НАЖАТА) тогда пропускаем подпрограмму тригера 
                    
//************ подпрограмма тригера (или  тут  можно разместить  команду  при нажатии кнопки !!!!!!)


if (bitRead(Mode_temp,2) == 0){bitSet(Mode_temp,2);} else {bitClear(Mode_temp,2);}  //  


goto out2; }                     //  выходим обходя флаг (setB1) 
 //*********************

flag_key_2=false ;                    // есле кнопка не неажата  сбрасываем флаг 
out2:  ;                          // выход подпрограмма кнопки 









//************* Button Subroutine 3 (ATT)
if (keyboard_value >= 130&& keyboard_value < 160){     // if within the set limits (the button is pressed)  
if ( flag_key_3==false ){                              // we check the flag (the previous state)  
flag_key_3= true;}                                     // if it was not installed then install
else {goto out3;}                                      // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then skip the trigger subroutine 
                    
//************ Trigger Subroutine 3 (or you can place the command here when you press the button !!!!!!)

if ( bitRead(Mode_temp,0)==1 ){bitClear(Mode_temp,0);} // if the bit is set then we reset it
else {bitSet(Mode_temp,0);}                            // if it was not installed then install        

goto out3; }                                           // exit bypassing the flag (setB1)  
 //*********************
flag_key_3=false ;                                     // if the button is not pressed, we reset the flag
out3:  ;                                               // exit subroutine button






//************* Button Subroutine 4 (Split )    ( Shift tx ) 
if (keyboard_value >= 180 & keyboard_value < 215){   // if within the set limits (the button is pressed)
if ( flag_key_4==false ){                            // we check the flag (the previous state)
flag_key_4= true;}                                   // if it was not installed then install 
else {goto out4;}                                    // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 4 (or you can place the command here when you press the button !!!!!!)

//****************  shift tx  ****************************
if ( digitalRead(tx) == LOW ){          // если тх то ввкл тх шифт 


if (shift_tx == false) {shift_tx = true; //shift_tx  когда вкл шифт тх  делаем :         
sift_prev=1000; // 1 записуем 1000 чтобы полюбому сразу вышла надпись  ShiftTX 

bitClear(Mode_temp_prev,4); //   сбрасываем бит чтобы  не обнавлялась надпись  Shift если он был вкл до этого 
goto out4;}  // минуем сброс shift_tx


if (shift_tx == true) {shift_tx = false; // при вык шифт тх  делаем : 
sift_prev = 3000; // записываем 3000 чтобы прошло обновление шифта rx ( 3000 т.к такого значения  быть не может )
sift_tx = sift ; //копируем значение sift_tx 
EEPROM.put(0, sift_tx);} //  записываем  в епром  значение sift_tx 4 byte
                       
}
else {                                 ///    елли rx то обычный шифт  если тx  то пропускаем  это прерключение 

if (shift_tx == true) {goto out4;} // если в режиме  настройки shift_tx  то пропускаем эти шаги

if ( Split==false ){Split=true; } //    
else {Split=false; }
 
     }

//temp1=temp1+2;   //????????????????????????????????????????????????????????????????????????

//currentMillisB = millis(); // текущее время в миллисекундах 
//previousMillisB=currentMillisB ;  

goto out4; }                     //  выходим обходя флаг (setB1) 
 //*********************
//currentMillisB = millis(); // текущее время в миллисекундах 
        
 //                                                                                     если тутже отпустили кнопку значит XFC отменяется 
flag_key_4=false ;                    // есле кнопка не неажата  сбрасываем флаг 
out4:  ;                          // выход подпрограмма кнопки 




//************* Button Subroutine 5 ( CW )
if (keyboard_value >= 233 && keyboard_value < 252){   // if within the set limits (the button is pressed)  
if ( flag_key_5==false ){                             // we check the flag (the previous state) 
flag_key_5= true;}                                    // if it was not installed then install 
else {goto out5;}                                     // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 5 (or you can place the command here when you press the button !!!!!!)

//*******on/off SWR meter 

if (SWR_On_Off == 1 && digitalRead(tx) == LOW) {SWR_On_Off = 0; goto out5;} 
if (SWR_On_Off == 0 && digitalRead(tx) == LOW) {SWR_On_Off = 1;goto out5;} 

///*********** End of Triger Subroutine button 5  ***********************************

modulation++; 


if ( modulation == 4 && FM_Mode == 0){modulation++; } 
if ( modulation == 5 && AM_Mode == 0){modulation++; }

if ( modulation > 5){modulation = 1;} 

bitWrite(Mode_temp, 4, bitRead(modulation, 0)); 
bitWrite(Mode_temp, 5, bitRead(modulation, 1));
bitWrite(Mode_temp, 6, bitRead(modulation, 2));

                         
goto out5; }                       // выходим обходя флаг (setB1) 
 //*********************
flag_key_5=false ;                 // есле кнопка не неажата  сбрасываем флаг 
out5:  ;                           // выход подпрограмма кнопки 


//************* Button Subroutine 6 ( lock )
if (keyboard_value >= 270 && keyboard_value < 291){   // if within the set limits (the button is pressed)  
if ( flag_key_6==false ){                             // we check the flag (the previous state) 
flag_key_6= true;}                                    // if it was not installed then install 
else {goto out6;}                                     // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 6 (or you can place the command here when you press the button !!!!!!)

if ( lock ==true ){lock = false ;}//  если бит установлен то сбрасываем его
else {lock = true ;}                        //  если небыл установлен то устанавливаем       

goto out6; }                     //  выходим обходя флаг (setB0) 
 //*********************
flag_key_6=false ;                    // есле кнопка не неажата  сбрасываем флаг 
out6:  ;                          // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 6  ***********************************





//************* Button Subroutine 7 ( VFO-A/B - A=B ) ***********************************
if (keyboard_value >= 309 & keyboard_value < 331){   // if within the set limits (the button is pressed)  
if ( flag_key_7==false ){                            // we check the flag (the previous state) 
       flag_key_7= true;}                            // if it was not installed then install 
else {
currentMillisB = millis();  

if (currentMillisB-previousMillisB > 1000 & currentMillisB-previousMillisB < 5000 ){A_copy_B = true; previousMillisB=previousMillisB-5000;}// A=B     
                         // переключаеим если больше 1000 мс и чтобы не повтарялось в качестве флага отнимаем 5 сек                        


goto out7;}                    // уже стоит ФЛАГ (КНОПКА ВСЁ ЕЩЁ НАЖАТА) тогда пропускаем подпрограмму тригера 
                    
//************ Trigger Subroutine 7 (or you can place the command here when you press the button !!!!!!)
     
currentMillisB = millis(); // текущее время в миллисекундах 
previousMillisB=currentMillisB ;  

goto out7; }                     //  выходим обходя флаг (setB0) 
 //*********************
currentMillisB = millis(); // текущее время в миллисекундах 
if (flag_key_7==true & currentMillisB-previousMillisB < 500 & VFO_picked == 0){VFO_picked = 1; flag_key_7=false; } // переключаем когда отпускаем кнопку  
if (flag_key_7==true & currentMillisB-previousMillisB < 500 & VFO_picked == 1){VFO_picked = 0; flag_key_7=false;} //    если не прошло 500 мс             

flag_key_7=false;                    // есле кнопка не неажата  сбрасываем флаг 
out7:  ;                          // выход подпрограмма кнопки 

//****************** конец подпрограммы кнопки ! ***********************************


//************* Button Subroutine 8 ( RIT )
if (keyboard_value >= 353 && keyboard_value < 377){     // if within the set limits (the button is pressed)  
if ( flag_key_8==false ){                               // we check the flag (the previous state) 
flag_key_8= true;}                                      // if it was not installed then install 
else {goto out8;}                                       // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 8 (or you can place a command here when the button is pressed !!!!!!)

if ( bitRead(Mode_temp,7)==1 ){bitClear(Mode_temp, 7);} // если бит установлен то сбрасываем его
else {bitSet(Mode_temp, 7);}                            // если небыл установлен то устанавливаем       
tft.fillRect(341, 83, 100, 25, TFT_BLACK);              // стираем OFF 

goto out8; }                                            // выходим обходя флаг (setB0) 
 //*********************
flag_key_8=false ;                                      // есле кнопка не неажата  сбрасываем флаг 
out8:  ;                                                // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 8  ***********************************


//************* Button Subroutine 9 ( TRIGER 1 )( )
if (keyboard_value >= 397 && keyboard_value < 421){     // if within the set limits (the button is pressed)  
if ( flag_key_9==false ){                               // we check the flag (the previous state) 
flag_key_9= true;}                                      // if it was not installed then install 
else {goto out9;}                                       // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 9 (or you can place the command here when you press the button !!!!!!)

if ( bitRead(reg1,7)==1 ){bitClear(reg1,7);}            // если бит установлен то сбрасываем его
else {bitSet(reg1,7);}                                  // если небыл установлен то устанавливаем       

goto out9; }                                            // выходим обходя флаг (setB0) 
 //*********************
flag_key_9=false ;                                      // есле кнопка не неажата  сбрасываем флаг 
out9:  ;                                                // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 9  ***********************************


//************* Button Subroutine 10 ( TRIGER 2 )( )
if (keyboard_value >= 452 && keyboard_value < 477){     // if within the set limits (the button is pressed)  
if ( flag_key_10==false ){                              // we check the flag (the previous state) 
flag_key_10= true;}                                     // if it was not installed then install 
else {goto out10;}                                      // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
                    
//************ Trigger Subroutine 10 (or you can place the command here when you press the button !!!!!!)

if ( bitRead(reg2,0)==1 ){bitClear(reg2,0);}            // если бит установлен то сбрасываем его
else {bitSet(reg2,0);}                                  // если небыл установлен то устанавливаем       

goto out10; }                                           // выходим обходя флаг (setB0) 
 //*********************
flag_key_10=false ;                                     // есле кнопка не неажата  сбрасываем флаг 
out10:  ;                                               // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 10  ***********************************


//************* Button Subroutine 11 ( TRIGER 3 )( )
if (keyboard_value >= 498 && keyboard_value < 524){     // if within the set limits (the button is pressed)  
if ( flag_key_11==false ){                              // we check the flag (the previous state) 
flag_key_11= true;}                                     // if it was not installed then install 
else {goto out11;}                                      // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 11 (or you can place the command here when you press the button !!!!!!)

if ( bitRead(reg2,1)==1 ){bitClear(reg2,1);}            // если бит установлен то сбрасываем его
else {bitSet(reg2,1);}                                  // если небыл установлен то устанавливаем       

goto out11; }                                           // выходим обходя флаг (setB0) 
 //*********************
flag_key_11=false ;                                     // есле кнопка не неажата  сбрасываем флаг 
out11:  ;                                               // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 11  ***********************************


//************* Button Subroutine 12 ( TRIGER 4 )( RSS Key )
if (keyboard_value >= 550 && keyboard_value < 575){     // if within the set limits (the button is pressed)  
if ( flag_key_12==false ){                              // we check the flag (the previous state)
flag_key_12= true;}                                     // if it was not installed then install 
else {goto out12;}                                      // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 12 (or you can place the command here when you press the button !!!!!!)

if ( bitRead(reg2,2)==1 ){bitClear(reg2,2);}            // если бит установлен то сбрасываем его
else {bitSet(reg2,2);}                                  // если небыл установлен то устанавливаем       

goto out12; }                                           // выходим обходя флаг (setB0) 
 //*********************
flag_key_12=false ;                                     // есле кнопка не неажата  сбрасываем флаг 
out12:  ;                                               // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 12  ***********************************


//************* Button Subroutine 13  ( TRIGER 5 (FM Key) )
if (keyboard_value >= 601 && keyboard_value < 626){     // if within the set limits (the button is pressed)  
if ( flag_key_13==false ){                              // we check the flag (the previous state) 
flag_key_13= true;}                                     // if it was not installed then install
else {goto out13;}                                      // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 13 (or you can place the command here when you press the button !!!!!!)

if ( bitRead(reg2,3)==1 ){bitClear(reg2,3);}            // если бит установлен то сбрасываем его
else {bitSet(reg2,3);}                                  // если небыл установлен то устанавливаем       

goto out13; }                                           // выходим обходя флаг (setB0) 
 //*********************
flag_key_13=false ;                                     // есле кнопка не неажата  сбрасываем флаг 
out13:  ;                                               // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 13  ***********************************


//************** Button Subroutine 14 ( TRIGER 6 (AM Key))
if (keyboard_value >= 650 && keyboard_value < 675){     // if within the set limits (the button is pressed)  
if ( flag_key_14==false ){                              // we check the flag (the previous state) 
flag_key_14= true;}                                     // if it was not installed then install 
else {goto out14;}                                      // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 14 (or you can place the command here when you press the button !!!!!!)
//S_P_meter ();
if ( bitRead(reg2,4)==1 ){bitClear(reg2,4);}            // если бит установлен то сбрасываем его
else {bitSet(reg2,4);}                                  // если небыл установлен то устанавливаем       

goto out14; }                                           // выходим обходя флаг (setB0) 
 //*********************
flag_key_14=false ;                                     // есле кнопка не неажата  сбрасываем флаг 
out14:  ;                                               // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 14  ***********************************









//************** Button Subroutine 15 ( PRE_Amp Key )
if (keyboard_value >= 689 && keyboard_value < 711){     // if within the set limits (the button is pressed)  
if ( flag_key_15==false ){                              // we check the flag (the previous state) 
flag_key_15= true;}                                     // if it was not installed then install 
else {goto out15;}                                      // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 15 (or you can place the command here when you press the button !!!!!!)

if ( bitRead(Mode_temp,1)==1 ){bitClear(Mode_temp,1);}  // если бит установлен то сбрасываем его
else {bitSet(Mode_temp,1);}                             // если небыл установлен то устанавливаем       

goto out15; }                                           // выходим обходя флаг (setB0) 
 //*********************
flag_key_15=false ;                                     // есле кнопка не неажата  сбрасываем флаг 
out15:  ;                                               // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 15  ***********************************


//************** Button Subroutine 16 ( XFC )
if (keyboard_value >= 730 && keyboard_value < 755){     // if within the set limits (the button is pressed)  
  
XFC=true; // пока держим кнопку  слушаем другое VFO 

if ( flag_key_16==false ){                              // we check the flag (the previous state) 
flag_key_16= true;}                                     // if it was not installed then install 
else {goto out16;}                                      // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine 
                    
//************ Trigger Subroutine 16 (or you can place the command here when you press the button !!!!!!)

goto out16; }                                           // выходим обходя флаг (setB0) 
 //*********************
flag_key_16=false ;                                     // есле кнопка не неажата  сбрасываем флаг 
out16:  ;                                               // выход подпрограмма кнопки 

//*********************** End of Triger Subroutine button 16  ***********************************
  

//************** Button Subroutine 17 ( TRIGER 7 (Audio Filter Key) )

if (keyboard_value >= 760 && keyboard_value < 794){     // if within the specified limits (button pressed)  
if ( flag_key_17==false ){                              // check the flag (previous state)
flag_key_17= true;}                                     // if it was not installed then install 
else {goto out17;}                                      // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine  

// ************ Trigger Subroutine 17 (or you can place the command here when you press the button !!!!!!)

if ( bitRead(reg2,5)==1 ){bitClear(reg2,5);}            // if the bit is set then we reset it 
else {bitSet(reg2,5);}                                  // if it was not installed then install       
goto out17; }                                           // exit bypassing the flag (setB0) 
flag_key_17=false ;                                     // if the button is not pressed, we reset the flag 
out17:  ;                                               // exit subroutine button




//*********************** End of Triger Subroutine button 17  ***********************************






                         
                         
                         
                         } // the END


Now from i can figure out, is that the first 13 lines deal with reading the buttons and getting ADC values.
In the KEYBOARD PROCESSING you have the subroutines for button 0 (BAND UP) and button 1 (BAND DOWN)
with the chanel_counter ++ (button 0) and chanel_counter -- (button 1). All the other buttons work as should.

Now if you go down to the botton you will see Button Subroutine 17 ( TRIGER 7 (Audio Filter Key).
I put this in the code.
Before i go on, just to say that this button is also working ok but with only one output (out17).
it use reg2,5 in 74HC595 shift registers (IC1 - IC2), IC1 is full up, there are two more registers left in
IC2 (reg2,6 and reg2,7) with two outputs (out18 and out19).
If i need to use another shift register its not a problem.

I am trying to get this button to work with a button counter ( count of 3) of some sorts that works with existing code,
must be able to display text over the previous text ie 1.5Khz - 2.0Khz and 2.5Khz and switch each output to HIGH from LOW.

Hope you all can understand
Thanks
Howard

Abysmal formatted spaghetti code, spiced with gotos and Cyrillic comments?

I won't dive into that.

Sorry is this any better:



///***************  SUB-PROGRAM FOR DETERMINING ADC VALUE ON KEYBOARD  *****************************

void keyboard_check() {

  if (keyboard_cycle_counter == 0) {
    keyboard_value_1 = analogRead(keyboard_pin);        // we read the HARDWARE GLITCH! IF DON'T READ ANY TIME BEFORE GETTING THE VALUE ADC IS BUCKING !!!
    keyboard_value_1 = analogRead(keyboard_pin);
  }       // read

  if (keyboard_cycle_counter == 1) {
    keyboard_value_2 = analogRead(keyboard_pin);        // read it again
    keyboard_value_2 = analogRead(keyboard_pin);
  }

  if (keyboard_cycle_counter == 2) {
    keyboard_value_3 = analogRead(keyboard_pin);        // read it again
    keyboard_value_3 = analogRead(keyboard_pin);
    keyboard_cycle_counter = 0;

    if ( keyboard_value_2 >= keyboard_value_1 - 2 & keyboard_value_2 <= keyboard_value_1 + 2 & keyboard_value_2 >= keyboard_value_3 - 2 & keyboard_value_2 <= keyboard_value_3 + 2) {
      keyboard_value = keyboard_value_2; // if the difference does not exceed + - 1 then we load the value into value for processing
    }
  }

  else {
    keyboard_cycle_counter++;
  }

  if (keyboard_value_1 > 1010   ) {
    keyboard_value = 1023;
    keyboard_cycle_counter = 0;
  }


  //******************************* KEYBOARD PROCESSING *******************************

  //*************** subroutine button 0 (+ range) (BAND UP BUTTON) *****************************

  if (keyboard_value >= 0 & keyboard_value < 15) {     // if within the set limits (the button is pressed)
    if ( flag_key_0 == false ) {                         // we check the flag (previous state)
      flag_key_0 = true;
    }                                   // if it was not installed then install
    else {
      goto out0; // if there is already FLAG (flag_key_) (BUTTON IS STILL PRESSED) then skip the trigger subroutine
    }

    //************ Trigger Subroutine 0 (or you can place a command here when the button is pressed !!!!!!)
    //************ the commands that are here are executed once at the moment the button is pressed !!!

    chanel_counter ++;

    goto out0;
  }                                         // exit bypassing the flag (flag_key_)
  //*********************
  flag_key_0 = false;                                  // if the button is not pressed, we reset the flag
out0: ;                                              // exit subroutine button

  //****************** End of subroutine button 0 (+ range)(BAND UP BUTTON) ***********************************


  //*************** subroutine button 1 (- range) (BAND DOWN BUTTON) *****************************

  if (keyboard_value >= 35 & keyboard_value < 60) {    // if within the set limits (the button is pressed)
    if ( flag_key_1 == false ) {                         // we check the flag (the previous state)
      flag_key_1 = true;
    }                                   // if it was not installed then install
    else {
      goto out1; // уже стоит ФЛАГ(flag_key_) (КНОПКА ВСЁ ЕЩЁ НАЖАТА) тогда пропускаем подпрограмму тригера
    }

    //************ подпрограмма тригера (или  тут  можно разместить  команду  при нажатии кнопки !!!!!!)
    // команды которые находятся сдесь выполняются один раз  в момент нажатия кнопки !!!

    chanel_counter --;

    //************
    goto out1;
  }                                         // выходим обходя флаг (flag_key_)
  //*********************
  flag_key_1 = false;                                  // есле кнопка не неажата  сбрасываем флаг
out1: ;                                              // выход подпрограмма кнопки

  //****************** End of subroutine button 1 (- range)(BAND DOWN BUTTON) ***********************************




  //************* Button Subroutine 2 FAST ( шаг )
  if (keyboard_value >= 80 && keyboard_value < 112) {  // if within the set limits (the button is pressed)
    if ( flag_key_2 == false ) {                         // we check the flag (the previous state)
      flag_key_2 = true;                                   // if it was not installed then install

      currentMillisB = millis();                           // текущее время в миллисекундах  для входа в режим калибровки С-метра
      previousMillisB = currentMillisB ;
    }

    else {
      currentMillisB = millis();
      if (currentMillisB - previousMillisB > 5000 ) {
        Step_temp = 15;  //  если в течении 5 сек  нажата кнопка ПИШИМ В СТЕП 15 ИСПОЛЬЗУЯ ЭТО ЧИСЛО КАК ФЛАГ ДЛЯ ВХОДА В РЕЖИМ КАЛИБРОВКИ
        goto out2;
      }

      goto out2;
    }                                          // уже стоит ФЛАГ(setB1) (КНОПКА ВСЁ ЕЩЁ НАЖАТА) тогда пропускаем подпрограмму тригера

    //************ подпрограмма тригера (или  тут  можно разместить  команду  при нажатии кнопки !!!!!!)


    if (bitRead(Mode_temp, 2) == 0) {
      bitSet(Mode_temp, 2); //
    } else {
      bitClear(Mode_temp, 2);
    }


    goto out2;
  }                     //  выходим обходя флаг (setB1)
  //*********************

  flag_key_2 = false ;                  // есле кнопка не неажата  сбрасываем флаг
out2:  ;                          // выход подпрограмма кнопки









  //************* Button Subroutine 3 (ATT)
  if (keyboard_value >= 130 && keyboard_value < 160) {   // if within the set limits (the button is pressed)
    if ( flag_key_3 == false ) {                           // we check the flag (the previous state)
      flag_key_3 = true;
    }                                     // if it was not installed then install
    else {
      goto out3; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then skip the trigger subroutine
    }

    //************ Trigger Subroutine 3 (or you can place the command here when you press the button !!!!!!)

    if ( bitRead(Mode_temp, 0) == 1 ) {
      bitClear(Mode_temp, 0); // if the bit is set then we reset it
    }
    else {
      bitSet(Mode_temp, 0); // if it was not installed then install
    }

    goto out3;
  }                                           // exit bypassing the flag (setB1)
  //*********************
  flag_key_3 = false ;                                   // if the button is not pressed, we reset the flag
out3:  ;                                               // exit subroutine button






  //************* Button Subroutine 4 (Split )    ( Shift tx )
  if (keyboard_value >= 180 & keyboard_value < 215) {  // if within the set limits (the button is pressed)
    if ( flag_key_4 == false ) {                         // we check the flag (the previous state)
      flag_key_4 = true;
    }                                   // if it was not installed then install
    else {
      goto out4; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 4 (or you can place the command here when you press the button !!!!!!)

    //****************  shift tx  ****************************
    if ( digitalRead(tx) == LOW ) {         // если тх то ввкл тх шифт


      if (shift_tx == false) {
        shift_tx = true; //shift_tx  когда вкл шифт тх  делаем :
        sift_prev = 1000; // 1 записуем 1000 чтобы полюбому сразу вышла надпись  ShiftTX

        bitClear(Mode_temp_prev, 4); //   сбрасываем бит чтобы  не обнавлялась надпись  Shift если он был вкл до этого
        goto out4;
      }  // минуем сброс shift_tx


      if (shift_tx == true) {
        shift_tx = false; // при вык шифт тх  делаем :
        sift_prev = 3000; // записываем 3000 чтобы прошло обновление шифта rx ( 3000 т.к такого значения  быть не может )
        sift_tx = sift ; //копируем значение sift_tx
        EEPROM.put(0, sift_tx);
      } //  записываем  в епром  значение sift_tx 4 byte

    }
    else {                                 ///    елли rx то обычный шифт  если тx  то пропускаем  это прерключение

      if (shift_tx == true) {
        goto out4; // если в режиме  настройки shift_tx  то пропускаем эти шаги
      }

      if ( Split == false ) {
        Split = true;  //
      }
      else {
        Split = false;
      }

    }

    //temp1=temp1+2;   //????????????????????????????????????????????????????????????????????????

    //currentMillisB = millis(); // текущее время в миллисекундах
    //previousMillisB=currentMillisB ;

    goto out4;
  }                     //  выходим обходя флаг (setB1)
  //*********************
  //currentMillisB = millis(); // текущее время в миллисекундах

  //                                                                                     если тутже отпустили кнопку значит XFC отменяется
  flag_key_4 = false ;                  // есле кнопка не неажата  сбрасываем флаг
out4:  ;                          // выход подпрограмма кнопки




  //************* Button Subroutine 5 ( CW )
  if (keyboard_value >= 233 && keyboard_value < 252) {  // if within the set limits (the button is pressed)
    if ( flag_key_5 == false ) {                          // we check the flag (the previous state)
      flag_key_5 = true;
    }                                    // if it was not installed then install
    else {
      goto out5; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 5 (or you can place the command here when you press the button !!!!!!)

    //*******on/off SWR meter

    if (SWR_On_Off == 1 && digitalRead(tx) == LOW) {
      SWR_On_Off = 0;
      goto out5;
    }
    if (SWR_On_Off == 0 && digitalRead(tx) == LOW) {
      SWR_On_Off = 1;
      goto out5;
    }

    ///*********** End of Triger Subroutine button 5  ***********************************

    modulation++;


    if ( modulation == 4 && FM_Mode == 0) {
      modulation++;
    }
    if ( modulation == 5 && AM_Mode == 0) {
      modulation++;
    }

    if ( modulation > 5) {
      modulation = 1;
    }

    bitWrite(Mode_temp, 4, bitRead(modulation, 0));
    bitWrite(Mode_temp, 5, bitRead(modulation, 1));
    bitWrite(Mode_temp, 6, bitRead(modulation, 2));


    goto out5;
  }                       // выходим обходя флаг (setB1)
  //*********************
  flag_key_5 = false ;               // есле кнопка не неажата  сбрасываем флаг
out5:  ;                           // выход подпрограмма кнопки


  //************* Button Subroutine 6 ( lock )
  if (keyboard_value >= 270 && keyboard_value < 291) {  // if within the set limits (the button is pressed)
    if ( flag_key_6 == false ) {                          // we check the flag (the previous state)
      flag_key_6 = true;
    }                                    // if it was not installed then install
    else {
      goto out6; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 6 (or you can place the command here when you press the button !!!!!!)

    if ( lock == true ) {
      lock = false ; //  если бит установлен то сбрасываем его
    }
    else {
      lock = true ; //  если небыл установлен то устанавливаем
    }

    goto out6;
  }                     //  выходим обходя флаг (setB0)
  //*********************
  flag_key_6 = false ;                  // есле кнопка не неажата  сбрасываем флаг
out6:  ;                          // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 6  ***********************************





  //************* Button Subroutine 7 ( VFO-A/B - A=B ) ***********************************
  if (keyboard_value >= 309 & keyboard_value < 331) {  // if within the set limits (the button is pressed)
    if ( flag_key_7 == false ) {                         // we check the flag (the previous state)
      flag_key_7 = true;
    }                            // if it was not installed then install
    else {
      currentMillisB = millis();

      if (currentMillisB - previousMillisB > 1000 & currentMillisB - previousMillisB < 5000 ) {
        A_copy_B = true;  // A=B
        previousMillisB = previousMillisB - 5000;
      }
      // переключаеим если больше 1000 мс и чтобы не повтарялось в качестве флага отнимаем 5 сек


      goto out7;
    }                    // уже стоит ФЛАГ (КНОПКА ВСЁ ЕЩЁ НАЖАТА) тогда пропускаем подпрограмму тригера

    //************ Trigger Subroutine 7 (or you can place the command here when you press the button !!!!!!)

    currentMillisB = millis(); // текущее время в миллисекундах
    previousMillisB = currentMillisB ;

    goto out7;
  }                     //  выходим обходя флаг (setB0)
  //*********************
  currentMillisB = millis(); // текущее время в миллисекундах
  if (flag_key_7 == true & currentMillisB - previousMillisB < 500 & VFO_picked == 0) {
    VFO_picked = 1;  // переключаем когда отпускаем кнопку
    flag_key_7 = false;
  }
  if (flag_key_7 == true & currentMillisB - previousMillisB < 500 & VFO_picked == 1) {
    VFO_picked = 0;  //    если не прошло 500 мс
    flag_key_7 = false;
  }

  flag_key_7 = false;                  // есле кнопка не неажата  сбрасываем флаг
out7:  ;                          // выход подпрограмма кнопки

  //****************** конец подпрограммы кнопки ! ***********************************


  //************* Button Subroutine 8 ( RIT )
  if (keyboard_value >= 353 && keyboard_value < 377) {    // if within the set limits (the button is pressed)
    if ( flag_key_8 == false ) {                            // we check the flag (the previous state)
      flag_key_8 = true;
    }                                      // if it was not installed then install
    else {
      goto out8; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 8 (or you can place a command here when the button is pressed !!!!!!)

    if ( bitRead(Mode_temp, 7) == 1 ) {
      bitClear(Mode_temp, 7); // если бит установлен то сбрасываем его
    }
    else {
      bitSet(Mode_temp, 7); // если небыл установлен то устанавливаем
    }
    tft.fillRect(341, 83, 100, 25, TFT_BLACK);              // стираем OFF

    goto out8;
  }                                            // выходим обходя флаг (setB0)
  //*********************
  flag_key_8 = false ;                                    // есле кнопка не неажата  сбрасываем флаг
out8:  ;                                                // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 8  ***********************************


  //************* Button Subroutine 9 ( TRIGER 1 )( )
  if (keyboard_value >= 397 && keyboard_value < 421) {    // if within the set limits (the button is pressed)
    if ( flag_key_9 == false ) {                            // we check the flag (the previous state)
      flag_key_9 = true;
    }                                      // if it was not installed then install
    else {
      goto out9; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 9 (or you can place the command here when you press the button !!!!!!)

    if ( bitRead(reg1, 7) == 1 ) {
      bitClear(reg1, 7); // если бит установлен то сбрасываем его
    }
    else {
      bitSet(reg1, 7); // если небыл установлен то устанавливаем
    }

    goto out9;
  }                                            // выходим обходя флаг (setB0)
  //*********************
  flag_key_9 = false ;                                    // есле кнопка не неажата  сбрасываем флаг
out9:  ;                                                // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 9  ***********************************


  //************* Button Subroutine 10 ( TRIGER 2 )( )
  if (keyboard_value >= 452 && keyboard_value < 477) {    // if within the set limits (the button is pressed)
    if ( flag_key_10 == false ) {                           // we check the flag (the previous state)
      flag_key_10 = true;
    }                                     // if it was not installed then install
    else {
      goto out10; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 10 (or you can place the command here when you press the button !!!!!!)

    if ( bitRead(reg2, 0) == 1 ) {
      bitClear(reg2, 0); // если бит установлен то сбрасываем его
    }
    else {
      bitSet(reg2, 0); // если небыл установлен то устанавливаем
    }

    goto out10;
  }                                           // выходим обходя флаг (setB0)
  //*********************
  flag_key_10 = false ;                                   // есле кнопка не неажата  сбрасываем флаг
out10:  ;                                               // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 10  ***********************************


  //************* Button Subroutine 11 ( TRIGER 3 )( )
  if (keyboard_value >= 498 && keyboard_value < 524) {    // if within the set limits (the button is pressed)
    if ( flag_key_11 == false ) {                           // we check the flag (the previous state)
      flag_key_11 = true;
    }                                     // if it was not installed then install
    else {
      goto out11; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 11 (or you can place the command here when you press the button !!!!!!)

    if ( bitRead(reg2, 1) == 1 ) {
      bitClear(reg2, 1); // если бит установлен то сбрасываем его
    }
    else {
      bitSet(reg2, 1); // если небыл установлен то устанавливаем
    }

    goto out11;
  }                                           // выходим обходя флаг (setB0)
  //*********************
  flag_key_11 = false ;                                   // есле кнопка не неажата  сбрасываем флаг
out11:  ;                                               // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 11  ***********************************


  //************* Button Subroutine 12 ( TRIGER 4 )( RSS Key )
  if (keyboard_value >= 550 && keyboard_value < 575) {    // if within the set limits (the button is pressed)
    if ( flag_key_12 == false ) {                           // we check the flag (the previous state)
      flag_key_12 = true;
    }                                     // if it was not installed then install
    else {
      goto out12; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 12 (or you can place the command here when you press the button !!!!!!)

    if ( bitRead(reg2, 2) == 1 ) {
      bitClear(reg2, 2); // если бит установлен то сбрасываем его
    }
    else {
      bitSet(reg2, 2); // если небыл установлен то устанавливаем
    }

    goto out12;
  }                                           // выходим обходя флаг (setB0)
  //*********************
  flag_key_12 = false ;                                   // есле кнопка не неажата  сбрасываем флаг
out12:  ;                                               // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 12  ***********************************


  //************* Button Subroutine 13  ( TRIGER 5 (FM Key) )
  if (keyboard_value >= 601 && keyboard_value < 626) {    // if within the set limits (the button is pressed)
    if ( flag_key_13 == false ) {                           // we check the flag (the previous state)
      flag_key_13 = true;
    }                                     // if it was not installed then install
    else {
      goto out13; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 13 (or you can place the command here when you press the button !!!!!!)

    if ( bitRead(reg2, 3) == 1 ) {
      bitClear(reg2, 3); // если бит установлен то сбрасываем его
    }
    else {
      bitSet(reg2, 3); // если небыл установлен то устанавливаем
    }

    goto out13;
  }                                           // выходим обходя флаг (setB0)
  //*********************
  flag_key_13 = false ;                                   // есле кнопка не неажата  сбрасываем флаг
out13:  ;                                               // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 13  ***********************************


  //************** Button Subroutine 14 ( TRIGER 6 (AM Key))
  if (keyboard_value >= 650 && keyboard_value < 675) {    // if within the set limits (the button is pressed)
    if ( flag_key_14 == false ) {                           // we check the flag (the previous state)
      flag_key_14 = true;
    }                                     // if it was not installed then install
    else {
      goto out14; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 14 (or you can place the command here when you press the button !!!!!!)
    //S_P_meter ();
    if ( bitRead(reg2, 4) == 1 ) {
      bitClear(reg2, 4); // если бит установлен то сбрасываем его
    }
    else {
      bitSet(reg2, 4); // если небыл установлен то устанавливаем
    }

    goto out14;
  }                                           // выходим обходя флаг (setB0)
  //*********************
  flag_key_14 = false ;                                   // есле кнопка не неажата  сбрасываем флаг
out14:  ;                                               // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 14  ***********************************









  //************** Button Subroutine 15 ( PRE_Amp Key )
  if (keyboard_value >= 689 && keyboard_value < 711) {    // if within the set limits (the button is pressed)
    if ( flag_key_15 == false ) {                           // we check the flag (the previous state)
      flag_key_15 = true;
    }                                     // if it was not installed then install
    else {
      goto out15; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 15 (or you can place the command here when you press the button !!!!!!)

    if ( bitRead(Mode_temp, 1) == 1 ) {
      bitClear(Mode_temp, 1); // если бит установлен то сбрасываем его
    }
    else {
      bitSet(Mode_temp, 1); // если небыл установлен то устанавливаем
    }

    goto out15;
  }                                           // выходим обходя флаг (setB0)
  //*********************
  flag_key_15 = false ;                                   // есле кнопка не неажата  сбрасываем флаг
out15:  ;                                               // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 15  ***********************************


  //************** Button Subroutine 16 ( XFC )
  if (keyboard_value >= 730 && keyboard_value < 755) {    // if within the set limits (the button is pressed)

    XFC = true; // пока держим кнопку  слушаем другое VFO

    if ( flag_key_16 == false ) {                           // we check the flag (the previous state)
      flag_key_16 = true;
    }                                     // if it was not installed then install
    else {
      goto out16; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    //************ Trigger Subroutine 16 (or you can place the command here when you press the button !!!!!!)

    goto out16;
  }                                           // выходим обходя флаг (setB0)
  //*********************
  flag_key_16 = false ;                                   // есле кнопка не неажата  сбрасываем флаг
out16:  ;                                               // выход подпрограмма кнопки

  //*********************** End of Triger Subroutine button 16  ***********************************


  //************** Button Subroutine 17 ( TRIGER 7 (Audio Filter Key) )

  if (keyboard_value >= 760 && keyboard_value < 794) {    // if within the specified limits (button pressed)
    if ( flag_key_17 == false ) {                           // check the flag (previous state)
      flag_key_17 = true;
    }                                     // if it was not installed then install
    else {
      goto out17; // there is already FLAG (setB1) (BUTTON IS STILL PRESSED) then we skip the trigger subroutine
    }

    // ************ Trigger Subroutine 17 (or you can place the command here when you press the button !!!!!!)

    if ( bitRead(reg2, 5) == 1 ) {
      bitClear(reg2, 5); // if the bit is set then we reset it
    }
    else {
      bitSet(reg2, 5); // if it was not installed then install
    }
    goto out17;
  }                                           // exit bypassing the flag (setB0)
  flag_key_17 = false ;                                   // if the button is not pressed, we reset the flag
out17:  ;                                               // exit subroutine button




  //*********************** End of Triger Subroutine button 17  ***********************************









} // the END

Now it is just

I can only recommend a total restructure or rewrite.

am sorry this is only the button part of the code its a TAB, shall i post all, like the whole
thing ?
Thanks
Howard

No, you should rewrite it.
If the rest is of equal style and quality, maybe that too.

It's not my code and i would not know where to start
it all works ok no probs, i just wanted to add i button to controll 3 output pins
Thanks anyway
Howard

Copy and paste has its limits, and the quality of your find is quite low,
maybe you should give consideration to learning C++,
or to look further until you find code that you, or a helper, could understand.

Hi
This code do every thing that i need, but not the button i want, some of the buttons have a (Mode_temp, ); think that is a stack (still learning) but think that has some say in what i trying to do.
Howard

oh forgot i can do it using pinmode and case but i can not work out about set bit, read bit ect
Howard

Hope someone can help, i have put a .zip of the full .ino file

Synthesizer_Mega_2560_v2_f-211117a.zip (56.3 KB)

Howard

It's not going to happen. Not without paying someone to do it. Reason, it's going to be a really difficult job even for a seasoned programmer.

Ok i get the point
Thanks anyway
Howard