Sunteți pe pagina 1din 6

//VARIABLES PARA EL DISPLAY DE 7 SEGMENTOS CON 4 DIGITOS

//LA LETRA CORRESPONDE AL SEGMENTO Y EL NUMERO AL PUERTO GIO


int A=0;
int B=1;
int C=2;
int D=3;
int E=4;
int F=5;
int G=6;
int DP=7;
//VARIABLES PARA ENCENDER/APAGAR LOS DIGITOS
//LA LETRA CORRESPONDE AL DIGITO Y EL NUMERO AL PUERTO GIO
int D1=8;
int D2=9;
int D3=10;
int D4=11;
int Display[]={A,B,C,D,E,F,G}; //VECTOR CON LOS SEGMENTOS DEL DISPLAY
int Digit[]={D1,D2,D3,D4}; //VECTOR PARA CONTROL DE DIGITOS
int i=0,j=0,k=0,l=0,m=0,t=0; //VARIABLES PARA CONTADORES
double rpm; //VARIABLE DONDE SERAN ALMACENADAS LAS RPM
double offset; //VARIABLE PARA ERROR DE OFFSET
int rpmPin = 0; //ENTRADA ANALOGICA POR EL PUERTO A0
int array[4]; //VECTOR PARA SEPARAR LOS VALORES EN LOS DIGITOS
void setup() { //CONDICIONES INICIALES DE OPERACION:
Serial.begin(9600); //SE INICIA COMUNICACION SERIAL A 9600 BITS POR SEGUNDO

for(i=0;i<7;i++){
pinMode(Display[i],OUTPUT); //SEGMENTOS DEL DISPLAY COMO SALIDA
digitalWrite(Display[i],HIGH); //SEGMENTOS APAGADOS
}

pinMode(DP,OUTPUT); //PUNTO DECIMAL COMO SALIDA


digitalWrite(DP,HIGH); //PUNTO DECIMAL APAGADO

for(i=0;i<4;i++){
pinMode(Digit[i],OUTPUT); //DIGITOS COMO SALIDA
digitalWrite(Digit[i],HIGH); //DIGITOS APAGADOS
}
}
void loop() { //FUNCION PRINCIPAL

rpm = analogRead(rpmPin); //LECTURA DE LA ENTRADA ADC (SALIDA DEL LM2917)


rpm = ((rpm+3.3)/256); //SE CONVIERTE LA ENTRADA DIGITAL AL VALOR DEL VOLTAJE
offset=rpm; //VARIABLE DE OFFSET SE LE DA EL VALOR DEL VOLTAJE
Serial.println(rpm); //SE MUESTRA EL VALOR DEL VOLTAJE EN EL MONITOR SERIAL
rpm = (2844.63*rpm-11.40795)/10; //SE CONVIERTE EL VOLTAJE A RPM
Serial.println(rpm); //SE MUESTRA EL VALOR DE LAS RPM EN EL MONITOR SERIAL

//PROCESO MATEMATICO PARA SEPARAR EL NUMERO DE RPM EN CADA DIGITO


array[0]=rpm/10; //DIGITO 1
array[1]=rpm-(array[0]*10); //DIGITO 2
array[2]=(rpm-(array[0]*10+array[1]))*10; //DIGITO 3
array[3]=100*(rpm-((array[0]*10)+(array[1])+(array[2]*0.1))); //DIGITO 4

for(t=0;t<5000;t++){ //CADA MEDIO SEGUNDO SE MUESTRAN LAS RPM EN EL DISPLAY

if(offset<=0.0129){ //SI EL VALOR DEL VOLTAJE ES MENOR O IGUAL A 0.0129 SE MUESTRA


CERO
digitalWrite(D4,LOW); //SE ENCIENDE EL DIGITO 4
NUM(0); //SE MANDA EL NUMERO CERO
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D4,HIGH); //SE APAGA EL DIGITO 4

digitalWrite(D3,LOW); //SE ENCIENDE EL DIGITO 3


digitalWrite(DP,LOW); //SE ENCIENDE EL PUNTO DECIMAL
NUM(0); //SE MANDA EL NUMERO CERO
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(DP,HIGH); //SE APAGA EL PUNTO DECIMAL
digitalWrite(D3,HIGH); //SE APAGA EL DIGITO 3

digitalWrite(D2,LOW); //SE ENCIENDE EL DIGITO 2


NUM(0); //SE MANDA EL NUMERO CERO
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D2,HIGH); //SE APAGA EL DIGITO 2

digitalWrite(D1,LOW); //SE ENCIENDE EL DIGITO 1


NUM(0); //SE MANDA EL NUMERO CERO
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D1,HIGH); //SE APAGA EL DIGITO 1

}else{ //SI EL VALOR DEL VOLTAJE ES MAYOR A 0.0129

digitalWrite(D4,LOW); //SE ENCIENDE EL DIGITO 4


NUM(array[3]); //DIGITO CUATRO DEL VALOR DE LAS RPM
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D4,HIGH); //SE APAGA EL DIGITO 4

