nieuw hier. processing data naar PC

Hoi,

Ik heb me rot gezocht op internet maar kan geen goed voorbeeld vinden of het werkt niet.

Wat ik wil is het volgende.

Ik heb een arduino sketch met output van een waarde van een temp sensor.
Wil deze via processing weergeven op mijn pc.
Kom er niet uit heeft iemand een voorbeeld of kan me verder op weg helepen.

op pc dus getal dat de temp aangeeft, geen graphics.

met dank,

Jerome

komt het getal wel binnen in de serial monitor?

KUn je beide sketches posten ? (svp code tags gebruiken voor de leesbaarheid)

Hallo Rob,

processing had ik nog geen, wel geprobeerd maar niets gelukt.

Serial monitor arduino werkt

Hier de arduino sketch:

#include "DHT.h"
#define DHTPIN A0 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302) IN GEBRUIK !!

DHT dht(DHTPIN, DHTTYPE);

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

}

void loop()
{
float t = dht.readTemperature();

if (isnan(t))
{
Serial.println("Failed to read from DHT");
}
else
{
Serial.print("Temperatuur: ");
Serial.print(t);
Serial.println(" Celcius");
delay (1000);

}
}

ik zou beginnen met enkel de temperatuur naar de PC te sturen.
Dan hoef je daar niet de omringende text er weer vanaf te halen.

Als je processing geinstalleerd hebt, dan zitten daar een enorme hoeveelheid demo programmas bij.
IK heb zelf weinig ervaring met Processing,

wellicht helpt deze instructable - http://www.instructables.com/id/Read-analog-data-directly-in-Processing/ -
je verder

Ik zat ff die link te bekijken, maar is Processing nou zo veel gewijzigd? Niks geen gedonder meer met de com poorten. Gewoon een Arduino object maken en kennelijk lost die gelijk de communicatie op tussen de PC en de Firmata Flash. Moet ik me maar weer eens in verdiepen :slight_smile:

Ik begrijp niet helemaal waarom je 'Processing' wilt gebruiken om text op je PC weer te geven.
Processing is toch juist bedoeld om 2D en 3D graphics op je PC te genereren ?

Andere programma's zijn daar mogelijk meer voor bedoeld, zoiets als Firmata bijvoorbeeld.

Ik vind het eigenlijk helemaal niet zo vreemd om eerst eens te kijken of je een tekst kunt laten zien, en het later te verfraaien tot een meer aansprekende weergave.
Ik ken 'processing' helemaal niet dus geen idee wat dat moet doen en waar het ideaal voor is.
Maar mijn eerste test zou toch ook zijn om te kijken of ik de betreffende waarde kan binnenhalen en weergeven.
Volgende zou dan zijn om meerdere waarden op de juiste manier af te handelen.

cartoonist:
Processing is toch juist bedoeld om 2D en 3D graphics op je PC te genereren ?

Nee, Het is een van de zaken die het goed kan. Processing is ooit ontwikkeld door een of ander Zuid Amerikaanse student (meen ik) met als doel om programmeren eenvoudig en voor iedereen toegankelijk te maken. En daar is hij aardig in geslaagd (zij het meer indirect via Arduino). De Arduino IDE komt ook van Processing af. Vandaar de grote overeenkomst tussen de Arduino IDE en de Processing IDE. Mensen die met de Arduino IDE overweg kunnen, kunnen dat vrij gemakkelijk met de Processing IDE.
Of de Arduino IDE nog steeds werkt op de Processing fundatie weet ik niet. UIteindelijk is het allemaal JAVA wat cross platform weer vereenvoudigd.

Dan is de vraag welk programma is beter geschikt om arduino data te visualiseren op pc.

