Ciao _Achille_ grazie per i consigli, comunque ho risolto ed effettivamente ho abbandonato quella soluzione :P posto qui di seguito il codice che ho scritto, funziona bene (se trovate eventuali errori/aggiustamenti fatemi sepere naturalmente)
codice:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main(){
// apro porta seriale in lettura e scrittura
HANDLE hCom;
hCom = CreateFile("COM9", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
//controllo (assolutamente obbligatorio)
if(hCom == INVALID_HANDLE_VALUE){
printf("errore durante l'apertura della porta\n");
return -1;
}
printf("porta aperta\n");
//leggo i parametri correnti
DCB myDCB;
memset(&myDCB, 0, sizeof(DCB));
BOOL Ok = GetCommState(hCom, &myDCB);
printf("BaudRate: %d \n", myDCB.BaudRate);
printf("ByteSize: %d \n", myDCB.ByteSize);
printf("Parity: %d \n", myDCB.Parity);
printf("StopBits: %d \n", myDCB.StopBits);
//Per parità e bit di stop, otteniamo le define di Windows. Per una visualizzazione completa, dovremmo creare degli switch. Esempio per i bit di stop:
// switch(myDCB.StopBits)
// {
// case ONESTOPBIT:
// printf("ONESTOPBIT\n");
// break;
// case ONE5STOPBITS:
// printf("ONE5STOPBITS\n");
// break;
// case TWOSTOPBITS:
// printf("TWOSTOPBITS\n");
// break;
// }
//settare la velocità della porta a 9600 baud
myDCB.BaudRate = CBR_9600;
Ok = SetCommState(hCom, &myDCB);
//aggiungiamo la scrittura della stringa
char msg[]="a";
DWORD NumeroByteScritti = 0;
DWORD NumeroByteDaScrivere = strlen(msg);
Ok = WriteFile(hCom, msg, NumeroByteDaScrivere, &NumeroByteScritti, NULL);
printf("Scritto %d bytes \n", NumeroByteScritti);
system("PAUSE");
//mi metto in "polling" e leggo (il ciclo si interrompe con un tasto)
printf("lettura\n\n");
for(;;){
char c;
DWORD NumeroByteLetti;
Ok = ReadFile(hCom, &c, 1, &NumeroByteLetti, NULL); //NB l'1 sta a indicare che legge un carattere alla volta (compreso il newline "\n")
if(NumeroByteLetti > 0)
printf("%c", c);
if(c=='a'){
printf("TROVATO!\n");
break;
}
int tastouscita = _kbhit();
if(tastouscita)
break;
}
CloseHandle(hCom);
system("PAUSE");
return 0;
}
Come dicevo questo codice funziona bene (o per lo meno a me non da problemi), l'unica cosa che non mi torna è che per farlo funzionare correttamente devo collegare Arduino al pc, e aprire il SerialMonitor dal suo IDE. Dopodichè il C fa tutto a dovere, altrimenti da una marea di simboli strani
secondo voi che può essere?