// Contador de personas
//
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
//digitos
int d1 = 9;
int d2 = 10;
int d3 = 11;
int d4 = 12;
int t = 20;
const int EchoPin = 1;
const int TriggerPin = 13;
bool detectando = true;
int distdetect = 20; //dist en cm para detectrar
int contador = 0;//contador personas
// PORT_X(Hex) 0 1 2 3 4 5 6 7 8 9
int display7a[10]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
//Delcaración de Los Pines del Display
void disp(int bits,int ini,int fin){
for(int i=ini;i<=fin;i++)
{
digitalWrite(i,bitRead(bits,i-ini));
}
}
void setup() {
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(d2, OUTPUT);
//Serial.begin(9600);
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
int distancia = ping(TriggerPin, EchoPin);
if(distancia < distdetect && detectando == false){
contador++;
detectando = true;
}
if(distancia >= distdetect && detectando == true){
detectando = false;
}
int Vcontador[4];
//Dígito Millar
Vcontador[0]=contador/1000;
//Dígito Centena
Vcontador[1]=(contador-Vcontador[0]*1000)/100;
//Dígito Decena
Vcontador[2]=(contador-Vcontador[0]*1000-Vcontador[1]*100)/10;
//Dígito Unidad
Vcontador[3]=(contador-Vcontador[0]*1000-Vcontador[1]*100-Vcontador[2]*10);
for(int i=d1;i<=d4;i++){
//Muestra unidades
for(int x=0;i<=d4;i++){
disp(display7a[Vcontador[i-d1]],a,g);
digitalWrite(i,HIGH); //Enciende el display de unidades
delay(1); //Retardo de 1 milisegundos
digitalWrite(i,LOW); //Apaga el display de unidades
}
delay(40);//delay
}
}
int ping(int TriggerPin, int EchoPin) {//La fucion ping coge los pines echo y trig y devuelve distancia
long duration, distanceCm;
digitalWrite(TriggerPin, LOW); //para generar un pulso limpio ponemos a LOW 4us
delayMicroseconds(4);
digitalWrite(TriggerPin, HIGH); //generamos Trigger (disparo) de 10us
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
duration = pulseIn(EchoPin, HIGH); //medimos el tiempo entre pulsos, en microsegundos
distanceCm = duration * 10 / 292/ 2; //convertimos a distancia, en cm
return distanceCm;
}