ciao
mi aiutate a capire dove sbaglio, ho le stesse istruzioni in uno sketch ma in uno ho un errore e nell'altro no, in pratica il #define funziona solo in questo
//pin per shiftout 74hc595
#define latchPinOUT 11//Pin connected to ST_CP of 74HC595
#define clockPinOUT 12//Pin connected to SH_CP of 74HC595
#define dataPinOUT 10//Pin connected to DS of 74HC595
...
byte Var1;
void setup()
{
//set pins to output so you can control the shift registers
//shiftout define pin modes
pinMode(latchPinOUT, OUTPUT);
pinMode(clockPinOUT, OUTPUT);
pinMode(dataPinOUT, OUTPUT);
...
Var1=B00000000;
}
void loop()
{
...
Var1=B00000000;
digitalWrite(latchPinOUT, LOW); //Pull latch LOW to start sending data
shiftOut(dataPinOUT, clockPinOUT, MSBFIRST, Var1); //Send the data byte 1
digitalWrite(latchPinOUT, HIGH); //Pull latch HIGH to stop sending data
...
}
questo è quello che mi da errore
//pin per shiftout 74hc595
#define latchPin 11//Pin connected to ST_CP of 74HC595
#define clockPin 12//Pin connected to SH_CP of 74HC595
#define dataPin 10//Pin connected to DS of 74HC595
int ritardo;
byte Var1;
void setup()
{
//set pins to output so you can control the shift register
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
ritardo=100;
Var1=B00000000;
}
void loop()
{
delay(200);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,Var1);
digitalWrite(latchPin,HIGH);
delay(ritardo);
}
questo è il messaggio di errore ma non lo comprendo
In file included from rotazione_pinza_shift.ino:22:
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h:111: error: expected ',' or '...' before numeric constant
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h:112: error: expected ',' or '...' before numeric constant
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h: In function 'void loop()':
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h:111: error: too many arguments to function 'void shiftOut(uint8_t)'
rotazione_pinza_shift:40: error: at this point in file
hai fatto la define di due parametri della shiftOut() presente in Arduino.h, clockPin e dataPin
prova ad aggiungere al nome anche solo una x xclockPin e xdataPin
Nel secondo sketch il file Arduino.h forse viene incluso dopo le tue #define.
Però nei file .h lasciare il nome dei parametri no ha senso, secondo me.
Al compilatore basta il tipo:
void shiftOut(uint8_t , uint8_t , uint8_t , uint8_t );
Ho scoperto l'inghippo!
Dovete dirlo, sono trooooppo forte
Il problema è qui: #define latchPinOUT 11//Pin connected to ST_CP of 74HC595 #define clockPinOUT 12//Pin connected to SH_CP of 74HC595 #define dataPinOUT 10//Pin connected to SH_CP of 74HC595
OUT tutto maiucolo probabilmente è un'altra define messa chissà dove.
Se mettete minuscolo (sostituendo ovviamente nel codice): #define latchPinOut 11//Pin connected to ST_CP of 74HC595 #define clockPinOut 12//Pin connected to SH_CP of 74HC595 #define dataPinOut 10//Pin connected to SH_CP of 74HC595
Compila senza errori.
Ecco un altro motivo per NON usare le define in questi casi perché non sai mai che catena di sostituzione ti attiva il compilatore.
stefa24: @leo, a me piace usare il #define, perché la vedo molto legata alla definizione di un pin
stefano
Ne abbiamo discusso in altro thread.
Con la define il compilatore sostituisce brutalmente la parola con quello che definisci e puoi incorrere in molti problemi, ad esempio
quello che è capitato a te.
Poi un altro vantaggio della const byte pinXX=10; è che dichiari il tipo
Tieni conto che la const NON è interpretata dal compilatore come variabile ma fa praticamente come la define, sostituisce ma in maniera più controllata.
Anche a me piaceva più la define, da vecchio programmatore di C, ma ho imparato a usare la const, grazie al forum.
P.S. @leo e figurati, nella fretta, capita.
Però perchè nelle varie .h del core oltre ai tipi dei parametri han lasciato il nome del parametro? Al compilatore non serve. Serve all'IDE ?
stefa24: @leo, a me piace usare il #define, perché la vedo molto legata alla definizione di un pin
stefano
Un #define non è legato a nulla.
Dice solo al compilatore: prendi questo e sostituiscilo con quest'altro. Però poi genera errori come quello che hai trovato tu e non sai perché.
Meglio sempre usare un const, perché in questa maniera vedi subito l'errore.
scusate non sapevo di quella discussione, nonostante segua quotidianamente, se no non avrei iniziato questa, comunque adesso starò più attento alle discussioni
@stefa24, non mi sembra un problema il tuo thread. Anche fossi stato a conoscenza della discussione già fatta sulle define (e mica puoi seguirle tutte !!!), non potevi sapere che quello era il problema del tuo sketch.