sábado, 28 de febrero de 2015

Programación de entradas y salidas digitales + pantalla LCD con RasperryPi y Arduino Micro





En este proyecto implementaremos un sistema para gestionar 4 entradas digitales, 4 salidas digitales y una pantalla de cristal líquido LCD de 16 x 2 caracteres.
Además realizaremos una placa base y algunas placas periféricas para usarlas  en sustitución de la placa de pruebas (protoboard).

Esto nos permitirá implementar, ejecutar y depurar este y futuros proyectos de una manera rápida en lo que se refiere al cableado y los componentes básicos que requieren cualquier circuito electrónico para un microcontrolador tales como L.E.D.'s, resistencias, clemas, pulsadores, etc.
De esta manera, una vez realizadas las placas estarán siempre disponible para comenzar cualquier nuevo proyecto centrándonos solo en el software.

La placa base tendrá una interfaz física de idéntica distribución que  el puerto de entradas y salidas de propósito general ( GPIO ) de la RaspberryPi B PLUS.

Para la conexión de la placa base con el Arduino Micro, se usará una placa conversora de la distribución de los contactos entre ambos.

La placa base servirá de nexo entre nuestro microcontrolador principal, ya sea RaspberryPi o Arduino y los elementos de campo tales como relés, entradas-salidas digitales, sondas de temperatura, pantallas LCD y otros dispositivos habituales de un sistema de automatización y control.
Con el programa EntradasSalidasDigitalesMasLcd*.* , probaremos todas las placas y circuiterías realizadas usando ambos microcontroladores.

1 Placas base y periféricas.

    1.1 Circuitos básicos
         1.1.1 Salida digital. Activación de un diodo emisor de luz LED.
         1.1.2 Salida digital. Activación de un micro relé.
         1.1.3 Entrada digital.
         1.1.4 Entrada digital opto-acoplada.
         1.1.5 Pantalla LCD 16 x 02.

    1.2 Imágenes de los circuitos.
         1.2.1 Placa base.
         1.2.2 Zócalo pantalla LCD.
         1.2.3 Zócalo para módulo exterior de 4 relés.
         1.2.4 Módulo exterior de 2 entradas digitales.
         1.2.5 Módulo exterior de 2 entradas digitales opto-acopladas.
         1.2.6 Sensores de temperatura DS18B20.
         1.2.7 Interfaz para Arduino Micro.

2 Software.

   2.1 Entorno de programación.
   2.2 Librerías especiales.
   2.3 Archivo EntradasSalidasDigitalesMasLcdRaspberryPi.cpp
   2.4 Archivo de EntradasSalidasDigitalesMasLcdArduino.ino

3 Descargas.

    3.1 Esquemas de conexionado.
    3.2 EntradasSalidasDigitalesMasLcdRaspberryPi.cpp
    3.3 EntradasSalidasDigitalesMasLcdArduino.ino

4 Vídeo demostración

    4.1 Demo EntradasSalidasDigitalesMasLcd *

1 PLACAS BASE Y PERIFÉRICAS


1.1Circuitos básicos.

1.1.1 Activación de un diodo emisor de luz LED.



 

Descripción del funcionamiento:

Al activarse la salida del microcontrolador, se establecerá una corriente entre esta misma y la conexión a tierra del indicador LED, iluminándolo he indicándonos el estado de la misma.
Para la alimentación de un diodo LED, es necesario conocer primero algunas características, como por ejemplo su tensión umbral (tuV) y el rango de intensidad ( I ) para su funcionamiento. Esto nos permitirá calcular una resistencia limitadora adecuada a las mismas. La tensión umbral (tuV) difiere según el color del LED.

En nuestro caso solo utilizaremos LED's verdes y rojos de 5 mm de diámetro.

La tensión umbral (tuV) para que un LED rojo conduzca corriente es de 1,9 V.
La tensión umbral (tuV) para que un LED veede conduzca corriente es de 2,4 V.

La intensidad recomendada para estos LED's es entre 5mA y 25 mA, dependiendo de la intensidad de brillo que necesitemos.
Para el valor del voltaje del Pin de salida, consideraremos 5V.
Nuestra intensidad de referencia será de 5 mA.

