DTMF decoder for handy with arduino, control over several kilometers
In this tutorial we will see how to make a circuit to connect to our handy, in this case a Baofeng UV-5R
Components and supplies
1
Arduino Mini Pro - ATmega168 5V
Apps and platforms
1
rogerbit.
Project description
Code
Source code
c
Source code
1#include <Arduino.h> 2#include <U8g2lib.h> 3#ifdef U8X8_HAVE_HW_SPI 4#include <SPI.h> 5#endif 6#ifdef U8X8_HAVE_HW_I2C 7#include <Wire.h> 8#endif 9U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); //Display SSD1306 de 128x32 10 11int codigo; 12const int Pin12 = 12; 13const int Pin11 = 11; 14const int Pin10 = 10; 15const int Pin9 = 9; 16const int Pin8 = 8; 17const int Pin7 = 7; 18const int Pin6 = 6; 19const int Pin5 = 5; 20const int Pin4 = 4; 21const int Pin3 = 3; 22const int Pin2 = 2; 23 24int EstadoPin2 = 0; 25int EstadoPin3 = 0; 26int EstadoPin4 = 0; 27int EstadoPin5 = 0; 28int EstadoPin6 = 0; 29 30void setup() { 31 Serial.begin(9600);//Velocidad del puerto serial 32 u8g2.begin();//Inicializamos el display 33 // Ponemos los pines 2 al 6 como entradas para el circuto integrado MT8870DE 34 pinMode(Pin2, INPUT); 35 pinMode(Pin3, INPUT); 36 pinMode(Pin4, INPUT); 37 pinMode(Pin5, INPUT); 38 pinMode(Pin6, INPUT); 39 //Salidas control de luces, motores, relay, triac, etc 40 pinMode(Pin7, OUTPUT); 41 pinMode(Pin8, OUTPUT); 42 pinMode(Pin9, OUTPUT); 43 pinMode(Pin10, OUTPUT); 44 pinMode(Pin11, OUTPUT); 45 pinMode(Pin12, OUTPUT); 46 //Inicializamos el display con la leyenda "Preparado" 47 codigo = 17; 48 displayOled(); 49} 50 51void loop() { 52 53 // Leemos el estado de los pines 2 al 6 54 EstadoPin2 = digitalRead(Pin2); 55 EstadoPin3 = digitalRead(Pin3); 56 EstadoPin4 = digitalRead(Pin4); 57 EstadoPin5 = digitalRead(Pin5); 58 EstadoPin6 = digitalRead(Pin6); 59 delay(110); 60//Boton 1 10001 61 if (EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { 62 63 Serial.print("1"); 64 while(EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH){ 65 EstadoPin2 = digitalRead(Pin2); 66 EstadoPin3 = digitalRead(Pin3); 67 EstadoPin4 = digitalRead(Pin4); 68 EstadoPin5 = digitalRead(Pin5); 69 EstadoPin6 = digitalRead(Pin6); 70 codigo = 1; 71 digitalWrite(Pin7, HIGH); 72 displayOled(); 73 } 74 } 75 //Boton 2 01001 76 if (EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { 77 78 Serial.print("2"); 79 while(EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ 80 EstadoPin2 = digitalRead(Pin2); 81 EstadoPin3 = digitalRead(Pin3); 82 EstadoPin4 = digitalRead(Pin4); 83 EstadoPin5 = digitalRead(Pin5); 84 EstadoPin6 = digitalRead(Pin6); 85 digitalWrite(Pin7, LOW); 86 codigo = 2; 87 displayOled(); 88 } 89 } 90 //Boton 3 11001 91 if (EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { 92 93 Serial.print("3"); 94 while(EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ 95 EstadoPin2 = digitalRead(Pin2); 96 EstadoPin3 = digitalRead(Pin3); 97 EstadoPin4 = digitalRead(Pin4); 98 EstadoPin5 = digitalRead(Pin5); 99 EstadoPin6 = digitalRead(Pin6); 100 digitalWrite(Pin8, HIGH); 101 codigo = 3; 102 displayOled(); 103 } 104 } 105 //Boton 4 00101 106 if (EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { 107 108 Serial.print("4"); 109 while(EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ 110 EstadoPin2 = digitalRead(Pin2); 111 EstadoPin3 = digitalRead(Pin3); 112 EstadoPin4 = digitalRead(Pin4); 113 EstadoPin5 = digitalRead(Pin5); 114 EstadoPin6 = digitalRead(Pin6); 115 digitalWrite(Pin8, LOW); 116 codigo = 4; 117 displayOled(); 118 } 119 } 120 //Boton 5 10101 121 if (EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { 122 123 Serial.print("5"); 124 while(EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ 125 EstadoPin2 = digitalRead(Pin2); 126 EstadoPin3 = digitalRead(Pin3); 127 EstadoPin4 = digitalRead(Pin4); 128 EstadoPin5 = digitalRead(Pin5); 129 EstadoPin6 = digitalRead(Pin6); 130 digitalWrite(Pin9, HIGH); 131 codigo = 5; 132 displayOled(); 133 } 134 } 135 //Boton 6 01101 136 if (EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { 137 138 Serial.print("6"); 139 while(EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ 140 EstadoPin2 = digitalRead(Pin2); 141 EstadoPin3 = digitalRead(Pin3); 142 EstadoPin4 = digitalRead(Pin4); 143 EstadoPin5 = digitalRead(Pin5); 144 EstadoPin6 = digitalRead(Pin6); 145 digitalWrite(Pin9, LOW); 146 codigo = 6; 147 displayOled(); 148 } 149 } 150 //Boton 7 11101 151 if (EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { 152 153 Serial.print("7"); 154 while(EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ 155 EstadoPin2 = digitalRead(Pin2); 156 EstadoPin3 = digitalRead(Pin3); 157 EstadoPin4 = digitalRead(Pin4); 158 EstadoPin5 = digitalRead(Pin5); 159 EstadoPin6 = digitalRead(Pin6); 160 digitalWrite(Pin10, HIGH); 161 codigo = 7; 162 displayOled(); 163 } 164 } 165 //Boton 8 00011 166 if (EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { 167 168 Serial.print("8"); 169 while(EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ 170 EstadoPin2 = digitalRead(Pin2); 171 EstadoPin3 = digitalRead(Pin3); 172 EstadoPin4 = digitalRead(Pin4); 173 EstadoPin5 = digitalRead(Pin5); 174 EstadoPin6 = digitalRead(Pin6); 175 digitalWrite(Pin10, LOW); 176 codigo = 8; 177 displayOled(); 178 } 179 } 180 //Boton 9 10011 181 if (EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { 182 183 Serial.print("9"); 184 while(EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ 185 EstadoPin2 = digitalRead(Pin2); 186 EstadoPin3 = digitalRead(Pin3); 187 EstadoPin4 = digitalRead(Pin4); 188 EstadoPin5 = digitalRead(Pin5); 189 EstadoPin6 = digitalRead(Pin6); 190 digitalWrite(Pin11, HIGH); 191 codigo = 9; 192 displayOled(); 193 } 194 } 195 //Boton 0 01011 196 if (EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { 197 198 Serial.print("0"); 199 while(EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ 200 EstadoPin2 = digitalRead(Pin2); 201 EstadoPin3 = digitalRead(Pin3); 202 EstadoPin4 = digitalRead(Pin4); 203 EstadoPin5 = digitalRead(Pin5); 204 EstadoPin6 = digitalRead(Pin6); 205 digitalWrite(Pin11, LOW); 206 codigo = 0; 207 displayOled(); 208 } 209 } 210 //Boton * 11011 211 if (EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { 212 213 Serial.print("*"); 214 while(EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ 215 EstadoPin2 = digitalRead(Pin2); 216 EstadoPin3 = digitalRead(Pin3); 217 EstadoPin4 = digitalRead(Pin4); 218 EstadoPin5 = digitalRead(Pin5); 219 EstadoPin6 = digitalRead(Pin6); 220 digitalWrite(Pin12, HIGH); 221 codigo = 11; 222 displayOled(); 223 } 224 } 225 //Boton # 00111 226 if (EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { 227 228 Serial.print("#"); 229 while(EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ 230 EstadoPin2 = digitalRead(Pin2); 231 EstadoPin3 = digitalRead(Pin3); 232 EstadoPin4 = digitalRead(Pin4); 233 EstadoPin5 = digitalRead(Pin5); 234 EstadoPin6 = digitalRead(Pin6); 235 digitalWrite(Pin12, LOW); 236 codigo = 12; 237 displayOled(); 238 } 239 } 240//Boton MENU 10111 241 if (EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { 242 243 Serial.print("MENU"); 244 while(EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ 245 EstadoPin2 = digitalRead(Pin2); 246 EstadoPin3 = digitalRead(Pin3); 247 EstadoPin4 = digitalRead(Pin4); 248 EstadoPin5 = digitalRead(Pin5); 249 EstadoPin6 = digitalRead(Pin6); 250 codigo = 13; 251 displayOled(); 252 } 253 } 254 //Boton ALTO 01111 255 if (EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { 256 257 Serial.print("UP"); 258 while(EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ 259 EstadoPin2 = digitalRead(Pin2); 260 EstadoPin3 = digitalRead(Pin3); 261 EstadoPin4 = digitalRead(Pin4); 262 EstadoPin5 = digitalRead(Pin5); 263 EstadoPin6 = digitalRead(Pin6); 264 codigo = 14; 265 displayOled(); 266 } 267 } 268 //Boton BAJO 11111 269 if (EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { 270 271 Serial.print("DOWN"); 272 while(EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ 273 EstadoPin2 = digitalRead(Pin2); 274 EstadoPin3 = digitalRead(Pin3); 275 EstadoPin4 = digitalRead(Pin4); 276 EstadoPin5 = digitalRead(Pin5); 277 EstadoPin6 = digitalRead(Pin6); 278 codigo = 15; 279 displayOled(); 280 } 281 } 282 //Boton EXIT 00001 283 if (EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { 284 285 Serial.print("EXIT"); 286 while(EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ 287 EstadoPin2 = digitalRead(Pin2); 288 EstadoPin3 = digitalRead(Pin3); 289 EstadoPin4 = digitalRead(Pin4); 290 EstadoPin5 = digitalRead(Pin5); 291 EstadoPin6 = digitalRead(Pin6); 292 codigo = 16; 293 displayOled(); 294 } 295 } 296} 297 298//Visualización el display 299 void displayOled(){ 300 u8g2.firstPage(); 301 do { 302 u8g2.setFont(u8g2_font_ncenB10_tr); 303 if(codigo == 1){ 304 u8g2.drawStr(0,24,"Codigo: 1"); 305 } 306 if(codigo == 2){ 307 u8g2.drawStr(0,24,"Codigo: 2"); 308 } 309 if(codigo == 3){ 310 u8g2.drawStr(0,24,"Codigo: 3"); 311 } 312 if(codigo == 4){ 313 u8g2.drawStr(0,24,"Codigo: 4"); 314 } 315 if(codigo == 5){ 316 u8g2.drawStr(0,24,"Codigo: 5"); 317 } 318 if(codigo == 6){ 319 u8g2.drawStr(0,24,"Codigo: 6"); 320 } 321 if(codigo == 7){ 322 u8g2.drawStr(0,24,"Codigo: 7"); 323 } 324 if(codigo == 8){ 325 u8g2.drawStr(0,24,"Codigo: 8"); 326 } 327 if(codigo == 9){ 328 u8g2.drawStr(0,24,"Codigo: 9"); 329 } 330 if(codigo == 0){ 331 u8g2.drawStr(0,24,"Codigo: 0"); 332 } 333 if(codigo == 11){ 334 u8g2.drawStr(0,24,"Codigo: *"); 335 } 336 if(codigo == 12){ 337 u8g2.drawStr(0,24,"Codigo: #"); 338 } 339 if(codigo == 13){ 340 u8g2.drawStr(0,24,"Codigo: MENU"); 341 } 342 if(codigo == 14){ 343 u8g2.drawStr(0,24,"Codigo: UP"); 344 } 345 if(codigo == 15){ 346 u8g2.drawStr(0,24,"Codigo: DOWN"); 347 } 348 if(codigo == 16){ 349 u8g2.drawStr(0,24,"Codigo: EXIT"); 350 } 351 if(codigo == 17){ 352 u8g2.drawStr(0,24,"Preparado"); 353 354 } 355 } while ( u8g2.nextPage() ); 356 }
Comments
Only logged in users can leave comments