Buongiorno a tutti, sto cercando di far stampare dei dati in binario e in partenza questi sono uint16_t. Sono riuscito a convertirli in stringa, quindi mi accontento anche di una conversione da stringa a binario. Il problema è che non posso usare il Serial.begin() perchè lavoro in un file senza loop e setup(prevalentemente scritto in c). Come posso fare? Aiuto è urgente ![]()
Avessi capito una parola di quello che vuoi ... :![]()
Che significa "convertire in binario" un uint16_t ? Un numero in memoria è sempre rappresentato in binario, uint16_t ci dice solo che occupa 16 bit e null'altro ... quindi ... è già in binario
Cosa realmente ti occorre ?
Guglielmo
P.S.: Evitiamo la frasetta "è urgente" ... la maggior parte di noi qui non la ama ed ... è tentato di non rispondere quando uno chiede così "urgentemente" !
Ma poi come puoi pretendere di stampare qualcosa senza fare Serial.begin()? Non serve che tu lo faccia proprio in quel file, ma da qualche parte nello sketch ci deve essere!
Metti l'inizializzazione della seriale dentro la funzione main(). Quella c'è.
gpb01:
Avessi capito una parola di quello che vuoi ... :Che significa "convertire in binario" un uint16_t ? Un numero in memoria è sempre rappresentato in binario, uint16_t ci dice solo che occupa 16 bit e null'altro ... quindi ... è già in binario
Cosa realmente ti occorre ?
Guglielmo
P.S.: Evitiamo la frasetta "è urgente" ... la maggior parte di noi qui non la ama ed ... è tentato di non rispondere quando uno chiede così "urgentemente" !
Sto tentando di stampare un valore che mi passa una vending machine. Se non lo converto in stringa non stampa proprio nulla, se è in stringa esce in ASCII(ma non va bene perchè un carattere è formato da 8 bit, mentre la VM mi passa valori a 9 bit e quindi me li spezza). Da ciò il mio bisogno di far stampare il tutto in binario, per riuscire a visualizzare il comando passato.
SukkoPera:
Ma poi come puoi pretendere di stampare qualcosa senza fare Serial.begin()? Non serve che tu lo faccia proprio in quel file, ma da qualche parte nello sketch ci deve essere!
si può fare scrivendo in c, uso simpletx
PaoloP:
Metti l'inizializzazione della seriale dentro la funzione main(). Quella c'è.
Il problema è che sono dei protocolli quelli che scrivo in c e non hanno main ne setup ne loop(parlo di MDB, USART e RingBuffer)
Ma sei su un Arduino ? ? ? Che codice usi ?
Guglielmo
:o
gpb01:
Ma sei su un Arduino ? ? ? Che codice usi ?Guglielmo
Si utilizzo un arduino Mega2560 per collegarmi alla VM. Il codice che utilizzo è una mia riedizione di questo
che da solo non funziona(anche perchè è sviluppato per arduino1)
Continuo a non capire ...
... se lavori su Arduino con l'IDE (... quello è un .ino) NON puoi non avere la setup(), la loop() e quant'altro ... quindi o spieghi ESATTAMENTE cosa stai facendo, su che sistema e come stai programmando o la vedo grigia !
Guglielmo
gpb01:
... se lavori su Arduino con l'IDE (... quello è un .ino) NON puoi non avere la setup(), la loop()
Questo non è completamente vero, nulla vieta di scrivere codice in C puro con l'IDE di Arduino, p.e. questo codice viene correttamente compilato, ovviamente senza usare la setup() non è possibile usare il framework offerto da wiring in quanto vengono a mancare i necessari collegamenti.
char a,b;
int main()
{
a=10;
b=a;
}
Però facendo così è possibile utilizzare wiring, con tutte le sue comodità, anche scrivendo codice in C puro.
void setup()
{
Serial.begin(115200);
}
char a,b;
int main()
{
setup();
a=10;
b=a;
Serial.println(a,BIN);
}
gpb01:
Continuo a non capire ...
... se lavori su Arduino con l'IDE (... quello è un .ino) NON puoi non avere la setup(), la loop() e quant'altro ... quindi o spieghi ESATTAMENTE cosa stai facendo, su che sistema e come stai programmando o la vedo grigia !Guglielmo
Si mi scusi, forse non mi sono spiegato bene. Il file è strutturato in modo che ho un main con loop() e setup(), dove però sono solo chiamati 2 metodi, sviluppati in tab parallele. In queste tab(MDB, USART e ringbuf, file .c e .h) il codice è totalmente in c senza setup(), loop() o main(). Qui viene ricollegato il dato che ricevo dalla VM, ed è definito come uint_16t. In questo formato non lo stampava, quindi sono riuscito a convertirlo in stringa e lo stampa in ASCII. Ora sto cercando di farlo stampare in binario e vedere il comdando a 9 bit che mi passa. Sono riuscito a spiegarmi?
astrobeed:
Questo non è completamente vero, nulla vieta di scrivere codice in C puro con l'IDE di Arduino, p.e. questo codice viene correttamente compilato ............................
Interessante ... questa mi mancava ... ![]()
Guglielmo
Michael49:
... Ora sto cercando di farlo stampare in binario e vedere il comdando a 9 bit che mi passa. Sono riuscito a spiegarmi?
Ok, quindi tu semplicemente vuoi "isolare" i vari bit del tuo uint16_t e stampare il singolo valore ...
... la via più "banale" è usare l'apposita funzione BitRead(), la strada invece più diretta sarebbe quella di fare un semplice AND sul bit che si vuole esaminare e stampare il risultato ... ma per quello che ti serve, la prima soluzione è la più semplice.
Guglielmo
Michael49:
In queste tab(MDB, USART e ringbuf, file .c e .h) il codice è totalmente in c senza setup(), loop() o main().
Non ha importanza se in quei file il codice è in C puro, se nel file principale dello sketch hai setup(), come minimo, e loop(), tutte le classi e i metodi di wiring sono disponibili in tutto il codice, ci pensa l'IDE in fase di compilazione a linkare le necessarie librerie ai vari file del codice.
Da come stai esponendo la cosa mi sa tanto che non conosci bene il C/C++, ti stai perdendo nel classico bicchiere d'acqua. ![]()
Senza setup() o loop() ci può stare. Senza main() non compila!!
astrobeed:
Non ha importanza se in quei file il codice è in C puro, se nel file principale dello sketch hai setup(), come minimo, e loop(), tutte le classi e i metodi di wiring sono disponibili in tutto il codice, ci pensa l'IDE in fase di compilazione a linkare le necessarie librerie ai vari file del codice.
Da come stai esponendo la cosa mi sa tanto che non conosci bene il C/C++, ti stai perdendo nel classico bicchiere d'acqua.
No infatti non sono un mago del C, mi hanno buttato a lavorare su questo progetto un po così
ho provato ma non la richiama. Se metto un Serial in una tab come ringBuf ma dice che non è dichiarato.
SukkoPera:
Ma poi come puoi pretendere di stampare qualcosa senza fare Serial.begin()? Non serve che tu lo faccia proprio in quel file, ma da qualche parte nello sketch ci deve essere!
Mi autoquoto...
Michael49:
No infatti non sono un mago del C, mi hanno buttato a lavorare su questo progetto un po cosìho provato ma non la richiama. Se metto un Serial in una tab come ringBuf ma dice che non è dichiarato.
Posta tutto il codice, sotto forma di file .zip in allegato completo di eventuali librerie non standard, così vediamo subito dove sta il problema, altrimenti possiamo andare avanti a parlare per giorni senza riuscire a risolvere nulla.
gpb01:
Ok, quindi tu semplicemente vuoi "isolare" i vari bit del tuo uint16_t e stampare il singolo valore ...
... la via più "banale" è usare l'apposita funzione BitRead(), la strada invece più diretta sarebbe quella di fare un semplice AND sul bit che si vuole esaminare e stampare il risultato ... ma per quello che ti serve, la prima soluzione è la più semplice.Guglielmo
Sto provando col bitRead/write ma in ogni caso se lo metto nelle tab(quelle senza loop e setup) mi da questo errore:
"ringBuf.c.o: In function rBufPushFront': C:\Users\MIKE~1.OZZ\AppData\Local\Temp\build7133033233442356964.tmp/ringBuf.c:41: undefined reference to bitWrite'
collect2.exe: error: ld returned 1 exit status
Errore durante la compilazione"
lo stesso con bitRead
astrobeed:
Posta tutto il codice, sotto forma di file .zip in allegato completo di eventuali librerie non standard, così vediamo subito dove sta il problema, altrimenti possiamo andare avanti a parlare per giorni senza riuscire a risolvere nulla.
Ecco qui, nel ringbuf stanno i miei tentativi di trasformare il dato. Più precisamente in popBack. Grazie mille!
bozza1.zip (11.8 KB)