Para el calculo de las resistencias utilizaremos únicamente la Ley de Ohm  

                   R= V / I   

Restamos al voltaje de referencia  V, la tensión umbral del LED tuV

                  R = (V – tuV) / I

Resistencia limitadora LED rojo R = (5 – 1,9) / 0,005 = 620 h.
Resistencia limitadora LED verde R = (5 – 2,4) / 0,005 = 520 h.
Potencia de la resistencia P =V·I ; 3,1 · 0,005 = 0,0155 W, menos de ¼ de W.

Usaremos las resistencias comerciales de ¼ W mas cercanas a estos valores.

1.1.2 Activación de un micro relé. 

 

La activación de la bobina de un relé a través de la salida de un microcontrolador no la podemos hacer directamente, pues normalmente el consumo de su bobina extralimita el soportado por la salida del microcontrolador.

El método más habitual de hacerlo es  mediante un transistor.
En nuestro caso hemos utilizado el siguiente circuito para las salidas digitales de relé:




Descripción del funcionamiento:

Con la salida del microcontrolador desactivada, el flujo de corriente entre la unión colector (c) y el emisor (e) es nulo y no hay conducción eléctrica.
El transistor BD137 está en estado de corte.
Con la salida del microcontrolador activada se establecerá una pequeña corriente , (la que nos permite circular la resistencia de 1K1 ) entre la salida del microcontrolador y la conexión a tierra del transistor en el emisor, pasando antes por la base (b) del transistor.
El transistor está en estado de saturación.
Este nuevo estado de saturación convertirá en conductora al unión colector- emisor, permitiendo así un flujo de corriente mucho mayor desde la toma de 5Vcc, hasta la conexión a tierra del transistor en el emisor.
Este segundo flujo de corriente se verá forzado a circular a través de la bobina del relé, energizándola a su paso hacia la conexión a tierra del transistor en el emisor.

Cuando la salida del microcontrolador se desactive, el transistor volverá al estado de corte.
Esta transición de estados entre saturación y corte puede generar altos picos de tensión en la propia bobina, y que pueden resultar peligrosos para vida útil del transistor.
El diodo rectificador 1N4007 evitará esta situación cortocircuitando estos picos indeseados.

1.1.3 Entrada digital. 

 


Descripción del funcionamiento:


El pin de entrada está conectado mediante la resistencia de 4K3 al tierra. En el pin de entrada se están recibiendo en este momento 0Vcc que digitalmente serán interpretados como un "0" lógico.

Cuando se cierra el pulsador, se reciben 5Vcc en el pin de entrada que digitalmente será interpretado como un "1" lógico.
La resistencia 4K3 evitará el cruce de la fuente entre +5Vcc y tierra cuando se cierre el pulsador.


1.1.4 Entrada digital opto-acoplada.

 


Descripción del funcionamiento:


El opto-acoplador es una solución que nos permite proteger a nuestras entradas y salidas digitales de sobre tensiones y derivaciones a tierra indeseadas, que pueden incluso averiar nuestro microcontrolador irreversiblemente.
 
El pin de entrada está conectado mediante la resistencia de 4K3 al tierra.
Cuando el foto-transistor del 4N25 entra en estado de saturación se reciben 5Vcc en el pin de entrada.
Para ello es necesario accionar el pulsador, que al cerrar el circuito, se iluminará el LED encapsulado dentro del opto-acoplador. Esta luz será recibida por el foto-transistor que entrará en saturación.
Cualquier circuito de entrada o salida digital puede estar complementado
con un indicador luminoso LED para conocer su estado, siendo el
siguiente su esquema:





          1.1.5 Pantalla LCD 16 x 02





Descripción del funcionamiento:

El potenciómetro 1K5 regula el contraste de la pantalla por el pin 3.

La resistencia 330 limita la corriente en el LED de retro-iluminación  de la pantalla por el pin 15.

CONTROL:

El estado del pin 6 E  indica si es posible el acceso a la pantalla.

