Problemi sensore di distanza

Ho un problema con il codice con un sensore di distanza (quelli che hanno due coni simili a stereo), ho provato a creare un codice che ogni volta che il sensore invia nel serial monitor 4cm lui ti deve scrivere DIETROFRONT. Allego il codice

#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
int b;

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

void loop() {
   a=sr04.Distance();
   Serial.print(a);
   Serial.println("cm");
   //int b = a;
   delay(1000);
   
   if (digitalRead("4cm")); 
   {
   Serial.println("DIETROFRONT");     
   }

}

Intanto chiarisci cos'è (qual è) quella libreria "SR04".

Poi per verificare se il problema possa essere nel sensore, nel collegamento, o altro (la libreria?), prova un codice semplice di esempio, tipo QUESTO e vedi se ti dà i risultati che ti aspetti.

Infine, come potrai leggere facendo una ricerca nel forum, i sensori SR04 sono molto spesso inaffidabili e si "bloccano" anche di tanto in tanto. Meglio acquistare i SRF05 che costano alcuni cent in più ma funzionano. Se vuoi, puoi anche provare anche QUESTA libreria che scrissi anni fa proprio per cercare di "compensare" i difetti degli SR04.

La libreria è quella che mi ha dato il kit di arduino, stavo seguendo il tutorial ma volevo aggiungere qualcosa

ma per il codice che mi ha dato serve la libreria?

... e, secondo te, tutti noi abbiamo il kit? :roll_eyes: Se si chiede il link mettete il LINK perché altrimenti noi non sappiamo esattamente quale delle tante è.

Guglielmo

Scusa, vedo se riesco ad allegarla
HC-SR04.zip (3,2 KB)

... ma DA DOVE l'hai scaricata (il link)?

Guglielmo

Era già allegata nel DVD che mi ha fornito il kit.
Da quello che mi sembra di capire il digitalWrite viene attivato a prescindere se if riceve segnale o meno

Ho provato ad eliminare il ; dopo if, ma adesso non lo scrive proprio

... scusa, ma questa riga, secondo te, cosa dovrebbe fare? :open_mouth:

Hai studiato il reference della digitalRead() ?

Guglielmo

credo che se digital.read legge 4cm nel serial monitor invia un segnale con if
Ops...
Ho messo serial.read ma non funziona

?

if (Serial.read() == "4cm")
   {
   Serial.println(" DIETROFRONT");     
   }
      delay(1000);

... digitalRead() legge lo stato di un pin e ritorna HIGH o LOW a secondo di detto stato ... i cm NON c'entrano niente. :confused:

Serial.read() legge UN SINGOLO carattere e te lo restituisce quindi ... NON potrà mai ritornarti una stringa di caratteri. :slightly_frowning_face:

Mi spiace, ma se non dedichi un po' di tempo a studiare non vai da nessuna parte ... non è supponendo o inventando cosa fa una funzione che puoi scrivere un programma. :roll_eyes:

Nel REGOLAMENTO, al punto 16.1, trovi sia dei pdf che puoi scaricare e studiare, sia un ottimo libro eventualmente da acquistare :wink:

Guglielmo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.