salve a tutti, premessa sono alle prime armi, ma molto appassionato. da alcuni giorni ho realizzato un progettino con arduino mega2560, attivare in maniera ciclica 11 relè, il tutto funziona correttamente, ma se vado a sostituire il tempo da 1000 a 40000 cioè 40 secondi che è il tempo necessario, mi esce un messaggio di errore, non dovuto al programma perchè facendo la verifica sembra tutto corretto. grazie in anticipo.
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
La palla di vetro purtroppo non l'abbiamo ...
Come possiamo capire il problema se:
-
NON metti il codice che stai usando (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra)
-
Non metti l'errore che ti appare
Guglielmo
gpb01:
La palla di vetro purtroppo non l'abbiamo ...
Forse si... (tiro a indovinare): non è che stai provando ad assegnare a una variabile di tipo INT un il valore di 40000?
ciao
pippo72
esatto purtoppo ho improvvisato se 1000 è un secondo 40000 sono 40 secondi, se così è sbagliato come posso fare?
No, i valori sono giusti, ma ... continui a NON rispondere alle domande che ti si fanno ed in particolare al mio post #2 ...
... quindi, sempre tirando ad indovinare (mai che qualcuno azzecca i numeri del lotto però eh) come ha fatto pippo72, probabilmente hai sbagliato TIPO di varibile e quindi invece di int usa long int.
Guglielmo
ok ho capito se è una variabile int il numero massimo è 32768, oppure se uso long int posso mettere 40000, mentre se invece metto delay 40000 posso farlo, il programma contiene un sacco di timer allora per variare il tempo su tutti contemporaneamente ho creato questa variabile.
Se è un valore costante che passi a diverse delay, puoi anche NON usare una variabile ma una #define
#define K_TEMPO_ATTESA 40000
...
delay(K_TEMPO_ATTESA);
capito ma che vantaggio avrei ad usare define anzichè una variabile?
Hai 3 possibilità:
- se dichiari una variabile, la puoi modificare nel corso del programma (se serve).
- La const variabile è costante ed ha il vantaggio di dichiarare il tipo rispetto a #define, esempio const byte pinLed=10;
- La #define è in realtà solo una sostituzione di parola che fa il pre-compilatore
ogni scelta ha vantaggi/svantaggi dipende del programma e dall'uso che devi fare.
Nel caso in oggetto pare meglio l'uso di #define che inoltre non occupa memoria SRAM.
In teoria sul compilatore gcc la #define e const qualcosa si comportano quasi allo stesso modo, senza occupare memoria (ma su altri compilatori non è detto che const non occupi memoria)
grazie a tutti, martedì collauderò il tutto e vi farò sapere.
luigi1980:
se vado a sostituire il tempo da 1000 a 40000 cioè 40 second
La differenza sta che stai usando una int mentre si dovrebbe usare una unsigned int che arriva a 65535
Se c'è tanta memoria a disposizione, non ci fare caso. Ma se impari a usare le risorse nel modo corretto, non ti troverai problemi anche in futuro.
Se poi è un valore immutabile durante il corso del programma, meglio usare #define.
oggi ho collaudato il tutto, perfetto, ho utilizzato long int, perche non ho mai provato le altre istruzioni, ma replichero' il tutto e ci provero'. grazie a tutti.....
Come ti diceva nid, se è una costante che non devi modificare nel corso del programma usa define. Però può anche usare ad esempio const long
Sprechi quasi niente