El estado del pin 5 R/W indica el tipo de acceso, si es de lectura o escritura.

El estado del pin 4 indica si lo recibido por el bus se deben considerar un dato o comando. 

Los pins 7 a 14 son el bus de datos/comandos.




    1.2 Imágenes de los circuitos.

 

Como se podrá comprobar a continuación las extensiones exteriores de la placa base así como los módulos están basados en conectores de 8 contactos RJ45 y espadines de 4 contactos, estos últimos muy utilizados en proyectos de Arduino.

En cualquier caso todos los componentes utilizados son de stock permanente en cualquier almacén del ramo.  

 

         1.2.1 Placa base.











         1.2.2 Zócalo pantalla LCD.

 

  Características de la pantalla LDC.

Datasheet de la pantalla lcd usada.

 

 

         1.2.3 Zócalo para módulo exterior de 4 

                   relés.

 

 

 

 

Módulo de 4 relés utilizado.

  

         1.2.4 Módulo exterior de 2 entradas 

                   digitales.

 

 


 

         1.2.5 Módulo exterior de 2 entradas

                  digitales opto-acopladas.

 



 

         1.2.6 Sensores de temperatura DS18B20.

 

        

         1.2.7 Interfaz para Arduino Micro.

 



 

2 SoftWare. 

 

     2.1 Entorno de programación.

 

El entorno de de desarrollo utilizado para la programación de la RaspberryPi,  es el IDE Code::Blocks, por su facilidad de manejo, por ser de código abierto y por el amplio soporte ofrecido.
Se puede instalar fácilmente una copia en la RaspberryPi.

Link de Code::Blocks.org         http://www.codeblocks.org/

Para le programación del Arduino Micro, claro está se ha utilizado se ha utilizado el IDE de Arduino.
Se puede instalar fácilmente una copia en la RaspberryPi.

Link de Arduino   http://arduino.cc/en/pmwiki.php?n=main/software

   2.2 Librerías especiales.

 

Para realizar este proyecto con RaspberryPi B+, se han  incluido en el código fuente algunas librerías especiales que facilitan el control del puerto de entradas y salidas de propósito general ( GPIO ) de la RaspberryPi, además del control de la pantalla LCD. Estas son -wiringPi.h - y -lcd.h-.
En las opciones del enlazador  "linker" del compilador, deben incluirse además las siguientes  librerias , -libwiringPi.so- y -libwiringPiDev.so-.

De todo esto se obtiene amplia información en la página oficial de wiringPi, http://wiringpi.com/ .

Para la misma aplicaión con Arduino Micro, se han incluido las librerías -Wire.h- y - LiquidCrystal.h- am,bas incluuidas en el IDE de ARDUINO.

   2.3 Listado de 

EntradasSalidasDigitalesMasLcdRaspberryPi.cpp

 

El siguiente programa escanea las entradas digitales y acciona intermitentemente el relé que corresponda a la siguiente asignación:

-pulsadorDePlaca->releDePlaca-
-pulsadorExterior_1->moduloSalida_1-
-pulsadorExterior_2->moduloSalida_2-
-pulsadorExterior_3->moduloSalida_3-
-pulsadorExterior_4->moduloSalida_4-

El proceso finaliza cuando se han ejecutado 100 escaneos, ó cuando se activan simultáneamente las entradas uno y dos.


/** --- EntradasSalidasDigitalesMasLcdRaspberryPi.cpp  -----

Programa de demostraci'on de programaci'on de la
Raspberrypi en C,C++
Uso de la libreria wiringPi.h
        http:/wiringpi.com
El siguiente programa muestra como activar intermitentemente una serie de rel'es,
dependiendo de la entrada digital que que est'e activada en ese momento.
Adem'as en en la pantalla LCD impri,mir'a la salida activa.
El programa finaliza cuando se pulsan dos entradas preseleccionas a la vez o
cuando se realizan 100 escaneos de entradas.
La denominaci'on de los pines utilizada el la de wiringPi wPi. Para conocer la equivalencia
entre los distintos sistemas de  nominaci'on de pines, teclear en la consola de comandos de
la raspberry :

$ sudo readall

Manuel Protasio

email:
manuelprotasio@gmail.com
http://mprsof.blogspot.com.es

*/

