Aplication of ultrasonic (català)

Está en catalán pero creo que se entiende bien. Espero que a alguien le llegue a ser de utilidad, cualquier duda preguntad!

/* CODI LLIURE */

/* Es mostra per pantalla la distancia a la que es troba l'objecte
del sensor d'ultrasons. Si es prem el polsador, el LED i el zumbador
s'activaran en cas que la distancia a l'ultrasons siga <=20cm; en
cas contrari romandran desactivats. /*

/* Crida a la llibreria Ultrasonic */
#include <Ultrasonic.h>

/* Creacio nou Ultrasonic */
Ultrasonic ultrasons(7,8);

/* Variables principals */
int LedPin = 13;
int zumb = 12;
int boto = 2;
int dist = 0;

/* Variables relacionades amb l'interruptor */
int estat = LOW;
int anterior = HIGH;
int lectura;

/* Variables de temps */
long temps = 0;
long antirebot = 200;

/* Inicialitzacio del programa */
void setup() {
Serial.begin(9600);
pinMode(LedPin, OUTPUT);
pinMode(zumb, OUTPUT);
pinMode(boto, INPUT);
Serial.println("\t\t\t\tAplicacio Ultrasonic!\n");
delay(5000);
}

/* Bucle del programa. Estructura principal */
void loop() {
dist = ultrasons.Ranging(CM);
Serial.print("Distancia: ");
Serial.print(dist);
Serial.println(" cm");
lectura = digitalRead(boto);
if(lectura==HIGH && anterior==LOW && millis()-temps>antirebot){
if(estat==HIGH) estat = LOW;
else estat = HIGH;
temps = millis();
}
if(dist<=20){
digitalWrite(LedPin, estat);
digitalWrite(zumb, estat);
}
else{
digitalWrite(LedPin, LOW);
digitalWrite(zumb, LOW);
}
anterior = lectura;
delay(250);
}

/* Fi del programa */

Gracias por el aporte.

Por mi parte no hay problema, entiendo un poco el Valenciano, mismo idioma...

Un saludo.

Permiteme, para el que no lo entienda, le pongo una traduccion libre:

/*                          CODIGO LIBRE                          */
 
/* Muestra por pantalla la distancia a la que se encuentra el objeto
del sensor de ultrasonidos. Si se presiona el pulsador, el LED y el zumbador
se activaran en tanto que la distancia al ultrasonido sea <=20cm; en
caso contrario permaneceran desactivados. /*
 
 
/* Llama a la libreria Ultrasonic */
#include <Ultrasonic.h>
 
/* Crea nuevo Ultrasonic */
Ultrasonic ultrasons(7,8);
 
/* Variables principales */
int LedPin = 13;
int zumb = 12;
int boto = 2;
int dist = 0;
 
/* Variables relacionadas con el interruptor */
int estat = LOW;
int anterior = HIGH;
int lectura;
 
/* Variables de tiempo */
long temps = 0;
long antirebot = 200;
 
/* Inicializacion del programa */
void setup() {
  Serial.begin(9600);
  pinMode(LedPin, OUTPUT);
  pinMode(zumb, OUTPUT);
  pinMode(boto, INPUT);
  Serial.println("\t\t\t\tAplicacion Ultrasonic!\n");
  delay(5000);
}
 
/* Bucle del programa. Estructura principal */
void loop() {
  dist = ultrasons.Ranging(CM);
  Serial.print("Distancia: ");
  Serial.print(dist); 
  Serial.println(" cm");
  lectura = digitalRead(boto);
  if(lectura==HIGH && anterior==LOW && millis()-temps>antirebot){
    if(estat==HIGH) estat = LOW;
    else estat = HIGH;
    temps = millis();
  }
  if(dist<=20){
    digitalWrite(LedPin, estat);
    digitalWrite(zumb, estat);
  }
  else{
    digitalWrite(LedPin, LOW);
    digitalWrite(zumb, LOW);
  }
  anterior = lectura;
  delay(250);
}
 
/* Fin del programa */
- See more at: http://www.arduteka.com/foro/programacion/aplicacion-del-ultrasonic/#p340

