martes, 20 de diciembre de 2016

contador con 4 displays de 7 segmentos

TEMA: Contador con 4 displays de 7 segmentos.
Contador con 4 displays de 7 segmentos.
Multiplexado







// Formacion de los numeros  del 0 al 9 en el display de 7 segmentos
// 0 => -FEDCBA
// 1 => - - - -CB-
// 2 => G-ED-BA
// 3 => G--DCBA
// 4 => GF--CB-
// 5 => GF-DC-A
// 6 => GFEDC-A
// 7 => ----CBA
// 8 => GFEDCBA
// 9 => GF-DCBA

// Asignamos los puertos digitales en Arduino
// Estos corresponde a cada segmento del display
#define A 2   // el puerto 2 está asignado para en segmento A del display
#define B// el puerto 3 está asignado para en segmento B del display
#define C//  el puerto 4 está asignado para en segmento C del display
#define D// el puerto 5 esta asignado para en segmento D del display
#define E 6   // el puerto 6 esta asignado para en segmento E del display
#define F 7   // el puerto 7 esta asignado para en segmento F del display
#define G// el puerto 8 esta asignado para en segmento G del display


// Asignacion de los pines donde están conectados los cátodos
#define  catodocomun1      9
#define  catodocomun2     10
#define  catodocomun3     11
#define  catodocomun4     12

// Dos pulsadores conectados a los  pins 14 and 15
#define BTN1 14
#define BTN2 15

//Estado para pulsadores
int estadobtn1 = 0; //creamos una variable para el estado del botón1 y lo iniciamos acero
int estadobtn2 = 0; //creamos una variable para el estado del botón2 y lo iniciamos acero


//  Secuencia para los Pins  A B C D E F G,
// Creamos un vector de 7 elementos  y le asignamos los pines de cada segmento
//El tipo de dato que maneja el vector es tipo entero (int)
//El nombre del vector se llama segmentos
const  int segmentos[7] = { 2, 3, 4, 5, 6, 7, 8 };

// Creamos un vector  de 10 elementos que corresponde a los números que va mostrar
// El tipo de dato que maneja el vector es binario (byte)
const byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111};

int digit1 = 0; // creamos 4 variables para el estado de c/u displays.Iniciamos en cero
int digit2 = 0;
int digit3 = 0;
int digit4 = 0;
int count = 0;//creamos una variable contadora, la inicializamos en cero
int val;
void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BTN1, INPUT);
  pinMode(BTN2, INPUT);
  digitalWrite(BTN1, HIGH); // activa RPA
  digitalWrite(BTN2, HIGH); // activa RPA
  pinMode(catodocomun1, OUTPUT);
  pinMode(catodocomun2, OUTPUT);
  pinMode(catodocomun3, OUTPUT);
  pinMode(catodocomun4, OUTPUT);
  
} //cerrando  la  configuración de puertos

void loop() {
  val = digitalRead(BTN1); // lee el valor de entrada y almacénlo en val
  if (val != estadobtn1) // el estado de botón ha cambiado!
  {
    if (val == LOW) // compruebe si el botón es presionado
    {
      count++;
      count %= 10000;
    }
  }
  estadobtn1=val;

  val = digitalRead(BTN2); // lee el valor de entrada y almacénlo en val
  if (val != estadobtn2) // el estado de botón ha cambiado!
  {
    if (val == LOW) // compruebe si el botón es presionado
    {
      if (count == 0)
    {
      count=9999;
    } else {
      count--;
      }
    }
    estadobtn2=val;
  }
// display number
digit1=count / 1000;
digit2=(count - (digit1 * 1000)) / 100;
digit3=(count - (digit1*1000) - (digit2*100)) / 10;
digit4=count % 10;

  lightDigit1(numbers[digit1]);
  delay(2);
  lightDigit2(numbers[digit2]);
  delay(2);
  lightDigit3(numbers[digit3]);
  delay(2);
  lightDigit4(numbers[digit4]);
  delay(2);
}

void lightDigit1(byte number) {
  digitalWrite(catodocomun1, LOW);
  digitalWrite(catodocomun2, HIGH);
  digitalWrite(catodocomun3, HIGH);
  digitalWrite(catodocomun4, HIGH);
  lightSegments(number);
}

void lightDigit2(byte number) {
  digitalWrite(catodocomun1, HIGH);
  digitalWrite(catodocomun2, LOW);
  digitalWrite(catodocomun3, HIGH);
  digitalWrite(catodocomun4, HIGH);
  lightSegments(number);
}

void lightDigit3(byte number) {
  digitalWrite(catodocomun1, HIGH);
  digitalWrite(catodocomun2, HIGH);
  digitalWrite(catodocomun3, LOW);
  digitalWrite(catodocomun4, HIGH);
  lightSegments(number);
}

