Functional String Manipulation Int counter Serial from Raspberry Pi

Here I share a fragment very useful code when Arduino receive a frame through the serial port, for example to perform an access control or general purpose. :money_mouth_face:

int bandM=LOW; //flag
int ctdiD =0; 
int ctduD =0;

String c;
String diD;
String duD;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT); //sensor infrared input 
  pinMode(3, INPUT); //sensor infrared input
}

void cont(int cpi, int cpu )//cpi=total persons, cpu=counter persons update
{
  do
    {
    int sVM = digitalRead(2);
    int sVA = digitalRead(3);
    if (sVM==LOW) {
      bandM=HIGH;
    }
    if (sVA==LOW && bandM==HIGH) {
      cpu++;bandM=LOW;Serial.println(cpu);
    }
    delay(100);
  }while(cpu<cpi);
}

void loop() {
 
 if (Serial.available() > 0){
        c = Serial.readString();
        int cLgh = c.length();
        Serial.println(cLgh);
        int iD = c.indexOf('i');
        Serial.println(iD);
        int uD = c.indexOf('u');
        Serial.println(uD);
        diD = c.substring(iD+1,uD);
        duD = c.substring(uD+1,cLgh);
        ctdiD = diD.toInt();
        ctduD = duD.toInt();
        Serial.println(ctdiD);
        Serial.println(ctduD);
        delay(600);
        cont(ctdiD, ctduD);
  }
}

string-manipulation

It is not a good idea to use the String (capital S) class on an Arduino as it can cause memory corruption in the small memory on an Arduino. Just use cstrings - char arrays terminated with 0.

Have a look at the examples in Serial Input Basics - simple reliable ways to receive data. There is also a parse example to illustrate how to extract numbers from the received text.

...R