SoftwareSerial.h from arduino UNO to m0

Hello guys,

it is a few months, I have asked about help with my SM-UART sensor. You gave me example code and it was really nice. But, when I put more sensors on the same board with arduino m0, my code did not work. Yeah, arduino m0 is similar to UNO a lot, but one library was problematic: "SoftwareSerial.h" Arduino m0 do not have it, so I am asking you for help. What should I use?

¨
#include <Arduino.h>
#include<SoftwareSerial.h>
SoftwareSerial SUART(2, 3); //SRX=DPin-4, STX=DPin-5
bool flag1 = false;
bool flag2 = false;
byte rxData[30];
byte y1, y2;

void setup()
{
  Serial.begin(9600);
  SUART.begin(9600);

}

void loop()
{
  byte n = SUART.available();
  {
    if (n != 0)
    {
      if (flag2 == false)
      {
        if (flag1 == false)
        {
          byte x = SUART.read();
          y1 = x;
          if (x == 0x42)
          {
            flag1 = true;
          }
        }
        else
        {
          byte x = SUART.read();
          y2 = x;
          if (x == 0x4D)
          {
            flag2 = true;
          }
        }
      }
      else
      {
        byte m = SUART.readBytesUntil('\n', rxData, 30);
        //Serial.println(m);
        int CHKSUM = 0;
        for (byte i = 0; i < m - 2; i++)
        {
          CHKSUM += rxData[i];
        }
        CHKSUM = CHKSUM + y1 + y2;
        //Serial.println(CHKSUM, HEX);
        if (CHKSUM == (rxData[28] << 8 | rxData[29]))
        {
          Serial.println("!!!!!VALID DATA!!!!!");
          Serial.println();
          Serial.print("Standard Smoke μg/m³: "); Serial.println(rxData[2] << 8 | rxData[3]);
          Serial.print("Standard Smoke μg/m³: "); Serial.println(rxData[4] << 8 | rxData[5]);
          Serial.print("Standard Smoke μg/m³: "); Serial.println(rxData[6] << 8 | rxData[7]);
          Serial.println();
          Serial.print("Enviorment μg/m³: "); Serial.println(rxData[8] << 8 | rxData[9]);
          Serial.print("Enviorment μg/m³: "); Serial.println(rxData[10] << 8 | rxData[11]);
          Serial.print("Enviorment μg/m³: "); Serial.println(rxData[12] << 8 | rxData[13]);

          // for (int i = 0; i < m; i++)
          // {
          //    Serial.print(rxData[i], HEX);
          //    Serial.print(' ');
          // }
          memset(rxData, 0x00, 30);
          flag1 = false;
          flag2 = false;
          Serial.println();
          Serial.println("==================================");
        }
        else
        {
          Serial.println("!!!!!INVALID DATA!!!!!");
          Serial.println();
          Serial.print("Standard Smoke μg/m³: "); Serial.println(rxData[2] << 8 | rxData[3]);
          Serial.print("Standard Smoke μg/m³: "); Serial.println(rxData[4] << 8 | rxData[5]);
          Serial.print("Standard Smoke μg/m³: "); Serial.println(rxData[6] << 8 | rxData[7]);
          Serial.println();
          Serial.print("Enviorment μg/m³: "); Serial.println(rxData[8] << 8 | rxData[9]);
          Serial.print("Enviorment μg/m³: "); Serial.println(rxData[10] << 8 | rxData[11]);
          Serial.print("Enviorment μg/m³: "); Serial.println(rxData[12] << 8 | rxData[13]);

          // for (int i = 0; i < m; i++)
          // {
          //    Serial.print(rxData[i], HEX);
          //    Serial.print(' ');
          // }
          memset(rxData, 0x00, 30);
          flag1 = false;
          flag2 = false;
          Serial.println();
          Serial.println("==================================");
        }
      }
    }
  }
}

On the SAMD21 based boards you usually use the SERCOM hardware to setup more serial interfaces, so you don't need that bad emulation in software.

so I do not need a library?

My question is simple: Have I change the code or just download some similar library?

Forget SotwareSerial or extra SERCOMs. Just use Serial1 on pins 0 and 1.

That means, I should only chande first lines of code?