Go Down

Topic: [RISOLTO]stesse istruzioni ma in uno sketch da errore (Read 1 time) previous topic - next topic

stefa24

Jul 04, 2013, 07:04 pm Last Edit: Jul 04, 2013, 08:39 pm by stefa24 Reason: 1
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
Code: [Select]
//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
Code: [Select]
//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

Code: [Select]
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
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

stefa24

fatto, ma senza risultato
questa è la riga evidenziata dall'IDE
Code: [Select]
  shiftOut(dataPin,clockPin,MSBFIRST,Var1);   

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

gpb01

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

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

Guglielmo
Search is Your friend ... or I am Your enemy !

stefa24

si uso la 1.0.5, con int invece funziona, ma ho notato che basta sostituire
Code: [Select]
#define clockPin 12//Pin connected to SH_CP of 74HC595
con
Code: [Select]
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
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

PaoloP

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

@Guglielmo.
Ne avevamo già parlato.

stefa24

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

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

gpb01


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


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

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

Guglielmo
Search is Your friend ... or I am Your enemy !

nid69ita

#7
Jul 04, 2013, 08:31 pm Last Edit: Jul 04, 2013, 08:33 pm by nid69ita Reason: 1
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 );
my name is IGOR, not AIGOR

leo72

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

fatto adesso funziona, devo imparare ancora molto

grazie

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

nid69ita

Scusa @leo ,  ma è quello senza OUT che da errore perchè    latchPin e dataPin sono parametri della shiftOut
my name is IGOR, not AIGOR

stefa24

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

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

leo72

nid69, sei trooooppo forte  :smiley-sweat:
Ho mescolato gli sketch ed i problemi ah ah ah  :smiley-yell:
Mi vergogno come un cane  :smiley-yell: :smiley-yell:

nid69ita

#13
Jul 04, 2013, 08:44 pm Last Edit: Jul 04, 2013, 08:49 pm by nid69ita Reason: 1

@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 ?
my name is IGOR, not AIGOR

yoshi93


Go Up