We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hi,
I am a newbie using Processing and I would like to know how to draw several curves in one graph. It should not be too complicated, but the main thing is that I am using Arduino and a DHT11 sensor which monitors humidity and temperature with one digital output. What I would like to achieve is to monitor the values of humidity and temperature on Processing in one graph.
Here is the Arduino program :
#include "DHT.h"
#define DHTPIN 2     // what pin we're connected to
#define DHTTYPE DHT11  
// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600); 
  dht.begin();
 }
void loop() {
  int h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
    }
  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);
  //Serial.print("Humidity: "); 
  Serial.println(h);
  //Serial.print("Temperature: "); 
  Serial.print(t);
  delay(500);                        // wait 100ms for next reading
  }
And here is the Processing program I found on the Internet :
import processing.serial.*;
Serial myPort;        // The serial port
int xPos = 1;         // horizontal position of the graph 
//Variables to draw a continuous line.
int lastxPos=1;
int lastheight=0;
float val;
void setup () {
  // set the window size:
  size(800, 600);        
  // List all the available serial ports
  println(Serial.list());
  // Check the listed serial ports in your machine
  // and use the correct index number in Serial.list()[].
  myPort = new Serial(this, Serial.list()[0], 9600);  //
  // A serialEvent() is generated when a newline character is received :
  //myPort.bufferUntil('\n');
  background(0);      // set inital background:
}
void draw () {
  if ( myPort.available() > 0) {  // If data is available,
    val = myPort.read();          // read it and store it in val
    // Convert the values to set the radius
  }
  // everything happens in the serialEvent()
}
void serialEvent (Serial myPort) {
  // get the ASCII string:
  String inString = myPort.readStringUntil('\n');
  if (inString != null) {
    inString = trim(inString);                // trim off whitespaces.
    float inByte = float(inString);           // convert to a number.
    inByte = map(inByte, 0, 100, 0, height); //map to the screen height.
    //Drawing a line from Last inByte to the new one.
    stroke(127,34,255);     //stroke color
    strokeWeight(2);        //stroke wider
    line(lastxPos, lastheight, xPos, height - inByte); 
    lastxPos= xPos;
    lastheight= int(height-inByte);
    // at the edge of the window, go back to the beginning:
    if (xPos >= width) {
      xPos = 0;
      lastxPos= 0;
      background(0);  //Clear the screen.
    } 
    else {
      // increment the horizontal position:
      xPos++;
    }
  }
}
I have the feeling it should be somewhere near this line String inString = myPort.readStringUntil('\n'); but I have no idea how to extract both the temperature and moisture ; it does work with the temperature or the humidity depending on which but I don't know how to do with both.
Could you help me ?
Thanks,
Answers
for send multiple values, search the arduino-processing example "virtualcolormixer", and modify your arduino-processing example "graph"
The problem here is that humidity and temperature come from the same digital output... I don't know how to "separate" those data.
In the suggested example they use comma to separate values:
Then, this may be separated from the processing side with the use of split:
You will have then
vals[0] == h;andvals[1] == t;