Advertisement
Villalba2006

POST_13

Nov 24th, 2016
18,563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.21 KB | None | 0 0
  1. /*  TITULO: Pulsador antirrebote con contador de pulsaciones.
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2015) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.    
  13.     Con este programa se soluciona el problema de los rebotes del pulsador. Además podremos observar
  14.     a ravés del monitor serie, el número de veces que hemos activado el pulsador.
  15.    
  16.    
  17.     ESQUEMA DE CONEXION
  18.    
  19.                                       +-----+
  20.          +----[PWR]-------------------| USB |--+
  21.          |                            +-----+  |
  22.          |         GND/RST2  [ ][ ]            |
  23.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |   SCL del módulo I2C
  24.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |   SDA del módulo I2C
  25.          |                             AREF[ ] |
  26.          |                              GND[ ] |
  27.          | [ ]N/C                    SCK/13[ ] |  
  28.          | [ ]IOREF                 MISO/12[ ] |  
  29.          | [ ]RST                   MOSI/11[ ]~|  
  30.          | [ ]3V3    +---+               10[ ]~|  
  31.          | [ ]5v    -| A |-               9[ ]~|  
  32.          | [ ]GND   -| R |-               8[ ] |  
  33.          | [ ]GND   -| D |-                    |
  34.          | [ ]Vin   -| U |-               7[ ] |  
  35.          |          -| I |-               6[ ]~|  
  36.          | [ ]A0    -| N |-               5[ ]~|  
  37.          | [ ]A1    -| O |-               4[ ] |   PA
  38.          | [ ]A2     +---+           INT1/3[ ]~|    
  39.          | [ ]A3                     INT0/2[ ] |  
  40.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  41.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  42.          |            [ ] [ ] [ ]              |
  43.          |  UNO_R3    GND MOSI 5V  ____________/
  44.           \_______________________/
  45.  
  46.   NOTAS:
  47.    
  48.    - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
  49.    - Conexión PULL-DOWN del pulsador.
  50.        - PB conectado a VCC.
  51.        - PA conectado a GND a través de una R=10K omhs.
  52.    - La alimentación y la masa del módulo LCM 1602 I2C V1 van directamente conectadas a VCC (+5V) y GND
  53.      respectivamente.        
  54. */
  55.  
  56.   // Importar librerías
  57.   #include <Wire.h> // Librería comunicación I2C
  58.   #include <LiquidCrystal_I2C.h> // Librería LCD I2C
  59.    
  60.   // Declaración del objeto
  61.   // Poner la dirección del LCD a 0x27 para display 16x2, 20x2 y 20x4
  62.   // Terminales de conexión del LCD
  63.   //                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
  64.   LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  65.      
  66.   const int pulsador = 4; // Entrada digital para el pulsador
  67.   const int tiempoAntirrebote = 10; // tiempo en ms para evitar el rebote
  68.  
  69.   int cuenta = 0;
  70.   int estadoBoton;
  71.   int estadoBotonAnterior;
  72.  
  73.   // Función que evita el rebote del pulsador
  74.   boolean antirrebote(int pin)
  75.   {
  76.     int contador = 0;
  77.     boolean estado;
  78.     boolean estadoAnterior;
  79.    
  80.     do
  81.     {
  82.       estado = digitalRead(pin);
  83.       if(estado != estadoAnterior)
  84.       {
  85.         contador = 0;
  86.         estadoAnterior = estado;
  87.       }
  88.       else
  89.       {
  90.         contador = contador+ 1;
  91.       }
  92.       delay(1);
  93.     } while(contador < tiempoAntirrebote);
  94.    
  95.     return estado;
  96.   }
  97.    
  98.        
  99.   void setup()
  100.   {
  101.     Serial.begin(9600);  // Configura la velocidad de la comunicación serie
  102.     lcd.begin(16,2);   // Inicializa el LCD para 16x2  
  103.     lcd.backlight(); // LED de fondo encendido (backlight)
  104.  
  105.     pinMode(pulsador, INPUT); // PIN digital del pulsador como entrada
  106.    
  107.     // Presentamos datos por el LCD
  108.     lcd.clear();
  109.     lcd.setCursor(0,0);
  110.     lcd.print("Pulsaciones: ");
  111.   }
  112.  
  113.   void loop()
  114.   {  
  115.     estadoBoton = digitalRead(pulsador);
  116.    
  117.     if(estadoBoton != estadoBotonAnterior)
  118.     {
  119.       if(antirrebote(pulsador))
  120.       {
  121.         cuenta++;
  122.         lcd.setCursor(13,0);
  123.         lcd.print(cuenta);  // Se muestra a través del LCD el nº de veces que presionamos el pulsador
  124.       }
  125.     }  
  126.     estadoBotonAnterior = estadoBoton;
  127.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement