Salve ragazzi, sto cercando di instaurare una comunicazione tra un programma scritto in C e Arduino, tramite la porta COM9.
Spulciando nella rete ho trovato dei suggerimenti su come configurare la Porta, riporto di seguito il codice che ho scritto:
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_ALL, 0, 0, OPEN_EXISTING, 0, 0);
// settare porta:
// 1) creazione stringa settaggio "nome_porta: baud, parità, bit_di_dati, bit_di_stop"
// la stringa quindi sarà: "COM9: 9600, N, 8, 1"
// 2) costruzione del DCB
DCB DcbComPort;
// 3) prendo lo stato della porta da inserire nel DCB
GetCommState(hCom, &DcbComPort);
// la funzione "BuildCommDCB" ha come parametri: stringa settaggio, un DCB;
// 4) e crea il DCB
BuildCommDCB("COM9: 9600, N, 8, 1", &DcbComPort);
// 5) assegno definitivamente la configurazione alla porta
SetCommState(hCom, &DcbComPort);
// ora la porta seriale è definitivamente aperta
// Gestione del Timeout
COMMTIMEOUTS cto;
// settare tutte le proprietà della struttura
cto.ReadIntervalTimeout = 500;
cto.ReadTotalTimeoutConstant = 500;
cto.ReadTotalTimeoutMultiplier = 500;
cto.WriteTotalTimeoutConstant = 500;
cto.WriteTotalTimeoutMultiplier = 500;
// assegnare il timeout alla porta
SetCommTimeouts(hCom, &cto);
Fin qui che ne dite? E' tutto ok? E' la prima volta che mi cimento in una cosa del genere quindi se ho sbagliato qualche settaggio/qualsiasi altra cosa non esitate a correggermi (:
Comunque ora, so che per mandare/ricevere dati tramite la porta seriale devo usare rispettivamente le funzioni:
codice:
WriteFile(HANDLE,PCVOID,DWORD,PDWORD,LPOVERLAPPED);
ReadFile(HANDLE,PVOID,DWORD,PDWORD,LPOVERLAPPED);
ed è qui che mi blocco..sto cercando ovunque senza trovare nulla che possa farmi capire bene come usarle, non ho per niente chiaro come faccio a settare quei parametri.
Nel mio caso specifico vorrei poter inviare alla Porta il carattere "a", come posso fare?
In oltre nello sketch Arduino ho messo un "Serial.Println("hello");", se da C voglio ricevere come faccio per prelevarlo?
Sto sbagliando qualcosa?
So già di trovare persone molto più esperte di me in questo campo, attendo con ansia le vostre risposte e vi ringrazio in anticipo!!
Vincenzo