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.
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?
Sono i valori con cui lavorerai all'interno della funzione.
Puoi metterne 0 come "quasi" infiniti
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.
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;
}
leo72:
Esiste ma è bene non usarla.
E' dai tempi del basic (Commodore64) che non la uso più.
È 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
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
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? ]
E' dai tempi del basic (Commodore64) che non la uso più.
Da quando studiai il Turbo Pascal eliminai il goto dai miei programmi.
Quoto la seconda.
mi sembra più elegante il goto che un copia/incolla del codice con dei delay in mezzo per ogni carattere! 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
Io paragono goto alla foglia di fico.
Usare il goto equivale a pulirsi il sedere con la foglia di fico.
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.
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?