Serial.read -38 ???

Hallo,

Wenn ich den unten stehenden Code verwende und per Serial Monitor eine "2" sende bekomme ich:

2
-38

Warum ist das so?
Ich möchte lediglich, dass rxVal dauerhaft als "2" gespeichert bleibt, und nicht immer wieder auf -38 zurückfällt.
Gebe ich 456 ein bekomme ich:

4
5
6
-38

Vielen Dank für eure Hilfe!

 rxVal = 1;

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

void loop () 
{

if(Serial.available() > 0)
   {
    rxVal = Serial.read() -'0';
    Serial.println(rxVal);
   }  

}

-38 entsteht durch das "-'0'".

'0' ist hexadezimal 0x30, dezimal 48, führt mit dem Endergebnis -38 zu einem Ausgangswert von 10, hexadezimal ist das 0xa, das steht für '\n' und ist ein s.g. Zeilenvorschub.

Entweder sorgst Du dafür dass Du das '\n' nicht mitschickst oder filterst es auf der Empfängerseite raus.

Hallo,

Erstmal Vielen Dank, das klingt sehr logisch und macht Sinn.
Ich weiß aber leider für beide der Lösungsansätze keinen Weg das zu Programmieren.
Wichtig ist, dass rxVal 2 bleibt... Wie könnte ich das \n auf der Empfängerseite filtern?
Ich würde auch den anderen Weg nehmen, je nach dem, was einfacher ist oder mehr Sinn macht.
Grüße

Das ist eigentlich relativ einfach:

  if(Serial.available() > 0)
  {
    int tmp = Serial.read();
    if (tmp >= '0' && tmp <= '9')
      rxVal = tmp - '0';
    Serial.println(rxVal);

Willst Du Zahlen mit einem Wert von mehr als 9 auswerten?
Ich meine, sollte er oben 4, 5 und 6 auswerten oder 456?

eben noch mit einem Servo getestet

#include <Servo.h>

Servo myservo; // create servo object to control a servo

long incomingByte;
char eingabe;
char Data[8];
int i;
unsigned long Tempo;

void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
Serial.begin(9600);
}

void loop()
{
do {
if (Serial.available())
{
Data = Serial.read();
_ eingabe = Data*;_
_
i++;_
_
} _
_
if(i<1)_
_
Tempo = millis();_
_
{_
_
}_
_
}_
_
while*_
* (i<7&&(millis()-Tempo) < 500); *
_ Data = 0;
incomingByte = atof(Data);
i=0;

* Serial.print(incomingByte);
myservo.write(incomingByte);
} [/quote]*_

Vielen Dank für die Lösungsvorschläge!

@ Joghurt: Nein, zur Zeit komme ich mit 0-9 aus.

Die Lösung war noch ein Stück einfacher.
Im Serial Monitor kann man unten rechts zwischen "no line ending", "Newline", etc. auswählen - das stand bei mir auf Newline.
Nachdem ich das geändert hatte war das Problem weg.
So was dummes... :sweat_smile:

Nochmals Danke an alle!