Go Down

Topic: [Risolto] HC-SR04 & Processing (Read 461 times) previous topic - next topic

Hertz

Jul 02, 2013, 05:33 pm Last Edit: Jul 03, 2013, 08:39 pm by Hertz Reason: 1
Ho scritto questo programma in Processing con il quale dovrebbe leggere il valore del sensore ad ultrasuoni (HC-SR04) e stamparlo a video:
Code: [Select]
import cc.arduino.*;

Arduino arduino;
PFont f;

// Pin Arduino
int triggerPort = 7;
int echoPort = 8;

void setup() {
  size(400,300);
  background(0);
  f = createFont("Arial",27);
  textFont(f);
  arduino = new Arduino(this, Arduino.list()[0], 57600);
 
 arduino.pinMode(triggerPort, Arduino.OUTPUT);
 arduino.pinMode(echoPort, Arduino.INPUT);
 }
 

 
void draw() {
 background (0);
 // Calcola la distanza col sensore ad ultrasuoni:
 arduino.digitalWrite( triggerPort, Arduino.LOW);
 
 arduino.digitalWrite(triggerPort, Arduino.HIGH);
 delay(10);
 arduino.digitalWrite(triggerPort, Arduino.LOW);
 
 long duration = Arduino.pulseIn(echoPort, Arduino.HIGH);
 long distanza = 0.034 * duration / 2;
 
 delay(1500);
 
 text("Distanza",Integer.toString(distanza),100,100);
 }

Ma non funziona poiché mi dice che la funzione pulseIn non esiste. Dove sbaglio?
Grazie in anticipo per le risposte.

nid69ita

In Processing stai usando la libreria Firmata, non è detto che ci siano tutti i comandi disponibili in Arduino IDE.
my name is IGOR, not AIGOR

camperos

è una prova.. e non so se sia possibile con SR04
in uno sketch faccio muovere delle figure in Processing  usando un   telecomando, utilizzando Firmata e IRremote,
e Firmata non ha i comandi IRremote.

ho modificato Firmata inserendo IRremote

dovresti provare ad inserire i comandi di SR04 in Firmata (come se fosse uno sketch in arduino) per poi riprenderli in Processing.

per non complicare troppo prova ad usare "simple digital firmata" che ha poche righe

https://www.youtube.com/watch?v=RR-xsS2xUzc

Hertz

Ok. Grazie delle risposte!

lesto

Code: [Select]
delay(10);

AHHAHAHAA no.

Firmdata invia ogni singolo comando via seriale, e da tale ne legge la risposta. La seriale è lenta (57.600 baud = 5.760byte/s), e non permette una precisione così alta, o comunque sei molto a rischio.

Un consiglio: lascia stare firmadata, e fatti un tuo protocollo ad hoc. Tanto per quello che vuoi fare ora ti basta il serial monitor, poi leggere e scrivere via seriale da processing è una baggianata.

Altro problema:
Staio mettendo LOGICA del programma nel Thread di disegno ( draw() è chiamato da thread grafico ) cosa da non fare MAI! (mai avuto a che fare con quelle schemate di installazione che non rispondono ai comandi mentre installano? ecco.)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Hertz

Infatti ho risolto non usando più la libreria Firmata ma inviando i dati da Arduino sulla seriale e poi da Processing con la sua libreria li leggo.
Solo che adesso mi è sorto un dubbio: per inviare e poi ricevere due dati contemporaneamente come dovrei fare?

lesto

l'hardware + libreria, sia lato PC che lato arduino, si occupa di ascoltare ed inviare dati anche in modo parallelo se necessario e possibile. Tu semplicemente fai read e write.

Forse il problema tuo è che ci sono delle funzioni di lettura che sono bloccanti, in tal caso fai attenzione ad usare quelle che non lo sono :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up