Eksemepl 1, serial fra Arduino
Print ut all data fra arduino serial basert på newline (println):
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
HANDLE handler = CreateFile(
"\\\\.\\COM3",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(handler == INVALID_HANDLE_VALUE) {
if(GetLastError() == ERROR_FILE_NOT_FOUND) {
printf("ERROR: Kunne ikke koble til, COM-porten finnes ikke");
} else {
printf("ERROR: %lu", GetLastError());
}
return 601;
}
DCB parameters = {0};
// Prøv å hent default parametere på com-porten
if(!GetCommState(handler, ¶meters)) {
printf("ERROR: Greide ikke hente parametere fra COM-porten");
return 601;
}
// Sett parametere
parameters.BaudRate = CBR_115200;
parameters.ByteSize = 8;
parameters.StopBits = ONESTOPBIT;
parameters.Parity = NOPARITY;
parameters.fDtrControl = DTR_CONTROL_ENABLE;
// Sett parametere på porten, reinitaliserer hardware med de nye instillingene
if(!SetCommState(handler, ¶meters)) {
printf("ERROR: Greide ikke sette parametere på port (error %lu)", GetLastError());
return 602;
}
// Tilkoblet, slett all output/input
PurgeComm(handler, PURGE_RXCLEAR | PURGE_TXCLEAR);
COMSTAT status;
DWORD errors;
unsigned char buffer;
std::string output;
// Loop
for(;;) {
DWORD bytesRead;
// Hent nåværende status på COM-port
ClearCommError(handler, &errors, &status);
// Data i kø
if(status.cbInQue > 0)
{
bool endCurrentRead = FALSE;
while(!endCurrentRead) {
// Les 1 og 1 byte
ReadFile(handler, &buffer, 1, &bytesRead, NULL);
if(bytesRead > 0) {
// Neste byte er ikke newline, legg til i string
if(buffer != '\n') {
output += buffer;
}
// Neste byte er newline, return
else {
endCurrentRead = true;
}
} else {
printf("ERROR: Ingen bytes ble lest av\n");
break;
}
}
// Print output
std::cout << output << "\n";
// Reset linje
output = "";
}
}
return true;
}