Godzinkę temu zacząłem się wgryzać w temat. Mam odczyt danych z żyroskopu do atmegi i dalej wysyłam to przez RT232RL (przejściówka usb-rs232) do kompa.
Po pierwsze musisz ustawić w atmedze, w menadżerze urządzeń i w programie odbierającym te same parametry RS232 jak na przykład baud rate.
Program wyświetla mi dane w konsoli :)
*http:*www.hotfix.pl/c-c++-winapi-komunikacja-poprzez-port-com-rs-232-a334.htm
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
static DCB dcb;
static HANDLE hNumPort;
static char lpBuffor_read[33], lpBuffor_write[33];
static DWORD RS_ile;
/*
dcb - struktura DCB (Device Control Block) definiująca rodzaj połączenia
hNumPort - uchwyt do otwartego portu
lpBuffor_read, lpBuffor_write - tablice z danymi odbieranymi oraz wysyłanymi
RS_ile - zmienna trzymająca informację ile czego wysyłamy lub czytamy
*/
int main(int argc, char *argv[])
{
string port = "COM2"; //Dla COM20 nie działa.
//Uchwyt do portu COM
hNumPort = CreateFile(port.c_str(), GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
//hNumPort = CreateFile("\\\.\COM20", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
//HANDLE hFile = CreateFile("COM2", GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
//Ustawienie parametrów portu COM
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = CBR_57600;
//dcb.BaudRate = CBR_9600;
dcb.fParity = FALSE;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
/*
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDsrSensitivity = FALSE;
dcb.fAbortOnError = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;
*/
/*
dcb.BaudRate = CBR_9600; // prędkość transmisji, CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600
dcb.fParity = TRUE; //TRUE jeśli ustawiamy kolejną opcję dla sprawdzenia parzystości
dcb.Parity = EVENPARITY; //Ustawienie parzystości: EVENPARITY (parzysta), MARKPARITY (bit parzystości 1), NOPARITY (bez bitu parzystości), ODDPARITY (nieparzysta)
dcb.StopBits = ONESTOPBIT; // Ustawienie bitu stopu: ONESTOPBIT (jeden bit), TWOSTOPBITS (dwa bity)
dcb.ByteSize = 7; //Liczba bitów wysyłanych/odebranych danych (UWAGA wartościod 5 do 8)
dcb.fDtrControl = DTR_CONTROL_ENABLE; //Kontrola linii DTR: DTR_CONTROL_DISABLE (sygnał nieaktywny), DTR_CONTROL_ENABLE (sygnał aktywny), DTR_CONTROL_HANDSHAKE
dcb.fRtsControl = RTS_CONTROL_ENABLE; //Kontrola linii RTS: RTS_CONTROL_DISABLE (sygnał nieaktywny), RTS_CONTROL_ENABLE (sygnał aktywny), RTS_CONTROL_HANDSHAKE
*/
//Połączenie się z portem COM
if(!SetCommState(hNumPort, &dcb)) cout<<"Nie udalo sie polaczyc z portem "<<port<<endl;
else cout<<"Polaczono z portem "<<port<<endl;
/*
//Pisanie do urządzenia
strcpy(lpBuffor_write, "RES0070002");// Niech to będzie przykładowe polecenie dla urządzenia
WriteFile(hNumPort, lpBuffor_write, strlen(lpBuffor_write), &RS_ile, 0);
*/
int i = 0;
while(i<10)
{
//odczytanie 15 znaków
ReadFile(hNumPort, lpBuffor_read, 15, &RS_ile, 0);
cout<<RS_ile<<": "<<lpBuffor_read<<endl;
Sleep(1000);
}
//Zamknięcie portu COM
CloseHandle(hNumPort);
system("PAUSE");
return EXIT_SUCCESS;
}