Er bestaan eigenlijk geen "betere" programma's. Het is eerder waar iemands voorkeur in zit. Elke taal die Seriële communicatie ondersteund kan gebruikt worden zonder al teveel problemen. Je zou zelfs Excel kunnen gebruiken als je goed thuis bent in VBA.
De link die je kreeg van Rob laat zien hoe je met processing op de PC kan praten met de Arduino en kennelijk is er tegenwoordig zelfs een object dat Arduino heet.
Je kan ook alles zelf programmeren op de PC en een eigen protocol maken. Maar dan moet je jezelf afvragen of je die kennis en kunde hebt. En gezien je vraagstelling is dat nu nog een brug te ver.
Probeer het eerst maar eens met Processing voor elkaar te krijgen. De overeenkomsten zijn vergelijkbaar met de Arduino. Wat heb je te verliezen? En wat heb je te winnen?

Ik heb geen ervaring met processing dus kan ik je met dat specifieke programma niet verder helpen.

Maar, Arduino heeft een aantal example sketches standaard meegeleverd.
In sketches, folder '04.Communications' vind je het voorbeeld programma SerialCallResponse.

Als je daarin de waarden van de 3 sensors vervangt door de waarden uren. minuten en seconde zou processing daar iets mee moeten kunnen doen.
Als test kun je denk ik eerst het beste die drie waarden een vast getal geven, bv: 11:11:11

int firstSensor = 11; // uren
int secondSensor = 11; // minuten
int thirdSensor = 11; // seconden

en dan direct deze drie waarden wegschrijven met :

Serial.write(firstSensor);
Serial.write(secondSensor);
Serial.write(thirdSensor);

Het deel waarin de drie waarden worden bepaald met analogRead en digitalRead moet je niet gebruiken.

Als je dat in processing kunt weergeven kun je daarna op je arduino deze drie waarden elke seconde updaten met de echte tijd die je van een RTC leest.

Ik hoop dat je er iets mee kunt

zie ook: http://www.arduino.cc/en/Tutorial/SerialCallResponse
edit: temperatuurwaarden ging het je om en niet de tijd maar dat maakt weinig verschil.

http://playground.arduino.cc/Interfacing/Processing

begin hier maar eens, is wel wat ingewikkelder als dat je eigenlijk nodig hebt,
Het is gewoon op deze site.
en ik snap heel goed waarom processing, zijn beide wiring programmas.
Wel van begin af aan een goede scheiding maken tussen processing files en arduino, want je kunt het aan de naam niet zien.

Ik heb een en ander geprobeerd maar komt niet verder. In processing krijg ik andere characters dan die in arduino verstuurd zijn . De variabele 'temperatuur' wordt in processing weergegeven als een reeks van 14 cijfers. Hoe krijg is de juiste waarde?

arduino sketch:

#include "DHT.h"
#define DHTPIN A0 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302) IN GEBRUIK !!

DHT dht(DHTPIN, DHTTYPE);

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

}

void loop()
{
float t = dht.readTemperature();

Serial.println(t);
delay (1000);

}
}

processing:

import processing.serial.*;

Serial myPort; // The serial port:
int temperatuur = 0;

void setup() {
size(400, 300);

//println(Serial.list());
myPort = new Serial(this, "COM3", 9600);

textSize(50);
fill(10, 27, 217);
}

void draw() {
background(200);
while (myPort.available () > 0) {
temperatuur = myPort.read();
print (temperatuur);
text ((temperatuur), width/2, height/2);
}

}

je leest temperatuur in als int. Maak daar een char van. Je leest immers een karakter tegelijk......

@Jerommeke,
Het gaat blijkbaar fout in Processing. Ik heb geen idee waarom want Processing programmeren gaat in details toch anders dan Arduino programmeren en misschien heeft Nico zonet het juiste antwoord gegeven.

@Processing leken,
Ik heb eens de moeite genomen om Processing op mijn computer te zetten en uit te proberen. Verbazend eenvoudig gaat dat. Downloaden en opstarten, niks ingewikkeld installeren. Het lijkt, zoals Nico gisteren al opmerkte, heel veel op de IDE van Arduino.

Heb het eenvoudige voorbeeld uit de Arduino voorbeelden: 04.Communication-PhisicalPixel uitgeprobeerd.
De processingcode uit dat voorbeeld gecopieeerd in Processing en getest.