#include <iostream>
#include <stdio.h>
#include <wiringPi.h>
#include <lcd.h>

using namespace std;

// PANTALLA LCD
#define  LCD_FILAS 2      // cantidad de filas
#define  LCD_COLUMNAS 16  // cantidad de columnas
#define  LCD_BITS 4       // bus de bits de datos/comandos
#define  LCD_DB4 24       // pin GPIO 24 --> lcd 11
#define  LCD_DB5 23       // pin GPIO 23 --> lcd 12
#define  LCD_DB6 22       // pin GPIO 22 -->  lcd 13
#define  LCD_DB7 21       // pin GPIO 21 --> lcd 14
#define  LCD_RS 25        // pin GPIO 25 --> lcd 6
#define  LCD_E 30         // pin GPIO 30 --> lcd 4
int pantalla;

// PINS DE ENTRADA


int pulsadorPlaca=0;       // pin GPIO 0 --> Pulsador placa
int pulsadorExterior_1=31; // pin GPIO 31 --> Pulsador exterior 1
int pulsadorExterior_2=6;  // pin GPIO 36 --> Pulsador exterior 2
int pulsadorExterior_3=5;  // pin GPIO 5 --> Pulsador exterior 3
int pulsadorExterior_4=4;  // pin GPIO 4 --> Pulsador exterior 4

//PINS DE SALIDA
int ledDePlaca=2;           // pin GPIO 2--> ledDePlaca
int releDePlaca=3;          // pin GPIO 3 --> releDePlaca
int moduloSalida_1=29;      // pin GPIO 29 --> salida 1 en modulo de reles
int moduloSalida_2=26;      // pin GPIO 26 --> salida 2 en modulo de reles
int moduloSalida_3=27;      // pin GPIO 27 --> salida 3 en modulo de reles
int moduloSalida_4=28;      // pin GPIO 28 --> salida 4 en modulo de reles

int pulsadorActivo=100;

//Prototipos
void SaludoInicial();
void ConfigurarPinsDeSalida();
void ConfigurarPinsDeEntrada();
void ActivaSalida(int pulsador,int numeroBucle);
int EscanearPulsadores();
void SaludoFinal();

int main()
{
    // Inicia wiringPi
    wiringPiSetup();
    ConfigurarPinsDeSalida();
    ConfigurarPinsDeEntrada();

    // Inicia LCD.
    pantalla=lcdInit (LCD_FILAS,
                      LCD_COLUMNAS,
                      LCD_BITS,
                      LCD_RS,
                      LCD_E,
                      LCD_DB4,
                      LCD_DB5,
                      LCD_DB6,
                      LCD_DB7,
                      0,0,0,0);

    SaludoInicial();

    for (int k=100; k>=0; k--)

    {
        if ( EscanearPulsadores()==(pulsadorExterior_1+pulsadorExterior_2))
        {
            cout<<"\n-- EntradasSalidasDigitalesMasLcdRaspberryPi.cpp -- acab'o por usuario\n";
            SaludoFinal();
            return 0;
        }
        ActivaSalida(EscanearPulsadores(),k);
        lcdPosition(pantalla,0,0);
        lcdPrintf(pantalla, "                ");
        lcdPosition(pantalla,0,0);
        lcdPrintf(pantalla, "Bucle numero %d",k);

    }

    cout<<"\n-- EntradasSalidasDigitalesMasLcdRaspberryPi.cpp -- acab'o correctamente\n";
    SaludoFinal();

    return 0;
}
void SaludoInicial()
{
    // Saludo  en LCD
    lcdClear(pantalla);
    lcdPosition(pantalla,0,0);
    lcdPrintf(pantalla, "mprsoft-FREDINSA");
    lcdPosition(pantalla,0,1);
    lcdPrintf(pantalla,"  Bienvenido   ");

    // Saludo en el monitor de la Raspberry
    cout<<"Bienvenido al mundo de la RaspberryPi\n ";
    cout<<"\n--EntradasSalidasDigitalesMasLcdRaspberryPi.cpp -- iniciar'a en 5 segundos\n\n ";
    cout<<"\nEl programa finaliza transcurridos 100 lecturas, o \n";
    cout<<"\nactivando simultaneamente las entradas uno y dos";
    cout<<"\n";
    delay(5000);/* */
    cout<<"\nActive cualquier entrada digital para activar el rel'e asociado";
    cout<<"\n";
}


