[Risolto] HC-SR04 & Processing

Ho scritto questo programma in Processing con il quale dovrebbe leggere il valore del sensore ad ultrasuoni (HC-SR04) e stamparlo a video:

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.

In Processing stai usando la libreria Firmata, non è detto che ci siano tutti i comandi disponibili in Arduino IDE.

è 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

Ok. Grazie delle risposte!

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.)

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?

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 :slight_smile: