Ficha 3

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

ENTRADAS DIGITALES EN ARDUINO

OBJETIVOS
- Identificar las entradas digitales de Arduino
- Manipular dichas entradas para que se produzca un efecto
- Crear el software y montar el hardware para la practica

PRODUCTOS
- Circuito funcional según las graficas
- Software de control tanto de entradas como salidas, variaciones según creatividad de cada alumno

Arduino incorpora múltiples pines que pueden funcionar como entrada y salida. Vamos a probar a utilizar
como entrada para leer datos de sensores externos. Las entradas digitales permiten leer un valor ON
/ OFF según el voltaje que se aplique en el pin correspondiente.
Si se aplica un voltaje menor de 2v se leerá un valor LOW (un “0” lógico)
Si se aplica un valor mayor de 3v se leerá un valor HIGH (un “1” lógico)
El esquema para conectar un pulsador/interruptor a una entrada digital de Arduino es:

El siguiente programa permite que cada vez que se obture el pulsador el LED invertirá su estado,
adicionalmente se introduce una pequeña rutina que evita el “rebote” que es una situación en la cual el
pulsador por efecto mecánico genera múltiples pulsos eléctricos cuando de obtura y el led enciende y
apaga repetidas veces y puede quedar en la posición no deseada.

const int pinLed = 2; //El pin del LED


const int pinBtn = 4; // El pin del botón
int encender = 0; // Si está encendido el LED
int anterior = 0; // Pulsación anterior
int estado = 0; //El estado actual del botón
void setup() {
pinMode(pinLed, OUTPUT);
pinMode(pinBtn, INPUT); }
void loop() {
estado = digitalRead(pinBtn);
if (estado && anterior == 0) {
encender = 1 - encender;
delay(30); // Anti-rebote
}
anterior = estado;
if(encender) // Si encender es 1
digitalWrite(pinLed, HIGH); // Encendemos el LED
else // Si no
digitalWrite(pinLed, LOW); // Apagamos el LED
}

Ahora incorporamos tanto entradas como salidas, vamos a usar los Displays 7 segmentos y dos
pulsadores que nos permitirán realizar un conteo ascendente y descendente desde un valor inicial
predeterminado, aquí los esquemáticos y el código correspondiente.

.
#define SUM A2 int digit1 = (num / 1000) % 10;
#define RES A3 int digit2 = (num / 100) % 10;
#define D1 10 int digit3 = (num / 10) % 10;
#define D2 11 int digit4 = num % 10;
#define D3 12 Digito1(numbers[digit1]);
#define D4 13 delay(2);
int anterior = 0; // Pulsación anterior ++ Digito2(numbers[digit2]);
int estado = 0; //El estado actual del botón delay(2);
int anterior1 = 0; // Pulsación anterior -- Digito3(numbers[digit3]);
int estado1 = 0; //El estado actual del botón delay(2);
int Val = 0; Digito4(numbers[digit4]);
const int segs[8] = { 5, 8, 6, 2, 3, 7, 9, 4 }; delay(2);
//P, G, F, E, D, C, B, A }
const byte numbers[] = { 0b11111100, void Digito1(byte n) {
0b01100000, 0b11011010, 0b11110010, digitalWrite(D1, HIGH);
0b01100110, 0b10110110, 0b10111110, digitalWrite(D2, LOW);
0b11100000, 0b11111110, 0b11110110 }; digitalWrite(D3, LOW);
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 digitalWrite(D4, LOW);
void setup() { segmentos(n);
pinMode(2, OUTPUT);// Asignación de las }
pinMode(3, OUTPUT);// salidas digitales void Digito2(byte n) {
pinMode(4, OUTPUT); digitalWrite(D1, LOW);
pinMode(5, OUTPUT); digitalWrite(D2, HIGH);
pinMode(6, OUTPUT); digitalWrite(D3, LOW);
pinMode(7, OUTPUT); digitalWrite(D4, LOW);
pinMode(8, OUTPUT); segmentos(n);
pinMode(9, OUTPUT); }
pinMode(10, OUTPUT); void Digito3(byte n) {
pinMode(11, OUTPUT); digitalWrite(D1, LOW);
pinMode(12, OUTPUT); digitalWrite(D2, LOW);
pinMode(13, OUTPUT); digitalWrite(D3, HIGH);
pinMode(A2, INPUT);// Asignación de las digitalWrite(D4, LOW);
pinMode(A3, INPUT);// entradas digitales segmentos(n);
} }
void loop() { void Digito4(byte n) {
estado = digitalRead(SUM); //Botón suma pulsado? digitalWrite(D1, LOW);
if (estado && anterior == 0) digitalWrite(D2, LOW);
{ Val = Val+1; digitalWrite(D3, LOW);
delay(30); // Anti-rebote digitalWrite(D4, HIGH);
if (Val == 1000){ segmentos(n);
Val = 0; } } }
anterior = estado; void segmentos(byte n) {
estado1 = digitalRead(RES);//Botón resta pulsado? for (int i = 0; i < 8; i++) {
if (estado1 && anterior1 == 0) int bit = bitRead(n, i);
{ Val = Val-1; digitalWrite(segs[i], bit);
delay(30); // Anti-rebote }
if (Val < 0){ }
Val = 999; } }
anterior1 = estado1;
MostrarNum(Val); }
void MostrarNum(int num) {
Estas entradas funcionan de igual forma para cualquier sensor con salida digital, estos son fácilmente
identificables por los termínales del sensor que se identifican como D0, hay multiples sensores en el
mercado con esta salida y también con la combinación de salida análoga y digital.

Estos sensores usan un comparador, generalmente un LM393, y con un potenciómetro se ajusta el punto
en el cual la comparación entre el valor de voltaje entregado por el sensor y el que ha sido previamente
fijado en el potenciómetro disparan el paso de ALTO a BAJO y viceversa.

Ahora con

Para el contador con 7 segmentos:


http://www.arduinoblocks.com/web/project/77482

También podría gustarte