Tu dir selbst einen Gefallen und lass solche "Spielereien"
if((Serial.available()>0) && (Serial.read()==120)){
oder auch das hier
if ((intIn>47) && (intIn<58)) {intTmp=intIn-48;};
Schreib es so, dass man die Dinge verstehen kann. Es gibt absolut keinen
Grund, dass du selber den ASCII Code eines Zeichens anführen musst, noch
dazu in der denkbar ungeeignetsten Art und Weise - als Dezimalzahl. Dein
Compiler kennt die Codes für alle Zeichen, du brauchst nur die Zeichen
hinzuschreiben.
if((Serial.available()>0) && (Serial.read() == 'x' )){
so. Dann versteh man auch was der Sinn an dieser Stelle ist
if ((intIn >= '0') && (intIn <= '9' )) { intTmp = intIn - '0'; };
Das ganze Ansatrz ist zum Scheitern verurteilt, weil du eine tödliche
Annahme triffst: Nämlich die, dass du eine komplette Übertragung während
eines einzigen Durchlaufs durch loop() abhandeln kannst. Das kann so
sein, muss es aber nicht. Es ist besser (und auch einfacher) sich nicht
auf diese Annahme zu verlassen und ganz einfach nach dem Event-Muster zu
verfahren:
loop() wird betreten
ist ein Zeichen an der UART eingetroffen?
wenn ja, dann hänge es an die bisher empfangene Zeichenkette an
Ist dadurch die Zeichenkette im Sinne einer 'Message' vollständig?
Wenn ja, dann werte die Zeichenkette aus und setzt wieder alles in den
Anfangszustand zurück.
So funktioniert das für Millionen anderer Programmierer und in Millionen
anderer Programme. Ja, man kann das durchaus auch anders machen - aber
es ist nicht sehr schlau, wenn man als Anfänger bewährte Konzepte über
Bord wirft und sein eigenes Süppchen kocht.