digitalWrite(D3,LOW); //SE ENCIENDE EL DIGITO 3


digitalWrite(DP,LOW); //SE ENCIENDE EL PUNTO DECIMAL
NUM(array[2]); //DIGITO TRES DEL VALOR DE LAS RPM
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(DP,HIGH); //SE APAGA EL PUNTO DECIMAL
digitalWrite(D3,HIGH); //SE APAGA EL DIGITO 3
offset=rpm; //VARIABLE DE OFFSET SE LE DA EL VALOR DEL VOLTAJE
Serial.println(rpm); //SE MUESTRA EL VALOR DEL VOLTAJE EN EL MONITOR SERIAL
rpm = (2844.63*rpm-11.40795)/10; //SE CONVIERTE EL VOLTAJE A RPM
Serial.println(rpm); //SE MUESTRA EL VALOR DE LAS RPM EN EL MONITOR SERIAL

//PROCESO MATEMATICO PARA SEPARAR EL NUMERO DE RPM EN CADA DIGITO


array[0]=rpm/10; //DIGITO 1
array[1]=rpm-(array[0]*10); //DIGITO 2
array[2]=(rpm-(array[0]*10+array[1]))*10; //DIGITO 3
array[3]=100*(rpm-((array[0]*10)+(array[1])+(array[2]*0.1))); //DIGITO 4

for(t=0;t<5000;t++){ //CADA MEDIO SEGUNDO SE MUESTRAN LAS RPM EN EL DISPLAY

if(offset<=0.0129){ //SI EL VALOR DEL VOLTAJE ES MENOR O IGUAL A 0.0129 SE MUESTRA


CERO

digitalWrite(D4,LOW); //SE ENCIENDE EL DIGITO 4


NUM(0); //SE MANDA EL NUMERO CERO
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D4,HIGH); //SE APAGA EL DIGITO 4

digitalWrite(D3,LOW); //SE ENCIENDE EL DIGITO 3


digitalWrite(DP,LOW); //SE ENCIENDE EL PUNTO DECIMAL
NUM(0); //SE MANDA EL NUMERO CERO
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(DP,HIGH); //SE APAGA EL PUNTO DECIMAL
digitalWrite(D3,HIGH); //SE APAGA EL DIGITO 3

digitalWrite(D2,LOW); //SE ENCIENDE EL DIGITO 2


NUM(0); //SE MANDA EL NUMERO CERO
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D2,HIGH); //SE APAGA EL DIGITO 2

digitalWrite(D1,LOW); //SE ENCIENDE EL DIGITO 1


NUM(0); //SE MANDA EL NUMERO CERO
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D1,HIGH); //SE APAGA EL DIGITO 1

}else{ //SI EL VALOR DEL VOLTAJE ES MAYOR A 0.0129

digitalWrite(D4,LOW); //SE ENCIENDE EL DIGITO 4


NUM(array[3]); //DIGITO CUATRO DEL VALOR DE LAS RPM
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D4,HIGH); //SE APAGA EL DIGITO 4

digitalWrite(D3,LOW); //SE ENCIENDE EL DIGITO 3


digitalWrite(DP,LOW); //SE ENCIENDE EL PUNTO DECIMAL
NUM(array[2]); //DIGITO TRES DEL VALOR DE LAS RPM
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(DP,HIGH); //SE APAGA EL PUNTO DECIMAL
digitalWrite(D3,HIGH); //SE APAGA EL DIGITO 3

digitalWrite(D2,LOW); //SE ENCIENDE EL DIGITO 2


NUM(array[1]); //DIGITO DOS DEL VALOR DE LAS RPM
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D2,HIGH); //SE APAGA EL DIGITO 2

