Convert serial.read() into a useable string using Arduino?

后端 未结 15 1051
盖世英雄少女心
盖世英雄少女心 2020-11-29 15:27

I\'m using two Arduinos to sent plain text strings to each other using newsoftserial and an RF transceiver.

Each string is perhaps 20-30 characters in length. How do

相关标签:
15条回答
  • 2020-11-29 16:19

    Unlimited string readed

      String content = "";
      char character;
    
      while(Serial.available()) {
          character = Serial.read();
          content.concat(character);
      }
    
      if (content != "") {
        Serial.println(content);
      }
    
    0 讨论(0)
  • 2020-11-29 16:23

    If you're using concatenate method then don't forget to trim the string if you're working with if else method.

    0 讨论(0)
  • 2020-11-29 16:24

    From Help with Serial.Read() getting string:

    char inData[20]; // Allocate some space for the string
    char inChar=-1; // Where to store the character read
    byte index = 0; // Index into array; where to store the character
    
    void setup() {
        Serial.begin(9600);
        Serial.write("Power On");
    }
    
    char Comp(char* This) {
        while (Serial.available() > 0) // Don't read unless
                                       // there you know there is data
        {
            if(index < 19) // One less than the size of the array
            {
                inChar = Serial.read(); // Read a character
                inData[index] = inChar; // Store it
                index++; // Increment where to write next
                inData[index] = '\0'; // Null terminate the string
            }
        }
    
        if (strcmp(inData,This)  == 0) {
            for (int i=0;i<19;i++) {
                inData[i]=0;
            }
            index=0;
            return(0);
        }
        else {
            return(1);
        }
    }
    
    void loop()
    {
        if (Comp("m1 on")==0) {
            Serial.write("Motor 1 -> Online\n");
        }
        if (Comp("m1 off")==0) {
            Serial.write("Motor 1 -> Offline\n");
        }
    }
    
    0 讨论(0)
  • 2020-11-29 16:26

    You can use Serial.readString() and Serial.readStringUntil() to parse strings from Serial on the Arduino.

    You can also use Serial.parseInt() to read integer values from serial.

    int x;
    String str;
    
    void loop() 
    {
        if(Serial.available() > 0)
        {
            str = Serial.readStringUntil('\n');
            x = Serial.parseInt();
        }
    }
    

    The value to send over serial would be my string\n5 and the result would be str = "my string" and x = 5

    0 讨论(0)
  • 2020-11-29 16:27
    String content = "";
    char character;
    
    if(Serial.available() >0){
    //reset this variable!
      content = "";
     //make string from chars
     while(Serial.available()>0) {
       character = Serial.read();
       content.concat(character);
     }
     //send back   
     Serial.print("#");
     Serial.print(content);
     Serial.print("#");
     Serial.flush();
    }
    
    0 讨论(0)
  • 2020-11-29 16:27

    Credit for this goes to magma. Great answer, but here it is using c++ style strings instead of c style strings. Some users may find that easier.

    String string = "";
    char ch; // Where to store the character read
    
    void setup() {
        Serial.begin(9600);
        Serial.write("Power On");
    }
    
    boolean Comp(String par) {
        while (Serial.available() > 0) // Don't read unless
                                       // there you know there is data
        {
            ch = Serial.read(); // Read a character
            string += ch; // Add it
        }
    
        if (par == string) {
            string = "";
            return(true);
        }
        else {
            //dont reset string
            return(false);
        }
    }
    
    void loop()
    {
        if (Comp("m1 on")) {
            Serial.write("Motor 1 -> Online\n");
        }
        if (Comp("m1 off")) {
            Serial.write("Motor 1 -> Offline\n");
        }
    }
    
    0 讨论(0)
提交回复
热议问题