rispondo quì.
char dir_in[100] = "E:\\Steve\\Personale\\Data\\";
già quà qualcosa non mi torna. questo è un path windows, non unix...
poi sarà che mi perdo tra l'identazione "a cazzum" e le verie righe commentate, ma non mi pare di vedere nulla che scrive sulla seriale...
vorrei sapere se su questa versione di linux ho problemi particolari legati a differenze di sintassi, di puntamento alle periferiche o di compilazione
assolutamente no, anzi.. il linguaggio è uno (anzi più) standard del compilatore, la gestione delle periferiche è standard derivata da kernel e driver in uso, l'unica cosa che può variare sono i path delle periferiche ma in tal caso basta fare un file di configurazione per UDEV, se guardi come installare arduino su linux, la sezione "the hard way", trovi tutta la spiegazione di come creare le regole. MA stiamo divagando, quello NON è il tuo problema, sarebbe bello avere l'errore di compilazione
Tra l'altro poi Arduino mi deve leggere il valore per intero e non come sequenza dei valori dei caratteri...
ah, la seriale "parla" carattere per carattere, quindi sei tu che lato arduino devi ricomporre la stringa di partenza. Io di solito per fare in fretta uso un formato tipo
*stringa da inviare#
quindi se leggo * cancello querllo che ho letto fin'ora (buffer) e setto una flag (esempio ok = true), se leggo # e la flag è true, elaboro il contenuto del buffer e setto la flag a false, altrimenti ignoro il tutto (al messaggio manca un pezzo), qualsiasi altro carattere va a finire nel buffer.
edit: il vantaggio di quetso metodo è che puoi debuggarlo/leggere i valori in modo umano da serial monitor i metodi seguenti invece a serial monitor mandano una serie di simboli strani, dai un'occhiata alla tabella ascii per capire i valori inviati, ricavarne il binario, unire i 2 byte e convertire in numero leggibile da un umano.
nel tuo caso, se invii solo numeri interi, volendo ottimizzare, possiamo pensare in byte. Sappiamo che un int è composto da 2 byte su arduino; esempio:
byte0 = *
byte1 = primo byte del numero
byte2 = secondo byte del numero
però * in byte è un numero anche lui! come risolvere questo conflitto (anche byte 1 e 2 potrebbero avere lo stesso valore di *!). In tal caso uso un sistema "a spanne" o "a ritardo".
"a spanne": leggo tanti byte, facciamo una ventina, e controllo che la presenza del valore corrispondente a * sia ogni 3 byte a partire dai primi 3 byte. Al che sorgono i casi:
- nessuna corrsipondenza: qualcosa sta andando storto. Baudrate errati?
- una sola corrispondenza: allora il byte corrispondente è l'inizio, ora sai da dove iniziare a leggere
- più di una corrispondeza: in tal caso o byte1 o byte2 per puro caso continuano ad avere il valore di * e quindi sono indistinguibili dall'inizio. Leggi altri 20 valori e ricomincia.
"a ritardo":
lo " scrittore" aspetta un segnale di inizio da parte del "lettore"; in tal caso siamo sicuri che i byte letti siano in sequenza e diamo per scontato che non perdiamo dati. volendo possiamo anche fare a meno del byte0, riducendo di 1/3 la banda necessaria!
La richiesta può essere fatta solo una volta nel setup o ad ogni lettura.
questo è il sistema migliore in termini di banda, se la richiesta è fatta solo una volta, ma richiede di portare sia tx che rx, in oltre richiede di resettare sia arduino che il programma PC ogni volta che modifichi una delle due parti, ed è sensibile agli errori (perdita di un byte)