When I do it this way:
const char startOfNumberDelimiter = '<';
const char endOfNumberDelimiter = '>';
long _rpm = 0;
void setup ()
{
Serial.begin (115200);
Serial2.begin (115200);
Serial3.begin (115200);
pinMode(8, INPUT);
} // end of setup
void processNumber (const long n)
{
Serial.println(n);
} // end of processNumber
void processInput ()
{
static long receivedNumber = 0;
static boolean negative = false;
byte c = Serial2.read ();
switch (c)
{
case endOfNumberDelimiter:
if (negative)
processNumber (- receivedNumber);
else
processNumber (receivedNumber);
// fall through to start a new number
case startOfNumberDelimiter:
receivedNumber = 0;
negative = false;
break;
case '0' ... '9':
receivedNumber *= 10;
receivedNumber += c - '0';
break;
case '-':
negative = true;
break;
} // end of switch
} // end of processInput
void loop ()
{
if (Serial2.available ())
{
processInput ();
}
}
the output I get from the second Arduino on the Serial Monitor is correct. So when I send <8000> from the 1st Arduino I get 8000 on the Serial Monitor of the 2nd Arduino.
When I do send <8000> this way from the 1st Arduino however,
const char startOfNumberDelimiter = '<';
const char endOfNumberDelimiter = '>';
long _rpm = 0;
void setup ()
{
Serial.begin (115200);
Serial2.begin (115200);
Serial3.begin (115200);
pinMode(8, INPUT);
} // end of setup
void processNumber (const long n)
{
_rpm = n;
} // end of processNumber
void processInput ()
{
static long receivedNumber = 0;
static boolean negative = false;
byte c = Serial2.read ();
switch (c)
{
case endOfNumberDelimiter:
if (negative)
processNumber (- receivedNumber);
else
processNumber (receivedNumber);
// fall through to start a new number
case startOfNumberDelimiter:
receivedNumber = 0;
negative = false;
break;
case '0' ... '9':
receivedNumber *= 10;
receivedNumber += c - '0';
break;
case '-':
negative = true;
break;
} // end of switch
} // end of processInput
void loop ()
{
if (Serial2.available ())
{
processInput ();
}
Serial.println(_rpm);
}
then I don't get the correct values, sometimes I get 800, sometimes 80 sometimes 8 etc.
Hope this is more clear.