Het enige probleem in processing was om de goede Serial in te stellen. Dit gaat minder intuitief dan in de Arduino IDE.
In de regel:

port = new Serial(this, Serial.list()[0], 9600);

moest ik i.p.v. 0 een ander getal zetten.
Ik kreeg de foutmelding: Error opening serial port /dev/ttyS0:Incorrect serial port en in het scherm een opsomming van alle beschikbare (virtuele) seriele poorten.
Nummer 32 bleek de poort die ook in de Arduino IDE gebruikt wordt. Bij mij onder linux heet die poort: /dev/ttyUSB0. Onder Windoos zal die poort wel anders heten maar het gaat om het nummer.
Dus de regel gewijzigd in:

port = new Serial(this, Serial.list()[32], 9600);

In Jerommeke's voorbeeld heet die poort COM3: myPort = new Serial(this, "COM3", 9600);

Arduino opgestart, (monitor venster beslist niet openen anders krijg je foutmelding) Processing opgestart en er word een klein blokje zichtbaar waar je met de muis overheen kan .
Led13 gaat dan aan en weer uit als de muis van het blokje afgaat.

Voor mij het bewijs dat Processing zeer goed gebruikt kan worden in samenwerking met Arduino.
Het opent nieuwe mogelijkheden. Ik denk b.v. aan een tablet die gebruikt kan worden als grafische gebruikersinterface. Of b.v. een home-automatiserings project waarbij je een eenvoudige plattegrond in Processing maakt en daarop kan klikken om via arduino-hardware lampen aan/uit te zetten of alarmmeldingen op de plattegrond weer te geven.

Voor sommigen hier is dit misschien al lang bekend maar ik heb hier alleen nog maar vragen voorbij zien komen over hoe data vanuit de arduino naar een PC te sturen, of andersom. Nooit heb ik hier de antwoorden gelezen.

Daarom mijn simpele uitleg voor processing leken hoe ik mijn eerster processing-stap heb gedaan.

Kan iemand mij even helpen de int uit mijn processing code naar char te converteren. Ben nog steeds aan het leren. bedankt

probeer eens op google: "processing char"

Je bent er nog steeds niet uit hoe je met code tags moet werken, daar is een icoontje voor.

Maar goed, ik heb hier nog wat zitten spelen met processing en een DHT22 en voor mij werkt het volgende goed:

#include "DHT.h"
#define DHTPIN A0 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)  IN GEBRUIK !!

DHT dht(DHTPIN, DHTTYPE);

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

void loop()
{   
    float t = dht.readTemperature();

    Serial.println(t);
    delay (1000);
}

/*

import processing.serial.*;
 
Serial myPort; // The serial port:
float temperatuur;
 
void setup() {
  size(400, 300);
 
  myPort = new Serial(this, "/dev/ttyUSB0", 9600);      // aanpassen naar gebruikte com poort
                                       
  textSize(50);
  fill(10, 27, 217);
  background(200);
}
 
void draw() {
  while (myPort.available () > 0) {
   String temperatuur = myPort.readStringUntil('\n');      // String buffer zonder asci 13 en asci 10  \n

// scherm wissen direct voordat geprint wordt

    background(200);     
    print (temperatuur);
    text ((temperatuur), width/3, height/2);
  }
}

*/

Gelukkig hebben we hier ook weer het educatieve effect de nek omgedraaid.... :angry:
@cartoonist: Denk je dat het niet handiger is om (zoals een mede Belgische forumlid zei)
"iemand te leren vissen ipv vis te voeren" ?
Nu wordt het gewoon kopiëren voor Jerommeke ipv zelf uitzoeken wat een veeeeeeeeeeeel groter leer effect heeft.

Of kan je het geduld niet uitoefenen om mensen gewoon de tijd te geven zelf te ontdekken?

in je arduino staat een float (dat zijn 4 bytes) en in de processing staat een INT.
twee manieren voor, of je stuurt een getal als INT bijvoorbeeld en ontvangt dat dan ook als getal,
of een tekst die je dan in processing moet filteren en de waarde weer terugzetten naar een float.