void ConfigurarPinsDeSalida()
{
    pinMode(ledDePlaca,OUTPUT);
    pinMode(releDePlaca,OUTPUT);
    pinMode(moduloSalida_1,OUTPUT);
    pinMode(moduloSalida_2,OUTPUT);
    pinMode(moduloSalida_3,OUTPUT);
    pinMode(moduloSalida_4,OUTPUT);

}
void ConfigurarPinsDeEntrada()
{
    pinMode (pulsadorExterior_1,INPUT);
    pinMode (pulsadorExterior_2,INPUT);
    pinMode (pulsadorExterior_3,INPUT);
    pinMode (pulsadorExterior_4,INPUT);
    pinMode(pulsadorPlaca,INPUT);
}
int EscanearPulsadores()
{

    if ( digitalRead(pulsadorExterior_1)==1 && digitalRead(pulsadorExterior_2)==1)
    {
        pulsadorActivo=pulsadorExterior_1+pulsadorExterior_2;
        return pulsadorActivo;
    }
    if ( digitalRead(pulsadorPlaca))pulsadorActivo=pulsadorPlaca;
    if ( digitalRead(pulsadorExterior_1))pulsadorActivo=pulsadorExterior_1;
    if ( digitalRead(pulsadorExterior_2))pulsadorActivo=pulsadorExterior_2;
    if ( digitalRead(pulsadorExterior_3))pulsadorActivo=pulsadorExterior_3;
    if ( digitalRead(pulsadorExterior_4))pulsadorActivo=pulsadorExterior_4;

    return pulsadorActivo;

}
void ActivaSalida(int pulsador,int numeroBucle)
{

    int salida=1000;
    char mensaje[8]="";

    if (pulsador==pulsadorPlaca)
    {
        salida=releDePlaca;
        sprintf(mensaje,"%s","PLACA ");

    }

    if (pulsador==pulsadorExterior_1)
    {
        salida=moduloSalida_1;
        sprintf(mensaje,"%s"," UNO  ");

    }
    if (pulsador==pulsadorExterior_2)
    {
        salida=moduloSalida_2;
        sprintf(mensaje,"%s"," DOS  ");
    }
    if (pulsador==pulsadorExterior_3)
    {
        salida=moduloSalida_3;
        sprintf(mensaje,"%s"," TRES ");
    }
    if (pulsador==pulsadorExterior_4)
    {
        salida=moduloSalida_4;
        sprintf(mensaje,"%s","CUATRO");
    }
    if (pulsador==100)
    {
        salida=100;
        sprintf(mensaje,"%s","niguno");
    }

    for (int k=0; k<5; k++)
    {
        digitalWrite(salida,HIGH);

        lcdPosition(pantalla,0,1);
        lcdPrintf(pantalla,"Rele %s ON ",mensaje);
        delay(100);

        digitalWrite(salida,LOW);


        delay(100);
        if (EscanearPulsadores()!=pulsador)k=11;

    }

}
void SaludoFinal()
{
    // Saludo final  LCD
    lcdClear(pantalla);
    lcdPosition(pantalla,0,0);
    lcdPrintf(pantalla, "mprsoft-FREDINSA");
    lcdPosition(pantalla,0,1);
    lcdPrintf(pantalla,"Demo Finalizada ");
    delay(5000);
    lcdClear(pantalla);
    lcdPosition(pantalla,0,0);
    lcdPrintf(pantalla, " http://mrpsof. ");
    lcdPosition(pantalla,0,1);
    lcdPrintf(pantalla,"blogspot.com.es ");

}// Fin de EntradasSaliodasdDigitalesMasLcdRaspberryPi.cpp





   2.4 Listado de 