Sí, de echo yo soy valenciano. He puesto catalán para generalizarlo más.

Una abraçada company i gracias por la traducción!

De res, benvingut al fòrum :grin:

He hecho una modificación añadiendo al circuito un contador que va contando las veces que estando el interruptor cerrado se ha acercado <20cm el objeto.

    /*                          CODI LLIURE                          */
     
    /* Es mostra per pantalla la distancia a la que es troba l'objecte
    del sensor d'ultrasons. Si es prem el polsador, el LED i el zumbador
    s'activaran en cas que la distancia a l'ultrasons siga <=20cm; en
    cas contrari romandran desactivats. Cada vegada que el LED i el
    zumbador s'activen, el contador display suma 1. Cada 10
    activacions, es mostra per pantalla la quantitat registrada./*
     
     
    /* Crida a la llibreria Ultrasonic */
    #include <Ultrasonic.h>
     
    /* Creacio nou Ultrasonic */
    Ultrasonic ultrasons(4,7);
     
    /* Variables principals */
    const int LedPin = 13;
    const int zumb = 12;
    const int boto = 2;
    int dist = 0;
    int cont = 0;
    int acts = 0;
     
    /* Variables relacionades amb l'interruptor */
    int estat = LOW;
    int anterior = HIGH;
    int lectura;
     
    /* Variables de temps */
    long temps = 0;
    const long antirebot = 200;
     
    /* Inicialitzacio del programa */
    void setup() {
      Serial.begin(9600);
      pinMode(LedPin, OUTPUT);
      pinMode(zumb, OUTPUT);
      pinMode(boto, INPUT);
      Serial.println("\t\t\t\tAplicacio Ultrasonic!\n");
      display (1,1,1,1,1,1,0);
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(8, OUTPUT);
      pinMode(A0, OUTPUT);
      pinMode(A1, OUTPUT);
      pinMode(A2, OUTPUT);
      delay(5000);
    }
     
    /* Crea la funcio del display de 7 segments */
    void display(int a, int b, int c, int d, int e, int f, int g){
      digitalWrite (A0,a);
      digitalWrite (8,b);
      digitalWrite (9,c);
      digitalWrite (10,d);
      digitalWrite (11,e);
      digitalWrite (A1,f);
      digitalWrite (A2,g);
    }
     
    void condicions(int n){
      switch(n){
        case 0: display (1,1,1,1,1,1,0); break;
        case 1: display (0,1,1,0,0,0,0); break;
        case 2: display (1,1,0,1,1,0,1); break;
        case 3: display (1,1,1,1,0,0,1); break;
        case 4: display (0,1,1,0,0,1,1); break;
        case 5: display (1,0,1,1,0,1,1); break;
        case 6: display (1,0,1,1,1,1,1); break;
        case 7: display (1,1,1,0,0,0,0); break;
        case 8: display (1,1,1,1,1,1,1); break;
        case 9: display (1,1,1,0,0,1,1); break;
      }
    }
     
    /* Bucle del programa. Estructura principal */
    void loop() {
      dist = ultrasons.Ranging(CM);
      Serial.print("Distancia: ");
      if(dist<10) Serial.print(" ");
      Serial.print(dist);  
      Serial.print(" cm");
      Serial.print("\t\tNombre d'activacions: ");
      Serial.println(acts);
      lectura = digitalRead(boto);
      if(lectura==HIGH && anterior==LOW && millis()-temps>antirebot){
        if(estat==HIGH) estat = LOW;
        else estat = HIGH;
        temps = millis();
      }
      if(dist<=20){
        digitalWrite(LedPin, estat);
        digitalWrite(zumb, estat);
      }
      else{
        digitalWrite(LedPin, LOW);
        digitalWrite(zumb, LOW);
      }
      anterior = lectura;
      if(dist<=20 && estat==HIGH){
        cont++;
        condicions(cont);
      }
      if(cont>=10){
       condicions(0);
       cont = 0;
       acts += 10;
      }
      delay(250);
    }
     
    /* Fi del programa */