serielle schnittstelle



  • hCom = CreateFile ("COM1", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
      dcb.DCBlength = sizeof(DCB);  // Laenge des Blockes MUSS gesetzt sein!
      GetCommState (hCom, &dcb);    // COM-Einstellungen holen und aendern
      dcb.BaudRate  = 9600;         // Baudrate
      dcb.ByteSize  = 8;            // Datenbits
      dcb.Parity    = NOPARITY;     // Parität
      dcb.StopBits  = ONESTOPBIT;   // Stopbits
    
      SetCommState (hCom, &dcb);    // COM-Einstellungen speichern
    
     if(!SetCommMask(hCom, EV_RXCHAR ))
        printf ("fehler SetCommmMask");
     if(WaitCommEvent(hCom, &dwEventMask, NULL))
     {
         char *Byte[10];
         DWORD dwBytesRecieved;
    
         do{                    
          ReadFile (hCom,&Byte,sizeof (Byte), &dwBytesRecieved, NULL);            
          //if (dwBytesTransferred > 0)            
          printf("%d\n\r",Byte);
          printf("%d",dwBytesRecieved);            
          } while (dwBytesRecieved > 0);
    
     }
    
       CloseHandle(hCom); // COM1 schließen
    

    hallo
    wenn ich eine zahl vom comport auslesen möchte, sehe ich stat den zahl irgend was anders..es wäre nett´, wenn jemand helfen kann..
    Viele Grüsse...


  • Mod

    Was erwartest du, was bekommst du?



  • titel schrieb:

    char *Byte[10];
    ...      
    printf("%d\n\r",Byte);
    

    %d und char *Byte[10] passt irgendwie nicht (so wie du es benutzt).

    Weißt du überhaupt was ein char *Byte[10] ist?



  • sory, das sollte eigentlich so sein.

    printf("Byte : %c\n\r",Byte);
    

    ich möchte vom comport eine zahl zum Bsp. 10,5 auslesen.



  • Nein, das ist es auch nicht.

    Mit %c gibst du ein einzelnes Zeichen aus. Das wäre bei dir die '1'.
    Ein char *Byte[10]; ist ein Array aus zehn Zeigern, die auf char zeigen.

    Du möchtest aber ein einfaches Array aus char haben und das als String ausgeben.

    char Byte[10];
    
    ReadFile (hCom,&Byte,sizeof (Byte)-1, &dwBytesRecieved, NULL);    
    Byte[dwBytesRecieved] = '\0';  // Nullterminierung des Strings
    printf("%s\n\r",Byte);
    

    Danach kannst du eine Umwandlung in ein double machen:

    double wert;
    
    wert = strtod(Byte,NULL);
    


  • Hast du schon mal in die Überschrift zu diesem Subforum geschaut?
    Dort steht unmissverständlich:

    "
    Fragen zur Seriellen-Schnittstelle oder ähnliches haben nichts mit C zu tun. Bitte dies in den entsprechenden Foren (Unix, DOS, WinAPI, Rund Um Die Programmierung) posten. Danke 😉
    "



  • Das passt hier schon hin.
    Sein Problem hat nur sekundär mit der Seriellen Schnittstelle zu tun.

    Statt dem ReadFile kann man auch strcpy(Byte,"10.5"); dwBytesRecieved = strlen(Byte); schreiben und er hat immer noch die selben Schwierigkeiten.



  • vielen dank !!


Log in to reply