EntradasSalidasDigitalesMasLcdArduino.ino

 

 

 

/** --- EntradasSalidasDigitalesMasLcdArduino.ino  -----

Programa de demostracion de programaci'on de la Arduino Micro

El siguiente programa muestra como activar intermitentemente una serie de rel'es,
dependiendo de la entrada que que este activada en ese momento.
Adem'as en en la pantalla LCD impri,mir'a la salida activa.
El programa finaliza cuando se pulsan dos entradas preseleccionas a la vez o
cuando se realizan 100 escaneos de entradas.

Manuel Protasio

email:
manuelprotasio@gmail.com
http://mprsof.blogspot.com.es/

*/
#include <Wire.h>
#include <LiquidCrystal.h>

// PANTALLA LCD
#define  LCD_FILAS 2      //cantidad de filas
#define  LCD_COLUMNAS 16  //cantidad de columnas
#define  LCD_DB4 9       //pin 9 --> lcd 11 
#define  LCD_DB5 8       //pin 8 --> lcd 12 
#define  LCD_DB6 7       //pin 7 --> lcd 13 
#define  LCD_DB7 6       //pin 6 --> lcd 14 
#define  LCD_RS 10       //pin 10 --> lcd 6
#define  LCD_E 5         //pin 5 --> lcd 4

//PINS DE SALIDA

#define moduloSalida_1 11      // pin 11 --> salida 1 en modulo de reles
#define  moduloSalida_2 A1     // pin A1 --> salida 2 en modulo de reles 
#define moduloSalida_3 A0      // pin A0 --> salida 3 en modulo de reles
#define moduloSalida_4 12      // pin 12 --> salida 4 en modulo de reles

// PINS DE ENTRADA


#define  pulsadorExterior_1 A2  // pin A2 -->Pulsador exterior 1
#define  pulsadorExterior_2 A3  // pin A3 -->Pulsador exterior 2
#define  pulsadorExterior_3 A4  // pin A4 -->Pulsador exterior 3
#define  pulsadorExterior_4 A5  // pin A5 -->Pulsador exterior 4


int pulsadorActivo=100;
int contadorDeBucles=100;
LiquidCrystal pantalla(LCD_RS,LCD_E, LCD_DB4,LCD_DB5,LCD_DB6,LCD_DB7);

void setup(){
   // Tipo de pantalla de 16 caracteres por dos lineas
      pantalla.begin(LCD_COLUMNAS,LCD_FILAS);
   // Velocidad de transmision al monitor serie.  
      Serial.begin(9600);
      ConfigurarPinsDeSalida();
      ConfigurarPinsDeEntrada();
      SaludoInicial();


}
void loop() {

        if  (EscanearPulsadores()==(pulsadorExterior_1+pulsadorExterior_2))
        {
            Serial.print ("\n-- EntradasSalidasDigitalesMasLcdArduino.ino -- acab'o por usuario\n");
            SaludoFinal();
        }
        ActivaSalida(EscanearPulsadores());
       
        pantalla.setCursor(0,0);
        pantalla.write("                ");
        pantalla.setCursor(0,0);
        pantalla.write("Bucle numero ");
        pantalla.print(contadorDeBucles);
       
        Serial.print ("\n-- Numero de bucle ");
        Serial.print (contadorDeBucles,DEC);
        Serial.println();


        contadorDeBucles--;
        if (contadorDeBucles<=0)
        {
             Serial.print ("\n-- EntradasSalidasDigitalesMasLcdArduino.ino -- acab'o correctamente\n");
             SaludoFinal();
        }
}
void SaludoInicial()
{
    // Saludo en LCD
     pantalla.setCursor(0,0);
     pantalla.write("mprsoft-FREDINSA");
     pantalla.setCursor(0,1);
     pantalla.write("  Bienvenido   ");
        delay(5000);

    // Saludo en monitor Serial
    Serial.print ("Bienvenido al mundo de Arduino\n ");
    Serial.print ("\nEntradasSalidasDigitalesMasLcdArduino.ino// iniciar'a en 5 segundos\n\n ");
    Serial.print ("\nEl programa finaliza transcurridos 100 lecturas, o \n");
    Serial.print ("\nactivando simultaneamente las entradas uno y dos");
    Serial.print ("\n");
   
        delay(5000);
       
    Serial.print ("\nActive cualquier entrada digital para activar el rel'e asociado");
    Serial.print ("\n");
}


