Pages: [1]   Go Down
Author Topic: Problem mit serieller Kommunikation zwischen Arduino und Processing  (Read 746 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 140
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo, ich habe folgende Sketches:

Processing:

Code:
//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:

Code:
#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?
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

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

Funktioniert auch mit einem float:

Code:
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.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 140
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich hab mir dieses Tutorial angeschaut:

http://pscmpf.blogspot.de/2008/12/arduino-lm35-sensor.html

Auch da werden mir immer 50 Grad angezeigt.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 140
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Problem gelöst:

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

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

Pages: [1]   Go Up
Jump to: