Está en la página 1de 17

//Display 7 Segmentos Catodo Común

int display7c[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};


//Display 7 Segmentos Anodo Común
int display7a[10]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
//Delcaración de Los Pines del Display
byte a=2;
byte b=3;
byte c=4;
byte d=5;
byte e=6;
byte f=7;
byte g=8;
byte inc=9; //Pulsador Incremento (Resistencia pulldown)
byte dec=10; //Pulsador Incremento (Resistencia pullup)
int contador=0;
//Función que coloca en el puerto de salida los bits comenzando
// desde el pin ini hasta el pin fin
void puerto(int bits,int ini,int fin){
for(int i=ini;i<=fin;i++)
{
digitalWrite(i,bitRead(bits,i-ini));
}
}
void setup() {
//Configura los 8 Pines digitales como SALIDAS
for(int i=a;i<=g;i++){
pinMode(i,OUTPUT);
}
pinMode(inc,INPUT);
pinMode(dec,INPUT_PULLUP);
}
void loop() {
//Incremento del Contador
if(digitalRead(inc)){
delay(100);
while(digitalRead(inc)); //Anti-Rebote
delay(100);
contador++;
}
//Decremento del Contador
if(!digitalRead(dec)){
delay(100);
while(!digitalRead(dec)); //Anti-Rebote
delay(100);
contador--;
}
//Si pasa de 9 en el incremento
if(contador>9){
contador=0;
1
}

//Si pasa de 0 en el decremento


if(contador<0){
contador=9;
}
//Muestra los numeros en el Display
puerto(display7c[contador],a,g);
}

