goto

Ciao a tutti. Ho terminato la costruzione di un cuboled 555, va bene e sono abbastanza contento del risultato. Lo uso soprattutto per scriverci numeri e lettere e per visualizzarli vorrei usare la funzione goto, ma non so come "farla funzionare" e il reference non è molto chiaro... per adesso faccio copia incolla del codice per ogni lettera/numero, ma mi piacerebbe dire per esempio goto A, e il programma mi stampa direttamente la lettera A. è possibile?

Io non sapevo neache esistesse la goto in arduino. :grin:
Ma una bella funzione? http://arduino.cc/en/Reference/FunctionDeclaration

grazie eepromata! Sbagliavo a metterle dentro i void principali, è per questo che non mi compilava. Non capisco però cosa siano quei valori tra parentesi. Mi puoi spiegare, please? :wink:

Sono i valori con cui lavorerai all'interno della funzione.
Puoi metterne 0 come "quasi" infiniti :smiley:

ti faccio un esempio magari è più chiaro:

int somma(int  addendo1, int addendo2){
int somma = addendo1 + addendo2;
return somma;
}

void loop(){
Serial.println(somma(1,1));
delay(1000);
Serial.println(somma(2,2));
delay(1000);
}

Vedi se ti è più chiaro.

quindi posso anche non dichiararli?

Certo.

Ok, e che cambia? Cioè, se li dichiaro è come se lo facessi ad inizio programma giusto?

SUBSEA:
Ok, e che cambia? Cioè, se li dichiaro è come se lo facessi ad inizio programma giusto?

Più o meno. Si tratta dei parametri che una funzione può volere per compiere un certo calcolo.
Ad esempio, se crei la funzione somma è scontato che tu debba passare almeno 2 valori altrimenti la funzione non avrebbe ragione di essere. Quindi c = somma(a, b);
Una funzione invece che fa lampeggiare un led in fin dei conti non necessita di parametri, se è scritta per quel led. Esempio: lampeggiaLed13();

erpomata:
Io non sapevo neache esistesse la goto in arduino. :grin:

Esiste ma è bene non usarla.
Di solito si può sostituire con i test condizionali.

leo72:
Ad esempio, se crei la funzione somma è scontato che tu debba passare almeno 2 valori altrimenti la funzione non avrebbe ragione di essere.

E no:

int somma(int  addendo){
int somma = addendo + addendo;
return somma;
}

:grin:

leo72:
Esiste ma è bene non usarla.

E' dai tempi del basic (Commodore64) che non la uso più. :smiley:

È per questo che mi sono rivolto a voi!!! In un libro sulla programmazione Arduino che aveva comprato un mio amico avevo guardato il goto ma diceva che non era bello da usare e che appunto non lo spiegava. Comunque grazie ancora una volta a casa oggi faccio delle prove :grin:

SUBSEA:
In un libro sulla programmazione Arduino che aveva comprato un mio amico avevo guardato appunto il goto ma diceva che non era bello da usare e che appunto non lo spiegava.

E quindi tu l'hai voluto usare ugualmente? :~

leo72:
Esiste ma è bene non usarla.

Usare la GOTO in C è ammettere la propria sconfitta come programmatore :grin:

erpomata:

leo72:
Ad esempio, se crei la funzione somma è scontato che tu debba passare almeno 2 valori altrimenti la funzione non avrebbe ragione di essere.

E no:

Potrei cancellarti tutti i post, per questo, lo sai? ]:smiley:

E' dai tempi del basic (Commodore64) che non la uso più. :smiley:

Da quando studiai il Turbo Pascal eliminai il goto dai miei programmi.

Quoto la seconda. :smiley:

mi sembra più elegante il goto che un copia/incolla del codice con dei delay in mezzo per ogni carattere! :stuck_out_tongue_closed_eyes: comunque cosa mi consigliate di usare? degli if e degli serial.print?

Ma che devi fare?
Ci fai vedere un pezzo di codice?

