- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 27

Thema: UART Kommunikation zwischen Raspi und Arduino hängt sich ständig auf

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast

    UART Kommunikation zwischen Raspi und Arduino hängt sich ständig auf

    hallo,
    ich komme zur Zeit nicht weiter: meine UART Kommunikation zwischen Raspi und Arduino hängt sich ständig auf.
    Ich vermute den Fehler eher Raspi-seitig, weil der Arduino-Code in ähnlicher Form bereits mit Borland C++ Builder auf dem PC funktioniert hat (wenn sich nicht ein c+p Fehler eingeschlichen hat, den ich allerdings noch nicht gefunden habe).
    Der Arduino (momentan ein Mega2560) ist per USB mit einem Raspi-USB-Port verbunden ("/dev/ttyACM0") .

    Hat jemand einen Tipp, das zu beheben?

    Raspi code:
    Code:
    /*
       UART communication
       send/receive string of tokens
        
       Raspberry Pi  master
       ver 0101
     */
    
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string>
    #include <math.h>
    #include <fcntl.h>
    #include <string.h>
    #include <sys/ioctl.h>
    #include <stdint.h>
    #include <time.h>
    #include <sys/time.h>
    #include <errno.h>
    #include <pthread.h>
    
    #include <wiringPi.h>
    #include <wiringSerial.h>
    
    #define  byte  uint8_t
    
    char   uart[256]  =  "/dev/ttyACM0";
    int    Serial;
    
    const uint32_t UARTclock = 115200;
    
    
    
    int i0;
    
    #define TOKLEN 30
    #define MSGLEN 1024
    #define iINVALID -29999
    
    
    std::string  inputString="";
    char   cval[TOKLEN];  // number as cstring
    char   mbuf[MSGLEN];  // cstring msg buffer
    
    
    
    
    
    //==================================================================
    // serial TCP
    //==================================================================
    
    
    void loop() {
        
      while(1) {  
          
         static bool stringComplete = false;
         
         
         //-------------------------------------------------------------
         // send    
         
         char formatstr[MSGLEN];
         
         // debug, cut-down:
         strcpy(formatstr, "§");
         strcat(formatstr, "message from Raspi: %d;\n");
         sprintf(mbuf, formatstr, i0);
                        
         for(uint8_t i=0; i<strlen(mbuf); i++) {           //
            serialPutchar( Serial, mbuf[i]);               // Send values to the slave       
         }   
          
         // strcpy(mbuf, "");   //  <~~~~~~~~~~~~~~~~~~~~~~~~editiert!
         
         //delay?
         delay(10);  //  <~~~~~~~~~~~~~~~~~~~~~~~~editiert!
       
         
         
         
         //-------------------------------------------------------------
         // receive
         
         inputString="";
         char cstr[TOKLEN];
       
         int  n=0;
         char inChar;
         
         
         while (serialDataAvail( Serial ) && n<MSGLEN-1) { 
           if(n==MSGLEN-2) inChar='\n'; // emergency brake
           else  
           inChar = serialGetchar( Serial ); 
        
           inputString += inChar;
           
           if (inChar == '\n')  {
             stringComplete = true;
           }
           n++;
         }
       
         
         if (stringComplete)  {
    
           strcpy (mbuf, inputString.c_str() );
           // strcat(mbuf, "\0");  //  <~~~~~~~~~~~~~~~~~~~~~~~~editiert!
           fprintf(stderr,mbuf); fprintf(stderr,"\n"); 
           
           // process mbuf !
       
           
           inputString="";
           stringComplete = false;
       
           //delay?
           delay(1);
         }
       
       }     
    }
    
    
    
    
    //==================================================================
    
     
    int main() {
         
        printf("initializing..."); printf("\n");
       
        // UART Serial com port
        Serial = serialOpen (uart, UARTclock);   
        printf("starting UART loop..."); printf("\n");   
        
        loop(); 
       
        serialClose( Serial);
        exit(0);
    }
    
    
    //
    // eof

    Arduino code:
    Code:
    // Arduino COM to Raspi
    // (C) 2018 by dsyleixa
    
    // ver 0101
    
    
    // I2C
    #include <Wire.h>    
    
    
    int i0 = 0;
    
    #define TOKLEN 30
    #define MSGLEN 1024
    #define iINVALID -29999
    
    String  inputString="";
    char    cval[TOKLEN];  // number as cstring
    char    mbuf[MSGLEN];  // cstring msg buffer
    
    
    //==================================================================
    // setup
    //==================================================================
    void setup() {
      Serial.begin(115200);
      
      pinMode(LED_BUILTIN, OUTPUT);
      digitalWrite(LED_BUILTIN, LOW);
    
    }
    
    
    //==================================================================
    // loop
    //==================================================================
    
    void loop() {
      static bool stringComplete = false;
    
      //-------------------------------------------------------------
      // receive
      
      int  n=0;
      char inChar;
    
         
      while (Serial.available() && n<MSGLEN-1) { 
           if(n==MSGLEN-2) inChar='\n';
           else  
           inChar = (char)Serial.read();
        
           inputString += inChar;
           
           if (inChar == '\n')  {
             stringComplete = true;
           }
           n++;
      }
    
      if (stringComplete)  {
        inputString.toCharArray(mbuf, MSGLEN-1);
    
        // process mbuf !
        
        //
        
        inputString="";
        stringComplete = false;
    
        //delay?
        delay(1);
      }
      //-------------------------------------------------------------
      // send  
      
    
      //----------------------
      
      char formatstr[MSGLEN];
      strcpy(formatstr, "§");
      strcat(formatstr, "message from Arduino: %d;\n");
      sprintf(mbuf, formatstr, i0);                 
      
      for (int i=0; i<strlen(mbuf); i++ ) Serial.print(mbuf[i]);
      
      // strcpy(mbuf, "");  //  <~~~~~~~~~~~~~~~~~~~~~~~~editiert!
      
      i0++;
    
      //delay?
      delay(10); //  <~~~~~~~~~~~~~~~~~~~~~~~~editiert!
    }
    
    
    
    
    // end of file

    console output:
    Code:
    initializing...
    starting UART loop...
    §message from Arduino: 0;
    §message fr211;
    §message from Arduino: 2212;
    §message from Arduino: 2213;
    §message from Arduino: 221�no: 2210;
    §message from Arduino: 2211;
    §message from Arduino: 2212;
    §message from Arduino: 2213;
    §message from Arduino: 221�
    dann bleibt es stehen...

    Restart, neuer output:
    Code:
    initializing...
    starting UART loop...
    §message from Arduino: 0gno: 618;
    §message fr��message from Arduino: 615;
    §message from Arduino: 616;
    §message from Arduino: 617;
    §message from Arduino: 618;
    §message fr
    dann bleibt es wieder stehen...
    Geändert von HaWe (01.06.2019 um 10:43 Uhr) Grund: Siros Vorschläge eingearbeitet

Ähnliche Themen

  1. Antworten: 32
    Letzter Beitrag: 04.07.2018, 08:34
  2. Kommunikation zwischen Android und Sensor(UART)
    Von Alasa im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 18.10.2017, 10:48
  3. [ERLEDIGT] Problem bei UART Kommunikation zwischen ATmega und VB.net
    Von masasibe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 10.09.2011, 17:41
  4. LCD-Kontrast und UART-Kommunikation zwischen 2 µcs
    Von MelMan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 04.12.2008, 15:25
  5. Uart-Kommunikation zwischen µCs
    Von ProgDom im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 20.04.2006, 00:37

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test