digitalWrite(D1,LOW); //SE ENCIENDE EL DIGITO 1


NUM(array[0]); //DIGITO UNO DEL VALOR DE LAS RPM
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D1,HIGH); //SE APAGA EL DIGITO 1
}
}

}
//SE TOMA LA DECISION DE QUE NUMERO SE VA A MOSTAR EN EL DIGITO DEL DISPLAY
//ESTE NUMERO DEPENDE DEL DIGITO DEL VALOR DE LAS RPM
void NUM(int c){
if(c==0)
ZERO();
if(c==1)
EINS();
if(c==2)
ZWEI();
if(c==3)
DREI();
if(c==4)
VIER();
if(c==5)
FUNF();
if(c==6)
SECHS();
if(c==7)
SIEBEN();
if(c==8)
ACHT();
if(c==9)
NEUN();
}
void ZERO(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CERO
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[E],LOW);
digitalWrite(Display[F],LOW);
}
void EINS(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL UNO
digitalWrite(Display[B],LOW);

digitalWrite(D2,LOW); //SE ENCIENDE EL DIGITO 2


NUM(array[1]); //DIGITO DOS DEL VALOR DE LAS RPM
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D2,HIGH); //SE APAGA EL DIGITO 2

digitalWrite(D1,LOW); //SE ENCIENDE EL DIGITO 1


NUM(array[0]); //DIGITO UNO DEL VALOR DE LAS RPM
INIT(); //RESET EN EL VALOR DEL DISPLAY
digitalWrite(D1,HIGH); //SE APAGA EL DIGITO 1
}
}

}
//SE TOMA LA DECISION DE QUE NUMERO SE VA A MOSTAR EN EL DIGITO DEL DISPLAY
//ESTE NUMERO DEPENDE DEL DIGITO DEL VALOR DE LAS RPM
void NUM(int c){
if(c==0)
ZERO();
if(c==1)
EINS();
if(c==2)
ZWEI();
if(c==3)
DREI();
if(c==4)
VIER();
if(c==5)
FUNF();
if(c==6)
SECHS();
if(c==7)
SIEBEN();
if(c==8)
ACHT();
if(c==9)
NEUN();
}
void ZERO(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CERO
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[E],LOW);
digitalWrite(Display[F],LOW);
}
void EINS(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL UNO
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
}
void ZWEI(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL DOS
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[E],LOW);
digitalWrite(Display[G],LOW);
}
void DREI(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL TRES
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[G],LOW);
}
void VIER(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CUATRO
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[F],LOW);
digitalWrite(Display[G],LOW);
}
void FUNF(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CINCO
digitalWrite(Display[A],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[F],LOW);
digitalWrite(Display[G],LOW);
}
void SECHS(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL SEIS
digitalWrite(Display[C],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[E],LOW);
digitalWrite(Display[F],LOW);
digitalWrite(Display[G],LOW);
}
void SIEBEN(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL SIETE
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
}
void ACHT(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL OCHO
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
Proyecto Final
digitalWrite(Display[C],LOW);
}
void ZWEI(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL DOS
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[E],LOW);
digitalWrite(Display[G],LOW);
}
void DREI(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL TRES
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[G],LOW);
}
void VIER(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CUATRO
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[F],LOW);
digitalWrite(Display[G],LOW);
}
void FUNF(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CINCO
digitalWrite(Display[A],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[F],LOW);
digitalWrite(Display[G],LOW);
}
void SECHS(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL SEIS
digitalWrite(Display[C],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[E],LOW);
digitalWrite(Display[F],LOW);
digitalWrite(Display[G],LOW);
}
void SIEBEN(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL SIETE
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
}
void ACHT(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL OCHO
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[D],LOW);
digitalWrite(Display[E],LOW);
digitalWrite(Display[F],LOW);
digitalWrite(Display[G],LOW);
}
void NEUN(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL NUEVE
digitalWrite(Display[A],LOW);
digitalWrite(Display[B],LOW);
digitalWrite(Display[C],LOW);
digitalWrite(Display[F],LOW);
digitalWrite(Display[G],LOW);
}
void INIT(void){ //REINICIO DEL DISPLAY, TODOS LOS SEGMENTOS APAGADOS
for(i=0;i<7;i++){
digitalWrite(Display[i],HIGH);
}
}

S-ar putea să vă placă și