Serial kommunikasjon

Eksemepl 1, serial fra Arduino

Print ut all data fra arduino serial basert på newline (println):

Uten%20navn

#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, &parameters)) {
        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, &parameters)) {
        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;

}