2
3
4
5
//Display 7 Segmentos Catodo Común
int display7c[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
//Display 7 Segmentos Anodo Común
int display7a[10]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
//Delcaración de Los Pines del Display
byte a=2;
byte b=3;
byte c=4;
byte d=5;
byte e=6;
byte f=7;
byte g=8;
// Declaración de los Pines de los Transistores
byte t1=9;
byte t2=10;
byte t3=11;
byte t4=12;
6
//Contadores para hacer el Temporizador
long tempor=0,contret=0;
//Función que coloca en el puerto de salida los bits comenzando
// desde el pin ini hasta el pin fin
void puerto(int bits,int ini,int fin){
for(int i=ini;i<=fin;i++)
{
digitalWrite(i,bitRead(bits,i-ini));
}
}

//Función encargada de la multiplexación


void mostrar( ) //Rutina mostrar
{
int dig[4]; //Declarar las variables
//como un entero, es decir de 8bits
//Dígito Millar
dig[0]=tempor/1000;
//Dígito Centena
dig[1]=(tempor-dig[0]*1000)/100;
//Dígito Decena
dig[2]=(tempor-dig[0]*1000-dig[1]*100)/10;
//Dígito Unidad
dig[3]=(tempor-dig[0]*1000-dig[1]*100-dig[2]*10);

//Rutina de Multiplexación
for(int i=t1;i<=t4;i++){
//Muestra unidades
puerto(display7c[dig[i-t1]],a,g);
digitalWrite(i,HIGH); //Enciende el display de unidades
delay(1); //Retardo de 1 milisegundos
digitalWrite(i,LOW); //Apaga el display de unidades
}
}

//Función que cuenta el tiempo que le toma al temporizador


//incrementar su cuenta
void temporizacion()
{
contret=50; //Cargue con 50 la variable CONTRET
while (contret>0) //Mientras que la variable CONTRET sea mayor que cero
{
mostrar(); //Llamar la rutina MOSTRAR
contret--; // Decremente la variable CONTRET
}
}

//Configura todos los pines como Salidas


void setup() {
//Configura los 8 Pines digitales como SALIDAS
7
for(int i=a;i<=t4;i++){
pinMode(i,OUTPUT);
}
}

//Programa Principal
void loop() {
tempor=0; //Inicializa el temporizador en Cero
while(tempor<9999) //mientras la variable TEMPOR es menor que 9999
{
temporizacion(); //Llama la Función Temporizaor
tempor++; //Incrementa el tempor
}
}

8
9
10
11
12
13
//Declaración de los PULSADORES
byte PHorario = 2; //Pulsador sentido horario
byte PAntiHorario = 3; //Pulsador sentido anti horario
byte PPasos = 4; //Pulsador número de pasos
byte PVel = 5; //Pulsador velocidad

//Declaración de los PINES del Driver


byte IN1=8; // 28BYJ48 In1
byte IN2=9; // 28BYJ48 In2
byte IN3=10; // 28BYJ48 In3
byte IN4=11; // 28BYJ48 In4
int horario=1;
//*** Crear Matriz con los Pasos del Motor ***//
int paso=4; //Variable que indica el número de pasos de las matrices
int Cpaso=0; //Contador de pasos

int vel[5]={5,10,30,100,500}; //Vector de velocidad


int Cvel=0; //Contador de Velocidad
int conf=1; //Variable que configura la secuencia de pasos

14
//secuencia 1 paso
const int UnPaso[4] = { B1000,
B0100,
B0010,
B0001 };

//secuencia 2 pasos
const int DosPasos[4] = { B1100,
B0110,
B0011,
B1001 };
// Secuencia a medio paso
byte const MedioPaso[8] = { B1000,
B1100,
B0100,
B0110,
B0010,
B0011,
B0001,
B1001 };
//Función que coloca en el puerto de salida los bits comenzando
// desde el pin ini hasta el pin fin
void puerto(int bits,int ini,int fin){
for(int i=ini;i<=fin;i++)
{
digitalWrite(i,bitRead(bits,i-ini));
}
}

void setup() {

//Configura los 4 Pines de Pulsadores como ENTRADAS


for(int i=2;i<=5;i++){
pinMode(i,INPUT);
}
//Configura los 4 Pines digitales como SALIDAS
for(int i=IN1;i<=IN4;i++){
pinMode(i,OUTPUT);
}

void loop() {

//******************************************************************************//
//*********** Pregunta por los Pulsadores *********************************//
//******************************************************************************//

// Giro en Sentido Horario


if(digitalRead(PHorario)) // Pregunta si pulsador horario fue presionado
15
{
delay(100); //Anti-Rebote
horario=1;
Cpaso=-1;
}

// Giro en Sentido Anti-Horario


if(digitalRead(PAntiHorario)) // Pregunta si pulsador horario fue presionado
{
delay(100); //Anti-Rebote
horario=0;
Cpaso=paso;
}

// Cambio de la secuencia de pasos


if(digitalRead(PPasos)) // Pregunta si pulsador horario fue presionado
{
delay(100); //Anti-Rebote
while(digitalRead(PPasos)); //Espera hasta soltar el boton
delay(100); //Anti-Rebote
conf++;
//Si ya paso por las 3 configuraciones reinicie
if(conf>3)
conf=1;
if(horario==1)
Cpaso=-1;
else
Cpaso=paso;

puerto(B0000,IN1,IN4);
}

// Velocidad del Motor


if(digitalRead(PVel)) // Pregunta si pulsador horario fue presionado
{
delay(100); //Anti-Rebote
while(digitalRead(PVel)); //Espera hasta soltar el boton
delay(100); //Anti-Rebote
Cvel++;
//Si ya paso por las 5 velocidades reinicie
if(Cvel>4)
Cvel=0;
}

//******************************************************************************//
//*********** Logica de los contadores *********************************//
//******************************************************************************//
if(horario==1)
{
Cpaso++; //Incremente la variable cont
16
if(Cpaso>=paso)
Cpaso=0; //Se pone Contador de pasos en cero
}
else{
Cpaso--; //Decremente la variable cont
if(Cpaso<0)
Cpaso=paso-1; //Se pone Contador igual al paso
}

//******************************************************************************//
//*********** Secuencia de Movimiento del Motor ***************************//
//******************************************************************************//

switch(conf){
case 1:
puerto(UnPaso[Cpaso],IN1,IN4); //Envíe al puerto la información de la tabla
paso=4;
break;
case 2:
puerto(DosPasos[Cpaso],IN1,IN4); //Envíe al puerto la información de la tabla
paso=4;
break;
case 3:
puerto(MedioPaso[Cpaso],IN1,IN4); //Envíe al puerto la información de la tabla
paso=8;
break;
}
delay(vel[Cvel]); //Retardo de 100 milisegundos

17

También podría gustarte