SUBSEA:
mi sembra più elegante il goto che un copia/incolla del cosice con dei delay in mezzo per ogni carattere!

Non ho capito che devi fare.

astrobeed:

leo72:
Esiste ma è bene non usarla.

Usare la GOTO in C è ammettere la propria sconfitta come programmatore :grin:

Io paragono goto alla foglia di fico.

Usare il goto equivale a pulirsi il sedere con la foglia di fico. :grin:

Non è che viene proprio bene, ma se sei nella foresta e ti scappa, non vedo altra soluzione, tra l'altro raggiungi l'obbiettivo velocemente come veloce è il goto.

PS: Survival: Foglia di fico o altra pianta dal fogliame grande va pure bene. :stuck_out_tongue:

Ciao.

Certo! Allora, praticamente ho scritto del cosice per ogni lettera/numero. Per esempio posto la A

{
      Serial.println(dato,DEC);
      digitalWrite(Abilitazione, LOW);
      shiftOut(Seriale, Data, LSBFIRST, dato);
      digitalWrite(Abilitazione, HIGH);
      dato=0b100000100;
    
      Serial.println(dato1,DEC);
      digitalWrite(Abilitazione, LOW);
      shiftOut(Seriale1, Data1, LSBFIRST, dato1);
      digitalWrite(Abilitazione, HIGH);
      dato1=0b10010000;
    
      Serial.println(dato2,DEC);
      digitalWrite(Abilitazione, LOW);
      shiftOut(Seriale2, Data2, LSBFIRST, dato2);
      digitalWrite(Abilitazione, HIGH);
      dato2=0b11010000;
    
      Serial.println(dato3,DEC);
      digitalWrite(Abilitazione, LOW);
      shiftOut(Seriale3, Data3, LSBFIRST, dato3);
      digitalWrite(Abilitazione, HIGH);
      dato3=0b10010000;
    
      Serial.println(dato4,DEC);
      digitalWrite(Abilitazione, LOW);
      shiftOut(Seriale4, Data4, LSBFIRST, dato4);
      digitalWrite(Abilitazione, HIGH);
      dato4=0b10000100;
    }

  delay(500);

poi magari devo far seguire la P, quindi:

{
    Serial.println(dato,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale, Data, LSBFIRST, dato);
    digitalWrite(Abilitazione, HIGH);
    dato=0b100000100;
 
    Serial.println(dato1,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale1, Data1, LSBFIRST, dato1);
    digitalWrite(Abilitazione, HIGH);
    dato1=0b10010000;
  
    Serial.println(dato2,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale2, Data2, LSBFIRST, dato2);
    digitalWrite(Abilitazione, HIGH);
    dato2=0b11010000;
 
    Serial.println(dato3,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale3, Data3, LSBFIRST, dato3);
    digitalWrite(Abilitazione, HIGH);
    dato3=0b10010000;
  
    Serial.println(dato4,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale4, Data4, LSBFIRST, dato4);
    digitalWrite(Abilitazione, HIGH);
    dato4=0b10000100;
  }
  delay(500);
  {
    Serial.println(dato,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale, Data, LSBFIRST, dato);
    digitalWrite(Abilitazione, HIGH);
    dato=0b00000000;
  
    Serial.println(dato1,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale1, Data1, LSBFIRST, dato1);
    digitalWrite(Abilitazione, HIGH);
    dato1=0b00000000;
  
    Serial.println(dato2,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale2, Data2, LSBFIRST, dato2);
    digitalWrite(Abilitazione, HIGH);
    dato2=0b00000000;
  
    Serial.println(dato3,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale3, Data3, LSBFIRST, dato3);
    digitalWrite(Abilitazione, HIGH);
    dato3=0b00000000;
  
    Serial.println(dato4,DEC);
    digitalWrite(Abilitazione, LOW);
    shiftOut(Seriale4, Data4, LSBFIRST, dato4);
    digitalWrite(Abilitazione, HIGH);
    dato4=0b00000000;
  }

  delay(500);

capito il problema?