Problem mit serieller Kommunikation zwischen Arduino und Processing

Hallo, ich habe folgende Sketches:

Processing:

//import Serial communication library
import processing.serial.*;

//init variables
Serial commPort;

float tempX;


void setup()
{
  
  commPort = new Serial(this, "COM3", 9600);
  
  
 
}

void draw()
{
  //get the temp from the serial port
  while (commPort.available() > 0) 
  {
   
    tempX = commPort.read();
     tempX=int(tempX);
  
   
    println(tempX);
    
  }
}

Arduino:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define LCD_CLEAR 0b00000001 // 0×01
float temp;
int tempPin = 0;
int testX;

void setup() {
   Serial.begin(9600);
  lcd.begin(16, 2);
  //lcd.print("");
}

void loop() {
  temp = analogRead(tempPin);
  temp = temp * 0.48828125;
  lcd.setCursor(0, 0);
  lcd.print(temp);
   lcd.print(" C");
   delay(1000);
   lcd.clear();
   testX=int(temp);
   Serial.print(temp); 
Serial.print(testX);   //send the data to the computer
delay(1000); 
  //Serial.println(temp);
 
}

Wenn ich den Sketch auf mein Board hochlade und den Seriellen Monitor anhabe, werden mir Werte zwischen 21 und 23 (was auch hinkommt).

Schalte ich den seriellen Monitor aus und starte den Processing Sketch werden mir aber plötzlich Werte zwischen 50 und 52 angezeigt.

Kann mir jemand helfen?

Mit einem Serial.print() wird ein Integer-Wert als String über die Schnittstelle geschickt und nicht als Zahl. Das heisst der Wert 523 wird als Zeichen "5", dann "2" und zum Schluss "3" geschickt. Die Ziffer "5" wird als Byte-Wert 53 (ASCII) über die Leitung geschickt. Das ist auch der Wert, den Du mit Deinem Processing-Programm bekommst.

Du kannst jetzt entweder diese Zeichenfolge auf der Processing-Seite wieder in eine Zahl zurückwandeln oder Du schickst Deinen Integerwert direkt als 2-Byte-Wert über die Leitung:

Serial.write((char *)&testX, sizeof(testX));

Funktioniert auch mit einem float:

Serial.write((char *)&temp, sizeof(temp));

allerdings dürfte die Wiederherstellung in Processing etwas aufwendiger sein, da Du dort nicht einfach mit Pointern arbeiten kannst.

Ich hab mir dieses Tutorial angeschaut:

Auch da werden mir immer 50 Grad angezeigt.

Problem gelöst:

http://www.opensketches.org/temperature-lm35-arduino-processing-seria/

Jetzt gehts nur noch drum die Werte in eine Datenbank zu schreiben.