Selezionare canale CB con pulsanti

buona sera , sono un nuovo utente , mi chiamo Mario e da poco ho iniziato ad usare arduino ,lo sto programmando per la commutazione canali di un radio cb , dove esso piloterà un pll che in base a quali punti sono alimentati darà una frequenza ovvero un canale specifico. il mio problema è il seguente . io sono riuscito a programmarlo ma solo in fase crescente a me servirebbe la fase decrescente , ovvero se mi torvo nella variante 5 e vorrei tornare nella variante 4 --3 --2 e poi dopo andare avanti ecco un esempio di come lo creato e un video della sua funzione ( ps spero di non aver violato il regolamento)

https://www.youtube.com/watch?v=raWxy9Ti9uA

  int su;
int punto=0;
int retro;
//prova commutatore 40 ch alan 48 old 



void setup (){
pinMode(13,OUTPUT);
pinMode(2,INPUT);
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(3,INPUT);
}
void loop(){
su=digitalRead(2);  // COMMUTAZIONE CANALI 1 
if  ((su==HIGH)and (punto==0)){
  digitalWrite(13,HIGH);
   punto=1;
   delay (1000);
}
else if ((su==HIGH) and (punto==1)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 2
    digitalWrite(12,HIGH);
    punto=3;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==3)){
   digitalWrite(13,HIGH);// COMMUTAZIONE CANALE 3 IL PINN 12 RIMANE ACCESO 
    
    punto=4;
    delay(1000);
  }
   else if ((su==HIGH) and (punto==4)){
   digitalWrite(12,LOW);//COMMUTAZIONE CANELE4
  digitalWrite(11,HIGH);  
 digitalWrite(13,LOW);  
   punto=5;
    delay(1000);
   }
   else if ((su==HIGH) and (punto==5)){
   digitalWrite(13,HIGH);//commutazione canale 5 
   digitalWrite(11,HIGH);
   
   punto=6;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==6)){
   digitalWrite(13,LOW); //commutazione canale 6 
   digitalWrite(12,HIGH);
   
   punto=7;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==7)){
   digitalWrite(13,HIGH);  //commutazione canale 7 
    punto=8;
    delay(1000);
   }
   
   
  else if ((su==HIGH) and (punto==8)){
   digitalWrite(13,LOW);  //commutazione canale 8 
   digitalWrite (12,LOW);
   digitalWrite( 11,LOW);
   digitalWrite (10,HIGH);
    punto=9;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==9)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 9
    punto=10;
    delay(1000);
   }
   
     else if ((su==HIGH) and (punto==10)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 10
    digitalWrite(9,HIGH);
    digitalWrite(10,LOW);
    punto=11;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==11)){
   digitalWrite(13,HIGH);// commutatore canale 11
    punto=12;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==12)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 12
    digitalWrite(12,HIGH);
   punto=13;
    delay(1000);
   }
   else if((su==HIGH) and (punto==13)){
     digitalWrite(13,HIGH);// COMMUTAZIONE CANALE 13
     punto=14;
     delay(1000);
   }
   else if ((su==HIGH) and (punto==14)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 14
    digitalWrite(12,LOW);
    digitalWrite(11,HIGH);
    punto=15;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==15)){
    digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 15
    punto=16;
    delay(1000);
   }
   
   
   else if ((su==HIGH) and (punto==16)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 16
    
    digitalWrite(12,HIGH);
    punto=17;
    delay(1000);
   }
   else if ((su==HIGH) and (punto==17)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 17
    
    punto=18;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==18)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 18
    digitalWrite(12,LOW);
    digitalWrite(11,LOW);
    digitalWrite(10,HIGH);
    punto=19;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==19)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 19
    
    punto=20;
    delay(1000);
   }
   else if ((su==HIGH) and (punto==20)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 20
    digitalWrite(9,LOW);
    digitalWrite(8,HIGH);
    digitalWrite(10,LOW);
    punto=21;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==21)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 21
    punto=22;
    delay(1000);
   }
   else if ((su==HIGH) and (punto==22)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 22
    digitalWrite(12,HIGH);
    punto=23;
    delay(1000);
   }
   else if ((su==HIGH) and (punto==23)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 23
    digitalWrite(12,HIGH);
    punto=24;
    delay(1000);
   }
   else if ((su==HIGH) and (punto==24)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 24
    digitalWrite(12,LOW);
    digitalWrite(11,HIGH);
    punto=25;
    delay(1000);
   }
 else if ((su==HIGH) and (punto==25)){
  digitalWrite(13,HIGH); //COMMUTAZIONE CANALE 25
    punto=26;
    delay(1000);
   }
 else if ((su==HIGH) and (punto==26)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 26
    digitalWrite(12,HIGH);
    punto=27;
    delay(1000);
   }
 else if ((su==HIGH) and (punto==27)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 27
     punto=28;
    delay(1000);
   }
   else if ((su==HIGH) and (punto==28)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 28
    digitalWrite(12,LOW);
    digitalWrite(11,LOW);
    digitalWrite(10,HIGH);
    punto=29;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==29)){
   digitalWrite(11,LOW);//COMMUTAZIONE CANALE 29
    digitalWrite(12,LOW);
    digitalWrite(13,HIGH);
    punto=30;
    delay(1000);
   }
   else if ((su==HIGH) and (punto==30)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 30
    digitalWrite(10,LOW);
    digitalWrite(9,HIGH);
    punto=31;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==31)){ 
    digitalWrite(13,HIGH);// COMMUTAZIONE CANALE 31
    punto=32;
    delay(1000);
   }
   
   else if ((su==HIGH) and (punto==32)){
    digitalWrite(13,LOW);//COMMUTAZIONE CANALE 32
    digitalWrite(12,HIGH);
    punto=33;
    delay(1000);
   }
   else if ((su==HIGH) and (punto==33)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 33
    
    punto=34;
    delay(1000);
   }
 else if ((su==HIGH) and (punto==34)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 34
    digitalWrite(12,LOW);
    digitalWrite(11,HIGH);
    punto=35;
    delay(1000);
   }
 else if ((su==HIGH) and (punto==35)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 35
    
    punto=36;
    delay(1000);
   }
 else if ((su==HIGH) and (punto==36)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 36
     digitalWrite(12,HIGH);
    punto=37;
    delay(1000);
   }
 else if ((su==HIGH) and (punto==37)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 37
     punto=38;
    delay(1000);
   }
 else if ((su==HIGH) and (punto==38)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 38
    digitalWrite(12,LOW);
    digitalWrite(11,LOW);
   digitalWrite(10,HIGH);
    punto=39;
    delay(1000);
   }
 else if ((su==HIGH) and (punto==39)){
   digitalWrite(13,HIGH);//COMMUTAZIONE CANALE 39
     punto=40;
    delay(1000);
   }
  else if ((su==HIGH) and (punto==40)){
   digitalWrite(13,LOW);//COMMUTAZIONE CANALE 40
    digitalWrite(12,LOW);
    digitalWrite(11,LOW);
    digitalWrite(10,LOW);
    digitalWrite(9,LOW);
    digitalWrite(8,LOW);
    punto=0;
    delay(1000);
   }
   }

saluti Mario

Sí, hai violato il regolamento (che penso che non hai letto).

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Il Tuo stile di programmazione é pessimo. 1) non usare delay ma millis() vedi esempio http://arduino.cc/en/Tutorial/BlinkWithoutDelay 2) non settare solo certe uscite a ogni step ma tutte 3) separa la schelta del canale dal pilotaggio del PLL

Una bozza di sketch che non h controllato su errori di sintassi o di programmazione:

long previousMillis = 0;
long interval = 1000;

void setup()
{
...
}
void loop ()
{
unsigned long currentMillis = millis();
su=digitalRead(2);
giu = digitalRead(3);

if (su==1 &&  currentMillis - previousMillis > interval)
{
chanale++;
previousMillis = currentMillis;  
if (punto==41) punto =0;
cambiatocanale == 1;
}

if (giu==1 &&  currentMillis - previousMillis > interval)
{
chanale--;
previousMillis = currentMillis;  
cambiatocanale == 1;
if (punto==-1) punto =40;
}


if(cambiatocanale==1)
{
digitalWrite(13 , bitRead(punto, 0) ); 
ecc
cambiatocanale =0;
}

}

Ciao Uwe

uwefed: Sí, hai violato il regolamento (che penso che non hai letto).

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Il Tuo stile di programmazione é pessimo. 1) non usare delay ma millis() vedi esempio http://arduino.cc/en/Tutorial/BlinkWithoutDelay 2) non settare solo certe uscite a ogni step ma tutte 3) separa la schelta del canale dal pilotaggio del PLL

Una bozza di sketch che non h controllato su errori di sintassi o di programmazione:

long previousMillis = 0;
long interval = 1000;

void setup() { ... } void loop () { unsigned long currentMillis = millis(); su=digitalRead(2); giu = digitalRead(3);

if (su==1 &&  currentMillis - previousMillis > interval) { chanale++; previousMillis = currentMillis;   if (punto==41) punto =0; cambiatocanale == 1; }

if (giu==1 &&  currentMillis - previousMillis > interval) { chanale--; previousMillis = currentMillis;   cambiatocanale == 1; if (punto==-1) punto =40; }

if(cambiatocanale==1) { digitalWrite(13 , bitRead(punto, 0) ); ecc cambiatocanale =0; }

}




Ciao Uwe

come prima cosa grazie che mi hai risposto , adesso tutto il resto verrà fatto anzi dato la mia scarsa se non pessima ,preparazione in programmazione pensavo che il programma era in leggibile . cmq adesso poco ala volta lo andrò riscrivendo. Ma come prima cosa è meglio che mi studio bene ma bene tutte le funzioni almeno le basilari saluti Mario