void ConfigurarPinsDeSalida()
{
    pinMode(moduloSalida_1,OUTPUT);
    pinMode(moduloSalida_2,OUTPUT);
    pinMode(moduloSalida_3,OUTPUT);
    pinMode(moduloSalida_4,OUTPUT);


}
void ConfigurarPinsDeEntrada()
{
    pinMode (pulsadorExterior_1,INPUT);
    pinMode (pulsadorExterior_2,INPUT);
    pinMode (pulsadorExterior_3,INPUT);
    pinMode (pulsadorExterior_4,INPUT);
}
int EscanearPulsadores()
{

    if ( digitalRead(pulsadorExterior_1)==1 && digitalRead(pulsadorExterior_2)==1)
    {
        pulsadorActivo=pulsadorExterior_1+pulsadorExterior_2;
        return pulsadorActivo;
    }
    if ( digitalRead(pulsadorExterior_1))pulsadorActivo=pulsadorExterior_1;
    if ( digitalRead(pulsadorExterior_2))pulsadorActivo=pulsadorExterior_2;
    if ( digitalRead(pulsadorExterior_3))pulsadorActivo=pulsadorExterior_3;
    if ( digitalRead(pulsadorExterior_4))pulsadorActivo=pulsadorExterior_4;

    return pulsadorActivo;

}
void ActivaSalida(int pulsador)
{

    int salida=1000;
    char mensaje[8]="";


    if (pulsador==pulsadorExterior_1)
    {
        salida=moduloSalida_1;
        sprintf(mensaje,"%s"," UNO  ");

    }
    if (pulsador==pulsadorExterior_2)
    {
        salida=moduloSalida_2;
        sprintf(mensaje,"%s"," DOS  ");
    }
    if (pulsador==pulsadorExterior_3)
    {
        salida=moduloSalida_3;
        sprintf(mensaje,"%s"," TRES ");
    }
    if (pulsador==pulsadorExterior_4)
    {
        salida=moduloSalida_4;
        sprintf(mensaje,"%s","CUATRO");
    }
    if (pulsador==100)
    {
        salida=100;
        sprintf(mensaje,"%s","niguno");
    }

    for (int k=0; k<5; k++)
    {
        digitalWrite(salida,HIGH);

        pantalla.setCursor(0,1);
        pantalla.write("Rele ");
        pantalla.write(mensaje);
        pantalla.write(" ON");
       
        delay(100);
       
        digitalWrite(salida,LOW);
       
        delay(100);
       
        if (EscanearPulsadores()!=pulsador)k=11;

    }
}
void SaludoFinal()
{
     pantalla.setCursor(0,0);
     pantalla.write( "mprsoft-FREDINSA");
     pantalla.setCursor(0,1);
     pantalla.write("Demo Finalizada ");
     delay(5000);
     pantalla.setCursor(0,0);
     pantalla.write(" http://mprsof. ");
     pantalla.setCursor(0,1);
     pantalla.write("blogspot.com.es ");
     delay(5000);
     SaludoFinal();
}// Fin de  EntradasSalidasDigitalesMasLcdArduino.ino




3 Descargas.

    3.1 Esquemas de conexionado.

 

Descarga de esquemas de conexionado.
 

   3.2 Proyecto 

EntradasSalidasDigitalesMasLcdRaspberryPi.cbp

 

Descargar EntradasSalidasDigitalesMasLcdRaspberryPi.cbp.  


   3.2 Proyecto 

EntradasSalidasDigitalesMasLcdArduino.ino

 

Descargar EntradasSalidasDigitalesMasLcdArduino.ino.

 

4 Video demostración

    4.1 Demo EntradasSalidasDigitales.cpp

    Link a la instalación en marcha 






1 comentario: