erpomata:
Io non sapevo neache esistesse la goto in arduino.
Esiste ma è bene non usarla.
Di solito si può sostituire con i test condizionali.
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?
Scusa ci ho capito poco dal quel codice e magari altri più preparati di me ti aiuteranno meglio.
Io ci provo. Ma se fai una cosa del genere?
void scriviLettera(int dataPin, int clock, int value){
Serial.println(value,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(dataPin, clock, LSBFIRST, value);
digitalWrite(Abilitazione, HIGH);
dato=0b100000100; <-- questo non so a cosa serva.
}
void loop(){
scriviLettera(Seriale, Data, dato);
scriviLettera(Seriale1, Data1, dato1);
scriviLettera(Seriale2, Data2, dato2);
}
ecc...?
Bè l'ho buttato giù così come mi è venuto e soprattutto non l'ho provato.
Vedi un pò
ok, non ho ancora capito come usarla... Dopo che mia mamma mi ha praticamente distrutto il cuboled e averlo ripristinato, sono di nuovo sopra al software, senza capire come creare la funzione da richiamare col goto. Faccio un esempio:
void A(){
digitalWrite(13,HIGH);
}
void setup(){
pinMode(13,OUTPUT);
}
void loop(){
goto A;
}
così per voi va bene? Per l'ide no...
Butta via quel "goto" ...
... basta che scrivi A(); e lui richiama la tua funzione void A()
Guglielmo
P.S. : Cerca di dimenticarti proprio che esiste il "goto" ...
Grazie gpb01!!! capito e risolto il problema! Quindi col goto stavo a complicarmi inutilmente la vita, giusto? bè, l'importante è che adesso funzioni!
Usato come lo avevi usato, era proprio sbagliato sintatticamente ... si usa per saltare ad una "label" non per richiamare una funzione e ...
... ripeto, in ogni caso, cerca di dimenticare che esiste quell'istruzione e fa come se non ci fosse !
Guglielmo
mmmmm.... purtroppo l'entusiasmo iniziale provato su un blinkè miseramente sfumato quando ho applicato il concetto allo scketch del cubo...
Faccio un esempio per la A e per la B:
int Abilitazione = 8;
int Seriale = 12;
int Data = 13;
int Seriale1 = 10;
int Data1 = 11;
int Seriale2 = 7;
int Data2 = 9;
int Seriale3 = 6;
int Data3 = 5;
int Seriale4 = 4;
int Data4 = 3;
byte dato = 0;
byte dato1 = 0;
byte dato2 = 0;
byte dato3 = 0;
byte dato4 = 0;
void 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;
}
void B(){
{
Serial.println(dato,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale, Data, LSBFIRST, dato);
digitalWrite(Abilitazione, HIGH);
dato=0b111111111;
Serial.println(dato1,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale1, Data1, LSBFIRST, dato1);
digitalWrite(Abilitazione, HIGH);
dato1=0b10110100;
Serial.println(dato2,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale2, Data2, LSBFIRST, dato2);
digitalWrite(Abilitazione, HIGH);
dato2=0b10010100;
Serial.println(dato3,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale3, Data3, LSBFIRST, dato3);
digitalWrite(Abilitazione, HIGH);
dato3=0b10001100;
Serial.println(dato4,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale4, Data4, LSBFIRST, dato4);
digitalWrite(Abilitazione, HIGH);
dato4=0b10000100;
}
void setup()
{
pinMode(Abilitazione, OUTPUT);
pinMode(Data, OUTPUT);
pinMode(Seriale, OUTPUT);
pinMode(Data1, OUTPUT);
pinMode(Seriale1, OUTPUT);
pinMode(Data2, OUTPUT);
pinMode(Seriale2, OUTPUT);
pinMode(Data3, OUTPUT);
pinMode(Seriale3, OUTPUT);
pinMode(Data4, OUTPUT);
pinMode(Seriale4, OUTPUT);
Serial.begin(9600);
}
void loop(){
A();
delay(1000);
B();
delay(1000);
}
Praticamente dovrebbe alternare la A e la B ogni secondo, ma la compilazione non va abuon fine...
prova a togliere qualche parentesi graffa di troppo
... impara a leggere i messaggi di errore del compilatore e cerca di capirli
Comunque ... c'è una parentesi graffa di troppo ... guarda la void B() hai messo una graffa subito dopo ed una subito sotto ...
Se inoltre lasci una riga vuota tra le varie funzioni, migliori la leggibilità !
int Abilitazione = 8;
int Seriale = 12;
int Data = 13;
int Seriale1 = 10;
int Data1 = 11;
int Seriale2 = 7;
int Data2 = 9;
int Seriale3 = 6;
int Data3 = 5;
int Seriale4 = 4;
int Data4 = 3;
byte dato = 0;
byte dato1 = 0;
byte dato2 = 0;
byte dato3 = 0;
byte dato4 = 0;
void 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;
}
void B() {
Serial.println(dato,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale, Data, LSBFIRST, dato);
digitalWrite(Abilitazione, HIGH);
dato=0b111111111;
Serial.println(dato1,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale1, Data1, LSBFIRST, dato1);
digitalWrite(Abilitazione, HIGH);
dato1=0b10110100;
Serial.println(dato2,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale2, Data2, LSBFIRST, dato2);
digitalWrite(Abilitazione, HIGH);
dato2=0b10010100;
Serial.println(dato3,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale3, Data3, LSBFIRST, dato3);
digitalWrite(Abilitazione, HIGH);
dato3=0b10001100;
Serial.println(dato4,DEC);
digitalWrite(Abilitazione, LOW);
shiftOut(Seriale4, Data4, LSBFIRST, dato4);
digitalWrite(Abilitazione, HIGH);
dato4=0b10000100;
}
void setup() {
pinMode(Abilitazione, OUTPUT);
pinMode(Data, OUTPUT);
pinMode(Seriale, OUTPUT);
pinMode(Data1, OUTPUT);
pinMode(Seriale1, OUTPUT);
pinMode(Data2, OUTPUT);
pinMode(Seriale2, OUTPUT);
pinMode(Data3, OUTPUT);
pinMode(Seriale3, OUTPUT);
pinMode(Data4, OUTPUT);
pinMode(Seriale4, OUTPUT);
Serial.begin(9600);
}
void loop() {
A();
delay(1000);
B();
delay(1000);
}
Guglielmo
Edit : M'ha preceduto Brunello ... lui la fatta breve ...