void lightDigit4(byte number) {
  digitalWrite(catodocomun1, HIGH);
  digitalWrite(catodocomun2, HIGH);
  digitalWrite(catodocomun3, HIGH);
  digitalWrite(catodocomun4, LOW);
  lightSegments(number);
}

void lightSegments(byte number) {
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }

}

secuencia de leds

Componentes

  •  arduino
  •  protoboard
  • 7 leds
  • 7 resistencias de 220 Ohmios


Circuito





Diagrama
Código






Código

/*
Secuencia de leds
En este laboratorio No 1 se encienden y apagan una secuencia de leds
uno despues de otro, primero en un sentido y luego en el otro
*/
const int pausa = 500; // El tiempo que permanece encendido cada led
void setup() {
// inicializamos los pines del 4 al 10 como OUTPUT (salida) con un ciclo for
for (int pinLed = 4; pinLed < 11; pinLed++) {
pinMode(pinLed, OUTPUT);
}
}
void loop() {
// encendemos y apagamos en un loop desde el pin menor 4 al mayor 10
for (int pinLed = 4; pinLed < 11; pinLed++) {
// pone el pinLed en HIGH encendiendo el led
digitalWrite(pinLed, HIGH);
delay(pausa);
// pone el pinLed en LOW apagando el led
digitalWrite(pinLed, LOW);
}
delay(pausa);
// encendemos y apagamos en otro loop desde el pin mayor 10 al pin menor 4
for (int pinLed = 10; pinLed > 3; pinLed--) {
// pone el pinLed en HIGH encendiendo el led
digitalWrite(pinLed, HIGH);
delay(pausa);
// pone el pinLed en LOW apagando el led
digitalWrite(pinLed, LOW);
}
delay(pausa);

}




Comentarios:

El ciclo for tiene tres parametros o partes. Una variable o contador con un valor inicial. Una condicíon que debe cumplir esta variable para continuar el ciclo. Y una función para cambiar el valor de esta variable, comunmente para incrementarla. En el sketch usaremos el ciclo for en tres momentos. Primero, en la función setup, para inicializar todos los pines como pines de salida. Y despues, en la función loop, primero para encender y apagar los leds en un sentido y después para hacerloEl ciclo for tiene tres parametros o partes. Una variable o contador con un valor inicial. Una condicíon que debe cumplir esta variable para continuar el ciclo. Y una función para cambiar el valor de esta variable, comunmente para incrementarla. En el sketch usaremos el ciclo for en tres momentos. Primero, en la función setup, para inicializar todos los pines como pines de salida. Y despues, en la función loop, primero para encender y apagar los leds en un sentido y después para hacerlo en el otro sentido. La función void setup() es la primera que se ejecuta , declaramos variables ,inicializamos pinmode, comunicación en serie. Se ejecuta una sola vez cuando comienza el programa. Aun cuando no escribamos nada en él, es necesario escribirlo y añadir las llaves de apertura y cierre { } La función void loop () incluye el código que ha de ser ejecutado continuamente Se denomina Sketch a una parte de código fuente listo para abrir con el entorno de desarrollo integrado de Arduino y ser cargado sobre nuestro dispositivo. Es nuestro programa en arduino



Estructura Sketch 

Void setup ( ) 
  

Sentencias;

 } 

Void loop() 


Sentencias; 

}


Dos leds intermitentes

Componentes

  • arduino
  •  protoboard
  •  2 leds
  • 2 resistencias de 220 Ohmios

Circuito

diagrama




















Código


Las declaraciones de las constantes y variables para los valores de los pines y de la pausa, deben hacerse antes de las funciones setup() yloop()

/*
Sketch dos leds intermitentes en el Protoboard
Enciende y apaga dos leds alternada e intermitente
*/
// definimos las constantes con los numeros de los pines
const int pinLed1 = 9;
const int pinLed2 = 10;


// definimos la duracion de la pausa en milisegundos
const int pausa = 1000;
void setup() {
// inicializa los pines como output (salida)
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
}
void loop() {
digitalWrite(pinLed1, HIGH);                          // pone el LED pinLed1 en on, encendido
digitalWrite(pinLed2, LOW);                           // pone el LED pinLed2 en off, apagado
delay(pausa);                                                    // espera por el tiempo, milisegundos,pausa
digitalWrite(pinLed1, LOW);                          // pone el LED pinLed1 en off, apagado
digitalWrite(pinLed2, HIGH);                          // pone el LED pinLed2 en on, encendido
delay(pausa);                                                     // espera por el tiempo, milisegundos,pausa
}