Aidez-moi | Capteur Ultrason SR04 | New Ping Library

Bonjour, j’ai un soucis avec mon programme; il a l’air correct pour moi mais il ne détecte pas la fonction echoCheckde la librairie NewPing.

#include <NewPing.h>
#define ECHO_PIN 7 // broche Echo sur 7
#define TRIGGER_PIN 6 // broche Trigger sur 6

#define MAX_DISTANCE 5 // distance maximale (en centimètres) que nous voulons “pinger”.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
#include <Servo.h>

Servo myservo;
int trig = 6;
int echo = 7;
int pos = 0; //position du servomoteur
const int LED_capteur = 3; // pin connecté à la LED + resistance
const int LED_power = 4;
const int pompe_1 = 9;
const int pompe_2 = 10;
const int pompe_3 = 11;
const int pompe_4 = 12;
const int pompe_5 = 13;

long cm; // variable pour stocker la distance de l’objet en cm
long duration = 0;
long lecture_echo;

unsigned int pingSpeed = 50; // période d’envoi du “ping”. Une période de 50 millisecondes correspond à 20 “pings” par seconde.
unsigned long pingTimer; // timer, pour le prochain “ping”.

void setup()
{
pinMode(LED_capteur, OUTPUT);
pinMode(LED_power, OUTPUT);
pinMode(pompe_1, OUTPUT);
pinMode(pompe_2, OUTPUT);
pinMode(pompe_3, OUTPUT);
pinMode(pompe_4, OUTPUT);
pinMode(pompe_5, OUTPUT);
Serial.begin(57600);
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
pingTimer = millis(); // contient le temps écoulé en millisecondes depuis le début de l’exécution du programme. pingTimer=maintenant.
}

void loop() {
digitalWrite(LED_power, HIGH); //voyant power allumé

if (millis() >= pingTimer) { // si temps écoulé depuis dernier “ping”, on fait à nouveau un “ping”.
pingTimer += pingSpeed; // temps pour déclenchement du prochain “ping”
sonar.ping_timer(echoCheck); // envoie un “ping”. Interruption toutes les 24 microsecondes (interruption du Timer 2) et relève si le ping est complété dans la fonction echoCheck.

digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo, HIGH);
cm = lecture_echo / 58;
Serial.print("Distancem : ");
Serial.println(cm);
delay(10);

if(cm > 5) // Il n’y a pas de verre
{
digitalWrite(LED_capteur, HIGH); // Allumer LED capteur si pas de verre et ne rien faire d’autre
delay(10); // Temps de traitement
}

else if(cm > 0 && cm < 5){ // Il y a un verre à moins de 5 cm du capteur
digitalWrite(LED_capteur, LOW); // LED capteur éteinte

delay(4000);
//début programmation des pompes
digitalWrite(pompe_1, HIGH);
digitalWrite(pompe_2, HIGH);
digitalWrite(pompe_3, HIGH);
digitalWrite(pompe_4, HIGH);
digitalWrite(pompe_5, HIGH);
delay(3000);
digitalWrite(pompe_1, LOW);
delay(1000);
digitalWrite(pompe_2, LOW);
delay(2000);
digitalWrite(pompe_3, LOW);
delay(1000);
digitalWrite(pompe_4, LOW);
delay(2000);
digitalWrite(pompe_5, LOW);

//fin programmation pompe
}
void echoCheck() {
if (sonar.check_timer()) { // “ping” complété dans les limites de distance souhaitées ?

// ajouter votre code d’interruption ici

if(cm > 5) // Il n’y a pas de verre
{
digitalWrite(LED_capteur, HIGH); // Allumer LED capteur si pas de verre
delay(10); // Temps de traitement
digitalWrite(pompe_1, LOW);
digitalWrite(pompe_2, LOW);
digitalWrite(pompe_3, LOW);
digitalWrite(pompe_4, LOW);
digitalWrite(pompe_5, LOW);
}}}}}

Bonjour,

Formate correctement ton source (avec CTRL T) et tu verras que la fonction echoCheck() est à l'intérieur de la loop() ce qui est interdit en C.

J'te remercie :grinning: