facil de usar y enterder
Dependencies: mbed Pulse TextLCD
main.cpp@0:da1e9312d7d2, 2020-05-24 (annotated)
- Committer:
- joshasigo
- Date:
- Sun May 24 20:02:21 2020 +0000
- Revision:
- 0:da1e9312d7d2
carro a control remoto por infra rojo, hay que ser muy impedido para no entenderlo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
joshasigo | 0:da1e9312d7d2 | 1 | #include "mbed.h" |
joshasigo | 0:da1e9312d7d2 | 2 | #include <Pulse.h> //Library developed by Gustavo Ramirez; |
joshasigo | 0:da1e9312d7d2 | 3 | #include "TextLCD.h" |
joshasigo | 0:da1e9312d7d2 | 4 | |
joshasigo | 0:da1e9312d7d2 | 5 | TextLCD lcd(PTB18,PTB19,PTC0,PTC4,PTC6,PTC7, TextLCD::LCD16x2); |
joshasigo | 0:da1e9312d7d2 | 6 | /// PIN4,PIN6,PIN11,PIN12,PIN13,PIN14 |
joshasigo | 0:da1e9312d7d2 | 7 | /// RS E D4 D5 D6 D7 |
joshasigo | 0:da1e9312d7d2 | 8 | /// PIN1 A TIERRA, PIN2 A VCC, PIN3 CON UNA R=1KOHMIO,PIN5 A TIERRA,PIN15 CON UNA R=1KOHMIO, PIN16 A VC |
joshasigo | 0:da1e9312d7d2 | 9 | /// PIN 7 A PIN 10 NO SE LE CONECTA NADA. |
joshasigo | 0:da1e9312d7d2 | 10 | PulseInOut irda(PTA1);// en este puerto se pone el sensor infrarrojo |
joshasigo | 0:da1e9312d7d2 | 11 | |
joshasigo | 0:da1e9312d7d2 | 12 | int header =0; //Variable to store the header length |
joshasigo | 0:da1e9312d7d2 | 13 | const int head_H = 9000*1.2; //+20% header length |
joshasigo | 0:da1e9312d7d2 | 14 | const int head_L = 4500*0.8;//-20% header length |
joshasigo | 0:da1e9312d7d2 | 15 | int i=0; |
joshasigo | 0:da1e9312d7d2 | 16 | int n=0; |
joshasigo | 0:da1e9312d7d2 | 17 | |
joshasigo | 0:da1e9312d7d2 | 18 | float PeriodoPWM1=0.001; |
joshasigo | 0:da1e9312d7d2 | 19 | float PeriodoLed=1.0; |
joshasigo | 0:da1e9312d7d2 | 20 | float DC1=0.5; |
joshasigo | 0:da1e9312d7d2 | 21 | |
joshasigo | 0:da1e9312d7d2 | 22 | const int pulso=562.5;//NEC uses 562.5µs pulse bursts; |
joshasigo | 0:da1e9312d7d2 | 23 | const int num_bits = 32;//8 bits address - 8 bits address logical inverse - 8 bits data - 8 bits data logical inverse; |
joshasigo | 0:da1e9312d7d2 | 24 | int num[num_bits];//Array to store logical 1 length; |
joshasigo | 0:da1e9312d7d2 | 25 | int data_bin[num_bits]; //Array to store binary code transmited; |
joshasigo | 0:da1e9312d7d2 | 26 | int address1; //variable to store the device address; |
joshasigo | 0:da1e9312d7d2 | 27 | int address0; //variable to store the device address (inverse); |
joshasigo | 0:da1e9312d7d2 | 28 | int data1; //variable to store the transmited data; |
joshasigo | 0:da1e9312d7d2 | 29 | int data0; //variable to store the transmited data (inverse); |
joshasigo | 0:da1e9312d7d2 | 30 | //motores |
joshasigo | 0:da1e9312d7d2 | 31 | DigitalOut ade1(PTC1);// |
joshasigo | 0:da1e9312d7d2 | 32 | DigitalOut atra1(PTC2);// |
joshasigo | 0:da1e9312d7d2 | 33 | DigitalOut ade2(PTB3);// |
joshasigo | 0:da1e9312d7d2 | 34 | DigitalOut atra2(PTB2);// |
joshasigo | 0:da1e9312d7d2 | 35 | |
joshasigo | 0:da1e9312d7d2 | 36 | /****Las teclas del control****/ |
joshasigo | 0:da1e9312d7d2 | 37 | const int adelante =96; |
joshasigo | 0:da1e9312d7d2 | 38 | const int atras=97; |
joshasigo | 0:da1e9312d7d2 | 39 | const int izquierda=101; |
joshasigo | 0:da1e9312d7d2 | 40 | const int derecha =98; |
joshasigo | 0:da1e9312d7d2 | 41 | const int pausa=104; |
joshasigo | 0:da1e9312d7d2 | 42 | |
joshasigo | 0:da1e9312d7d2 | 43 | void imprimir_funcion(int dato) |
joshasigo | 0:da1e9312d7d2 | 44 | { |
joshasigo | 0:da1e9312d7d2 | 45 | switch(dato) { |
joshasigo | 0:da1e9312d7d2 | 46 | case adelante: |
joshasigo | 0:da1e9312d7d2 | 47 | lcd.cls(); |
joshasigo | 0:da1e9312d7d2 | 48 | lcd.locate(0,0);//0X,0Y |
joshasigo | 0:da1e9312d7d2 | 49 | lcd.printf("COMANDO!"); |
joshasigo | 0:da1e9312d7d2 | 50 | lcd.locate(0,1); |
joshasigo | 0:da1e9312d7d2 | 51 | lcd.printf("adelante"); |
joshasigo | 0:da1e9312d7d2 | 52 | ade1=1; |
joshasigo | 0:da1e9312d7d2 | 53 | atra1=0; |
joshasigo | 0:da1e9312d7d2 | 54 | ade2=1; |
joshasigo | 0:da1e9312d7d2 | 55 | atra2=0; |
joshasigo | 0:da1e9312d7d2 | 56 | break; |
joshasigo | 0:da1e9312d7d2 | 57 | case atras: |
joshasigo | 0:da1e9312d7d2 | 58 | lcd.cls(); |
joshasigo | 0:da1e9312d7d2 | 59 | lcd.locate(0,0);//0X,0Y |
joshasigo | 0:da1e9312d7d2 | 60 | lcd.printf("COMANDO!"); |
joshasigo | 0:da1e9312d7d2 | 61 | lcd.locate(0,1); |
joshasigo | 0:da1e9312d7d2 | 62 | lcd.printf("atras"); |
joshasigo | 0:da1e9312d7d2 | 63 | ade1=0; |
joshasigo | 0:da1e9312d7d2 | 64 | atra1=1; |
joshasigo | 0:da1e9312d7d2 | 65 | ade2=0; |
joshasigo | 0:da1e9312d7d2 | 66 | atra2=1; |
joshasigo | 0:da1e9312d7d2 | 67 | break; |
joshasigo | 0:da1e9312d7d2 | 68 | case izquierda: |
joshasigo | 0:da1e9312d7d2 | 69 | lcd.cls(); |
joshasigo | 0:da1e9312d7d2 | 70 | lcd.locate(0,0);//0X,0Y |
joshasigo | 0:da1e9312d7d2 | 71 | lcd.printf("COMANDO!"); |
joshasigo | 0:da1e9312d7d2 | 72 | lcd.locate(0,1); |
joshasigo | 0:da1e9312d7d2 | 73 | lcd.printf("izquierda"); |
joshasigo | 0:da1e9312d7d2 | 74 | ade1=1; |
joshasigo | 0:da1e9312d7d2 | 75 | atra1=0; |
joshasigo | 0:da1e9312d7d2 | 76 | ade2=0; |
joshasigo | 0:da1e9312d7d2 | 77 | atra2=1; |
joshasigo | 0:da1e9312d7d2 | 78 | break; |
joshasigo | 0:da1e9312d7d2 | 79 | case derecha: |
joshasigo | 0:da1e9312d7d2 | 80 | lcd.cls(); |
joshasigo | 0:da1e9312d7d2 | 81 | lcd.locate(0,0);//0X,0Y |
joshasigo | 0:da1e9312d7d2 | 82 | lcd.printf("COMANDO!"); |
joshasigo | 0:da1e9312d7d2 | 83 | lcd.locate(0,1); |
joshasigo | 0:da1e9312d7d2 | 84 | lcd.printf("derecha"); |
joshasigo | 0:da1e9312d7d2 | 85 | ade1=0; |
joshasigo | 0:da1e9312d7d2 | 86 | atra1=1; |
joshasigo | 0:da1e9312d7d2 | 87 | ade2=1; |
joshasigo | 0:da1e9312d7d2 | 88 | atra2=0; |
joshasigo | 0:da1e9312d7d2 | 89 | break; |
joshasigo | 0:da1e9312d7d2 | 90 | case pausa: |
joshasigo | 0:da1e9312d7d2 | 91 | lcd.cls(); |
joshasigo | 0:da1e9312d7d2 | 92 | lcd.locate(0,0);//0X,0Y |
joshasigo | 0:da1e9312d7d2 | 93 | lcd.printf("COMANDO!"); |
joshasigo | 0:da1e9312d7d2 | 94 | lcd.locate(0,1); |
joshasigo | 0:da1e9312d7d2 | 95 | lcd.printf("pausa"); |
joshasigo | 0:da1e9312d7d2 | 96 | ade1=0; |
joshasigo | 0:da1e9312d7d2 | 97 | atra1=0; |
joshasigo | 0:da1e9312d7d2 | 98 | ade2=0; |
joshasigo | 0:da1e9312d7d2 | 99 | atra2=0; |
joshasigo | 0:da1e9312d7d2 | 100 | break; |
joshasigo | 0:da1e9312d7d2 | 101 | } |
joshasigo | 0:da1e9312d7d2 | 102 | |
joshasigo | 0:da1e9312d7d2 | 103 | } |
joshasigo | 0:da1e9312d7d2 | 104 | |
joshasigo | 0:da1e9312d7d2 | 105 | int main() |
joshasigo | 0:da1e9312d7d2 | 106 | { |
joshasigo | 0:da1e9312d7d2 | 107 | lcd.locate(0,0);//0X,0Y |
joshasigo | 0:da1e9312d7d2 | 108 | lcd.printf("Presiona tecla"); |
joshasigo | 0:da1e9312d7d2 | 109 | lcd.locate(0,1);//0X,0Y |
joshasigo | 0:da1e9312d7d2 | 110 | lcd.printf("Esp_comando"); |
joshasigo | 0:da1e9312d7d2 | 111 | |
joshasigo | 0:da1e9312d7d2 | 112 | while(1) { |
joshasigo | 0:da1e9312d7d2 | 113 | /********************Header detection************************/ |
joshasigo | 0:da1e9312d7d2 | 114 | ini1: |
joshasigo | 0:da1e9312d7d2 | 115 | header=0; |
joshasigo | 0:da1e9312d7d2 | 116 | header = irda.read_low_us(); |
joshasigo | 0:da1e9312d7d2 | 117 | if (header > head_L && header < head_H){ |
joshasigo | 0:da1e9312d7d2 | 118 | goto seguir;//verificar que este en la tolerancia +-20% |
joshasigo | 0:da1e9312d7d2 | 119 | }else{ |
joshasigo | 0:da1e9312d7d2 | 120 | goto ini1; |
joshasigo | 0:da1e9312d7d2 | 121 | } |
joshasigo | 0:da1e9312d7d2 | 122 | seguir: |
joshasigo | 0:da1e9312d7d2 | 123 | //leo los datos y se meten a un arreglo |
joshasigo | 0:da1e9312d7d2 | 124 | wait_us(4500/2); |
joshasigo | 0:da1e9312d7d2 | 125 | for(i=0; i<(num_bits); ++i) { |
joshasigo | 0:da1e9312d7d2 | 126 | num[i]=irda.read_high_us(); //Tiempos para estado siempre alto se almacenan en microsegundos |
joshasigo | 0:da1e9312d7d2 | 127 | wait_us(400); //esperar una parte del estado bajo (562.5µs) |
joshasigo | 0:da1e9312d7d2 | 128 | } |
joshasigo | 0:da1e9312d7d2 | 129 | /*Imprimir en pantalla lo que obtengo*/ |
joshasigo | 0:da1e9312d7d2 | 130 | for(i=0; i<(num_bits); ++i) { |
joshasigo | 0:da1e9312d7d2 | 131 | if(num[i]>pulso*1.2) { |
joshasigo | 0:da1e9312d7d2 | 132 | data_bin[i]=1; //si la longitud es mayor que 1.2ms, representa un 1 |
joshasigo | 0:da1e9312d7d2 | 133 | } else { |
joshasigo | 0:da1e9312d7d2 | 134 | data_bin[i]=0; //si la longitud es más corta, representa un 0 |
joshasigo | 0:da1e9312d7d2 | 135 | |
joshasigo | 0:da1e9312d7d2 | 136 | } |
joshasigo | 0:da1e9312d7d2 | 137 | |
joshasigo | 0:da1e9312d7d2 | 138 | } |
joshasigo | 0:da1e9312d7d2 | 139 | address1=0; |
joshasigo | 0:da1e9312d7d2 | 140 | for(i=0; i<8; i++) { |
joshasigo | 0:da1e9312d7d2 | 141 | address1=address1 + data_bin[i]*pow(2.0,i*1.0); |
joshasigo | 0:da1e9312d7d2 | 142 | } |
joshasigo | 0:da1e9312d7d2 | 143 | address0=0; |
joshasigo | 0:da1e9312d7d2 | 144 | for(i=8; i<16; i++) { |
joshasigo | 0:da1e9312d7d2 | 145 | address0=address0 + data_bin[i]*pow(2.0,(i-8)*1.0); |
joshasigo | 0:da1e9312d7d2 | 146 | } |
joshasigo | 0:da1e9312d7d2 | 147 | |
joshasigo | 0:da1e9312d7d2 | 148 | data1=0; |
joshasigo | 0:da1e9312d7d2 | 149 | for(i=16; i<24; i++) { |
joshasigo | 0:da1e9312d7d2 | 150 | data1=data1 + data_bin[i]*pow(2.0,(i-16.0)*1.0); |
joshasigo | 0:da1e9312d7d2 | 151 | } |
joshasigo | 0:da1e9312d7d2 | 152 | |
joshasigo | 0:da1e9312d7d2 | 153 | data0=0; |
joshasigo | 0:da1e9312d7d2 | 154 | for(i=24; i<32; i++) { |
joshasigo | 0:da1e9312d7d2 | 155 | data0=data0 + data_bin[i]*pow(2.0,(i-24)*1.0); |
joshasigo | 0:da1e9312d7d2 | 156 | } |
joshasigo | 0:da1e9312d7d2 | 157 | imprimir_funcion(data1); |
joshasigo | 0:da1e9312d7d2 | 158 | |
joshasigo | 0:da1e9312d7d2 | 159 | |
joshasigo | 0:da1e9312d7d2 | 160 | } |
joshasigo | 0:da1e9312d7d2 | 161 | } |