Serial monitor in ascii - why ?

piazzando un 1 nella eeprom, se lo voglio leggere e stampare su serial monitor devo convertire in decimale, oppure in binario o altro.

se stampo direttamente con il print, senza conversione, non appare niente.

Serial.print(EEPROM.read(0));

vediamo se ho capito, il monitor seriale converte tutto in ascii automaticamente, e quindi il numeo 1 in ascii non corrispondendo a nessuna cifra, non mi stampa nulla ?

perche' questa scelta ?

grazie a tutti

Testato:
vediamo se ho capito, il monitor seriale converte tutto in ascii automaticamente, e quindi il numeo 1 in ascii non corrispondendo a nessuna cifra, non mi stampa nulla ?

In ASCII i caratteri da 0 a 32 sono funzioni/simboli speciali, non hanno nessun carattere visibile abbinato, se invii direttamente la lettura della EEPROM, ovvero 0x01 è più che normale non vedere nulla.

Ma se vuoi leggere il numero numerico (e con IDE <0023) aggungi il “,DEC”:

Serial.print(EEPROM.read(0),DEC);

Ciao Uwe

non avete capito niente, siete forse dei principianti ? :stuck_out_tongue_closed_eyes:

a quello che avete scritto c'ero arivato, come dimostra il mio messaggio, la domanda era WHY ? perche' questa scelta ? perche' il serial monitor di default stampa in ascii ?

quindi la 023 ha deciso di scrivere in decimale ? e' quindi una scelta dell'ide quella di stampare ascii ?

grazie

Testato:
non avete capito niente, siete forse dei principianti ? :stuck_out_tongue_closed_eyes:

a quello che avete scritto c'ero arivato, come dimostra il mio messaggio, la domanda era WHY ? perche' questa scelta ? perche' il serial monitor di default stampa in ascii ?

Forse anche TU Ti sei espresso un po poco chiaro :wink: :wink: :wink:

Testato:
quindi la 023 ha deciso di scrivere in decimale ? e' quindi una scelta dell'ide quella di stampare ascii ?

Non ho detto quello. Ho detto che fino alla versione 0023 funziona sicuramente il ,DEC. con la 1.0 ci sono cambiamenti e come segnalato il ,BYTE non funziona. non sapendo sono andato sul sicuro

Ciao Uwe

logicamente scherzo, so benissimo che parliamo di due cime del forum,

io piu' che ripetere per la terza volta la domanda non posso, il mio topic e' atto a capire, perche' il serial monitor mi scrive in ascii, perche' questa scelta ?

Testato:
il mio topic e' atto a capire, perche' il serial monitor mi scrive in ascii, perche' questa scelta ?

Perché è una emulazione terminale e come tale lavora con i caratteri ASCII, se vuoi vedere la codifica hex devi usare appositi programmi che lo prevedono.
La tua domanda ha la stessa valenza di chiedere perché un auto ha il volante invece della cloche :grin:

grande astrobeed; non mi sarebbe venuto in mente.
Ciao Uwe

+1 XD

mi fa piacere io vi faccia divertire :slight_smile:
lo ritengo un pagamento

ma permettetemi di continuare, quello che mi ha un po' "fatto strano" e' che se mando in Print una variabile che contiene 1, viene stampato 1, mentre se mando in stampa il valore della eeprom che contiene 1 viene stampato il nulla.

non dovrebbe in entrambi i casi stampare il nulla ?

avendo pagato ritengo mio diritto ricevere risposta :slight_smile:

Dipende dal tipo di dati usato come fonte.
Ecco l'estratto dal Reference:

print()
(tradotto)Stampa i dati sulla porta seriale in testo ASCII leggibile. Il comando può assumere varie forme. I numeri sono stampati usando un carattere ASCII per ogni cifra. I numeri in virgola mobile sono stampati alla stessa maniera con cifre ASCII, prendendo come default 2 cifre decimali. I byte sono spediti come un singolo carattere. I caratteri e le stringhe sono spedite come sono.

Come vedi, un numero contenuto in una variabile viene spedito con 1 carattere ASCII per ogni cifra (quindi 1 diventa "1") mentre i byte (ed una cella di EEPROM è un byte) vengono spediti come singolo carattere per cui per 1 viene spedito il carattere ASCII 1, da qui il vedere il carattere "invisibile" (non è "nulla", semplicemente non è visualizzabile).

ora e' tutto piu' chiaro,
ma questa scelta viene da lontano o dipende da come e' stato scritto l'IDE e quindi e' uan scelta dell'arduino team ?

grazie

Testato:
ma questa scelta viene da lontano o dipende da come e' stato scritto l'IDE e quindi e' uan scelta dell'arduino team ?

L'IDE, o il serial monitor, non c'entrano nulla con questa cosa, semmai devi chiederti perché la serial.print() di default converte le variabili maggiori di un singolo byte, cioè int, long int e float (per questi solo i primi due decimali se non diversamente specificato), nel loro corrispondente in stringa mentre per quelle a singolo byte, cioè char, unsigned char (= byte), invia il loro valore reale e non una stringa in formato ascii.
Il motivo di quanto sopra è "sono scelte del programmatore che ha scritto la classe serial e i relativi metodi".

e non sarebbe piu' logico scegliere un modo di stampa ed usarlo per tutti ?

il programmatore di cui parli e' l'inventore del C ? quindi cambiare una cosa del genere creerebbe problemi di compatibilita' ?

Testato:
e non sarebbe piu' logico scegliere un modo di stampa ed usarlo per tutti ?

Questa domanda falla all'Arduino Team, sono loro ad aver scritto le varie classi/funzioni di Arduino e ad aver fatto tutte le scelte.

grazie non avevo capito la situazione.

ma quindi tu dici che non c'e' una ragione dietro a tutto cio', e' solo una scelta sbagliata ?

perche' non la si corregge ? come funziona, si manda una mail ad "arduino" e gli si dice, credo sia sbagliata la gestione del comando print ?

Non credo che modifichino una libreria solo perché fa comodo ad 1 sola persona :stuck_out_tongue:
E tutte le milioni di righe di codice in circolazione, chi le cambia? Tu, perché sei tu ad aver chiesto la modifica? :smiley:

Testato:
ma quindi tu dici che non c'e' una ragione dietro a tutto cio', e' solo una scelta sbagliata ?
perche' non la si corregge ?

Che sia sbagliata è solo una tua opinione, per me invece è corretta perché normalmente i valori numerici a singolo byte che si inviano sulla seriale sono quasi sempre in binario e raramente come stringhe ascii, e poi ti ho già detto che è sempre bene non affidarsi ai default di sistema, con le nuove versioni possono anche cambiare, e specificare sempre tutti i parametri di una funzione.