Serielle Kommunikation zwischen PC und MC



  • Hallo,

    ich habe folgenden Code zur Kommunikation zwischen meinem PC und dem Mikrocontroller Board Arduino erstellt:

    #include <windows.h>
    #include <stdio.h>
    #include <stdarg.h>
    #include <time.h>
    #include <inttypes.h>
    
    int main(int argc, char* argv[])
    {   
            char read = 'h';
    
            while(1)
            {
              FILE *fileR; 
            fileR = fopen("COM4:","r");    
            printf("Empfangene Daten: ");
            read = fgetc(fileR);
            printf("[%c] \n\n", read);
            fclose(fileR); /////
    
            Sleep(100);
    
             FILE *file; 
            file = fopen("COM4:","w");          
            printf("Sende Daten String ?192 an COM Port 4...\n");
            fprintf(file,"?192");
            fclose(file); /////
            Sleep(100);
            }
        }
    

    Das Senden der Daten funktioniert einwandfrei, nur das Empfangen nicht. Ich hatte erst das ganze über ein HANDLE laufen, doch jedes mal wenn die Serielle Schnittstelle von dem C Programm aus geöffnet wird, startet das MC Board neu, so dass es am optimalsten wäre, wenn die Schnittstelle (COM4) in dem C Programm nur einmal geöffnet wird und dann die Daten empfängt (der empfangene String endet immer mit einen Zeilenumbruch) und anschließend direkt den String ?192 sendet.

    Wo liegt mein Fehler beim Lesen der Daten mit fopen?

    Vielen Dank!

    LG Dennis



  • Hab Null Erfahrung mit Arduino, aber in Sachen C hätte ich eine Idee.

    #include <windows.h>
    #include <stdio.h>
    #include <stdarg.h>
    #include <time.h>
    #include <inttypes.h>
    
    int main(int argc, char* argv[])
    {   
            char read = 'h';
    
              FILE *file; 
            file = fopen("COM4:","rw");    
            while(1)
            {
            printf("Empfangene Daten: ");
            read = fgetc(file);
            printf("[%c] \n\n", read);
    
            Sleep(100);
    
            printf("Sende Daten String ?192 an COM Port 4...\n");
            fprintf(file,"?192");
            Sleep(100);
            }
            fclose(file); /////
        }
    

    Das würde das Problem

    doch jedes mal wenn die Serielle Schnittstelle von dem C Programm aus geöffnet wird, startet das MC Board neu,

    wegmachen.



  • Super Dankeschön.
    Aber so sind die empfangenen Daten trotzdem noch nicht in der Variable read bis zum Zeilenumbruch?!



  • read kann auch nur ein Zeichen aufnehmen.
    Da stehen die empfangenen Zeichen zeitlich nacheinader drin.

    Schau dir mal fgets an. Das liest bis zu einem '\n' (sofern genug Platz vorhanden ist). http://www.cplusplus.com/reference/cstdio/fgets/


Log in to reply