Proyecto ABInBev para la tarjeta Guaria 1/2.

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers inputDebounce.cpp Source File

inputDebounce.cpp

Go to the documentation of this file.
00001 /**
00002  * @file inputDebounce.cpp
00003  * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
00004  * @brief 
00005  * @version 0.1
00006  * @date 2020-10-01
00007  * 
00008  * @copyright Copyright (c) 2020
00009  * 
00010  */
00011 
00012 #include "mbed.h"
00013 
00014 
00015 /**
00016  * @brief 
00017  * 
00018  */
00019 const int SAMPLES_INPUT = 4;  
00020 const int SAMPLES_RAIN  = 10;    
00021 
00022 
00023 
00024 /**
00025  * @brief 
00026  * 
00027  * @param Ign 
00028  * @param arrayIgn 
00029  * @param actIgn 
00030  * @param preIgn 
00031  * @param cont 
00032  * @return int 
00033  */
00034 int exeIgnition (DigitalIn *Ign, bool arrayIgn[], bool *actIgn, bool *preIgn, int *cont) {
00035     bool are_equal = false;
00036     int answer = 0;
00037     int i;
00038 
00039     arrayIgn[*cont] = Ign -> read();   
00040     *cont = *cont + 1; 
00041 
00042     if (*cont == SAMPLES_INPUT) {
00043         *cont = 0;                
00044         
00045         //are_equal = (((arrayIgn[0] == arrayIgn[1]) == arrayIgn[2]) == arrayIgn[3]);
00046         for (i = 0; i < SAMPLES_INPUT; i++) {
00047             if (arrayIgn[i] != arrayIgn[0]) {
00048                 are_equal = false;
00049                 break;
00050             } else {
00051                 are_equal = true;
00052             }
00053         }
00054         if(are_equal) {
00055             *actIgn = arrayIgn[0];
00056             if (*actIgn != *preIgn) {
00057                 *preIgn = *actIgn;
00058                 if (*actIgn) {
00059                     answer = 1;
00060                 } else {
00061                     answer = -1;              
00062                 }
00063             } else {
00064                 answer = 0;
00065             }
00066         }
00067     }
00068     return(answer);
00069 }
00070 
00071 
00072 
00073 /**
00074  * @brief 
00075  * 
00076  * @param my_Input 
00077  * @param my_arrayInput 
00078  * @param my_Input_read 
00079  * @param my_Input_previous 
00080  * @param cont 
00081  * @return int 
00082  */
00083 int exeDigInput (DigitalIn *my_Input, bool my_arrayInput[], bool *my_Input_read, bool *my_Input_previous, int *cont) {
00084     bool are_equal = false;
00085     int answer = 0;
00086     int i;
00087 
00088     my_arrayInput[*cont] = my_Input -> read();
00089     *cont = *cont + 1; 
00090  
00091     if (*cont == SAMPLES_INPUT) {
00092         *cont = 0;                      
00093         //are_equal = (((my_arrayInput[0] == my_arrayInput[1]) == my_arrayInput[2]) == my_arrayInput[3]);
00094         for (i = 0; i < SAMPLES_INPUT; i++) {
00095             if (my_arrayInput[i] != my_arrayInput[0]) {
00096                 are_equal = false;
00097                 break;
00098             } else {
00099                 are_equal = true;
00100             }
00101         }
00102         
00103 
00104         if (are_equal) {
00105             *my_Input_read = my_arrayInput[0];
00106             if (*my_Input_read != *my_Input_previous) {
00107                 *my_Input_previous = *my_Input_read;
00108                 if (*my_Input_read) {
00109                     answer = 1;
00110                 } else {
00111                     answer = -1;
00112                 }
00113             } 
00114         } else {
00115             answer = 0;
00116         }
00117     }
00118     return(answer);
00119  }
00120 
00121 
00122 /**
00123  * @brief 
00124  * 
00125  * @param my_Input 
00126  * @param my_arrayInput 
00127  * @param my_Input_read 
00128  * @param my_Input_previous 
00129  * @param cont 
00130  * @return int 
00131  */
00132 int exeDigRain (DigitalIn *my_Input, bool my_arrayInput[], bool *my_Input_read, bool *my_Input_previous, int *cont) {
00133     bool are_equal = false;
00134     int answer = 0;
00135     int i;
00136 
00137     my_arrayInput[*cont] = my_Input -> read();
00138     *cont = *cont + 1; 
00139  
00140     if (*cont == SAMPLES_RAIN) {
00141         *cont = 0;                      
00142         //are_equal = (((my_arrayInput[0] == my_arrayInput[1]) == my_arrayInput[2]) == my_arrayInput[3]);
00143         //are_equal = (((are_equal == my_arrayInput[4]) == my_arrayInput[5]) == my_arrayInput[6]);
00144         //are_equal = (((are_equal == my_arrayInput[7]) == my_arrayInput[8]) == my_arrayInput[9]);
00145         for (i = 0; i < SAMPLES_RAIN; i++) {
00146             if (my_arrayInput[i] != my_arrayInput[0]) {
00147                 are_equal = false;
00148                 break;
00149             } else {
00150                 are_equal = true;
00151             }
00152         }
00153 
00154 
00155         if (are_equal) {
00156             *my_Input_read = my_arrayInput[0];
00157             if (*my_Input_read != *my_Input_previous) {
00158                 *my_Input_previous = *my_Input_read;
00159                 if (*my_Input_read) {
00160                     answer = 1;
00161                 } else {
00162                     answer = -1;
00163                 }
00164             } 
00165         } else {
00166             answer = 0;
00167         }
00168     }
00169     return(answer);
00170  }
00171