[RISOLTO]stesse istruzioni ma in uno sketch da errore

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

ho sostituito il #define con int e funziona

grazie
stefano

fatto, ma senza risultato
questa è la riga evidenziata dall'IDE

  shiftOut(dataPin,clockPin,MSBFIRST,Var1);

stefano

... anche se la commenti il problema rimane ... stai usando la 1.0.5 ? perché ho provato anche io e da lo stesso problema ... :roll_eyes:

Se invece si sostituiscono le #define con int e si assegna il valore ... non da alcun errore ... :roll_eyes: :roll_eyes: :roll_eyes:

Guglielmo

si uso la 1.0.5, con int invece funziona, ma ho notato che basta sostituire

#define clockPin 12//Pin connected to SH_CP of 74HC595

con

int clockPin=12;//Pin connected to SH_CP of 74HC595

e non ho più errore, però rimane la domanda perchè il primo sketch non da errori

stefano

Non commentate i #define, c'è un bug nell'IDE.

@Guglielmo.
Ne avevamo già parlato.

del bug non sapevo, però non capisco perché il primo sketch (scritto con 1.0.4) non da errore

stefano

PaoloP:
...
@Guglielmo.
Ne avevamo già parlato.

Paolo, avevo già provato ... da ugualmente errore, non c'entrano nulla i commenti ... ]:smiley:

Copia il codice e fai la prova (con l'IDE 1.0.5) ... l'unico modo per compilarlo è non usare le #define ... :astonished:

Guglielmo

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

Arduino.h riga 111:
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);

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 :wink:

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.

fatto adesso funziona, devo imparare ancora molto

grazie

stefano

Scusa @leo , ma è quello senza OUT che da errore perchè latchPin e dataPin sono parametri della shiftOut

@leo, a me piace usare il #define, perché la vedo molto legata alla definizione di un pin

stefano

nid69, sei trooooppo forte :sweat_smile:
Ho mescolato gli sketch ed i problemi ah ah ah :stuck_out_tongue_closed_eyes:
Mi vergogno come un cane :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

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 ?

Appunto, per questo è meglio const.

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

stefano

@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. :slight_smile:

Ma non ti devi scusare :wink:

ciao
nessun problema non mi sono sentito rimproverato, ero dispiaciuto di essermi perso quella discussione

stefano