Practicas / Mbed 2 deprecated Maqueta_Combinada_FINAL

Dependencies:   mbed Adafruit_GFX DS1820

Committer:
daniferca
Date:
Wed Dec 15 18:02:35 2021 +0000
Revision:
0:d6db09ba7537
Child:
1:65e9a9b006c1
FINAL

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniferca 0:d6db09ba7537 1 #include "mbed.h"
daniferca 0:d6db09ba7537 2 #include "hcsr04.h"
daniferca 0:d6db09ba7537 3 #include "DS1820.h"
daniferca 0:d6db09ba7537 4
daniferca 0:d6db09ba7537 5
daniferca 0:d6db09ba7537 6 #include "Adafruit_SSD1306.h"
daniferca 0:d6db09ba7537 7
daniferca 0:d6db09ba7537 8 class I2CPreInit : public I2C
daniferca 0:d6db09ba7537 9 {
daniferca 0:d6db09ba7537 10 public:
daniferca 0:d6db09ba7537 11 I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
daniferca 0:d6db09ba7537 12 {
daniferca 0:d6db09ba7537 13 frequency(100000);
daniferca 0:d6db09ba7537 14 start();
daniferca 0:d6db09ba7537 15 };
daniferca 0:d6db09ba7537 16 };
daniferca 0:d6db09ba7537 17
daniferca 0:d6db09ba7537 18 I2CPreInit gI2C(PB_9,PB_8);
daniferca 0:d6db09ba7537 19
daniferca 0:d6db09ba7537 20 Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128);
daniferca 0:d6db09ba7537 21
daniferca 0:d6db09ba7537 22
daniferca 0:d6db09ba7537 23 Serial pc(USBTX, USBRX);
daniferca 0:d6db09ba7537 24
daniferca 0:d6db09ba7537 25
daniferca 0:d6db09ba7537 26
daniferca 0:d6db09ba7537 27 Ticker tickerMideDistancia;
daniferca 0:d6db09ba7537 28 unsigned distancia=20;
daniferca 0:d6db09ba7537 29
daniferca 0:d6db09ba7537 30 HCSR04 usensor(D7,D8); //(PinName TrigPin,PinName EchoPin):
daniferca 0:d6db09ba7537 31 DigitalIn finalDer(D2); //Final de carrera DERECHA
daniferca 0:d6db09ba7537 32 DigitalIn finalIzq(D3); //Final de carrera IZQUIERDA
daniferca 0:d6db09ba7537 33 DigitalIn boton(D5); //Boton para iniciar el programa seleccionado
daniferca 0:d6db09ba7537 34 DigitalIn switcher(D9); //Interruptor para indicar que programa usar
daniferca 0:d6db09ba7537 35 DigitalOut step(D13);
daniferca 0:d6db09ba7537 36 DigitalOut dir(D12);
daniferca 0:d6db09ba7537 37 DigitalOut enable(D11);
daniferca 0:d6db09ba7537 38 DigitalOut led(LED1);
daniferca 0:d6db09ba7537 39 DigitalOut myLed1 (D4); //Indicador programa Taladro seleccionado
daniferca 0:d6db09ba7537 40 DigitalOut myLed2 (D6); //Indicador programa Transportador de Piezas seleccionado
daniferca 0:d6db09ba7537 41
daniferca 0:d6db09ba7537 42 DS1820 ds1820(D10); //Substitute PA_9 with actual mbed pin name connected to the DS1820 data pin
daniferca 0:d6db09ba7537 43
daniferca 0:d6db09ba7537 44
daniferca 0:d6db09ba7537 45
daniferca 0:d6db09ba7537 46 float temp = 0;
daniferca 0:d6db09ba7537 47 int contador=0; //Contador de Piezas e Impactos del Taladro
daniferca 0:d6db09ba7537 48 int FUNCIONAR=0; //Variable que de comienzo al programa en funcion del boton
daniferca 0:d6db09ba7537 49
daniferca 0:d6db09ba7537 50
daniferca 0:d6db09ba7537 51 int x=0; //Variable abilitadora programa Transportador de Piezas, en funcion del interruptor
daniferca 0:d6db09ba7537 52 int y=0; //Variable abilitadora programa Taladro, en funcion del interruptor
daniferca 0:d6db09ba7537 53
daniferca 0:d6db09ba7537 54 Timer tiempo; //Temprizador para las acciones del taladro
daniferca 0:d6db09ba7537 55
daniferca 0:d6db09ba7537 56 enum estados {cerrada, abriendose, cerrandose, abierta};
daniferca 0:d6db09ba7537 57 estados estado;
daniferca 0:d6db09ba7537 58
daniferca 0:d6db09ba7537 59
daniferca 0:d6db09ba7537 60 void paso(int d)
daniferca 0:d6db09ba7537 61 {
daniferca 0:d6db09ba7537 62 dir=d;
daniferca 0:d6db09ba7537 63 step=1;
daniferca 0:d6db09ba7537 64 wait_us(100); // Cambio de paso
daniferca 0:d6db09ba7537 65 step=0;
daniferca 0:d6db09ba7537 66 wait_us(900); //Este hay que cambiar
daniferca 0:d6db09ba7537 67 }
daniferca 0:d6db09ba7537 68
daniferca 0:d6db09ba7537 69 void estadoCerrada()
daniferca 0:d6db09ba7537 70 {
daniferca 0:d6db09ba7537 71
daniferca 0:d6db09ba7537 72 if (x==1) { //Entrada al Transportador de Piezas
daniferca 0:d6db09ba7537 73
daniferca 0:d6db09ba7537 74 if((finalIzq == 1) && (FUNCIONAR==1)) { //Inicio en funcion del Final de Carrera de la Izquierda y del Boton
daniferca 0:d6db09ba7537 75 wait(0.5); //Tiempo de espera para descargar la Pieza
daniferca 0:d6db09ba7537 76 enable=1;
daniferca 0:d6db09ba7537 77 estado=abriendose;
daniferca 0:d6db09ba7537 78
daniferca 0:d6db09ba7537 79 pc.printf("Final2 pulsado\r\n");
daniferca 0:d6db09ba7537 80
daniferca 0:d6db09ba7537 81 }
daniferca 0:d6db09ba7537 82 }
daniferca 0:d6db09ba7537 83
daniferca 0:d6db09ba7537 84 if(y==1) { //Entrada al Taladro
daniferca 0:d6db09ba7537 85
daniferca 0:d6db09ba7537 86 if((finalIzq == 1) && (FUNCIONAR==1)) { //Inicio en funcion del Final de Carrera de la Izquierda y del Boton
daniferca 0:d6db09ba7537 87 enable=1;
daniferca 0:d6db09ba7537 88 estado=abriendose;
daniferca 0:d6db09ba7537 89
daniferca 0:d6db09ba7537 90 }
daniferca 0:d6db09ba7537 91
daniferca 0:d6db09ba7537 92
daniferca 0:d6db09ba7537 93 else if (contador>0){ //Una vez se alcanza la posicion para taladrar, el contador es mayor de 0 y no parara/cumplira esta condicion hasta que al final del programa se iguale el contador a 0
daniferca 0:d6db09ba7537 94
daniferca 0:d6db09ba7537 95 estado=abriendose;
daniferca 0:d6db09ba7537 96
daniferca 0:d6db09ba7537 97
daniferca 0:d6db09ba7537 98 }
daniferca 0:d6db09ba7537 99
daniferca 0:d6db09ba7537 100 tiempo.reset();
daniferca 0:d6db09ba7537 101 tiempo.start();
daniferca 0:d6db09ba7537 102 }
daniferca 0:d6db09ba7537 103
daniferca 0:d6db09ba7537 104
daniferca 0:d6db09ba7537 105 }
daniferca 0:d6db09ba7537 106
daniferca 0:d6db09ba7537 107 void estadoAbriendose()
daniferca 0:d6db09ba7537 108 {
daniferca 0:d6db09ba7537 109
daniferca 0:d6db09ba7537 110 if(x==1) { //Entrada al Transportador de Piezas
daniferca 0:d6db09ba7537 111
daniferca 0:d6db09ba7537 112 if((finalDer==1)) {
daniferca 0:d6db09ba7537 113
daniferca 0:d6db09ba7537 114 estado=abierta;
daniferca 0:d6db09ba7537 115 enable=0;
daniferca 0:d6db09ba7537 116
daniferca 0:d6db09ba7537 117 }
daniferca 0:d6db09ba7537 118
daniferca 0:d6db09ba7537 119 else {
daniferca 0:d6db09ba7537 120
daniferca 0:d6db09ba7537 121 gOled.clearDisplay();
daniferca 0:d6db09ba7537 122
daniferca 0:d6db09ba7537 123 paso(1);
daniferca 0:d6db09ba7537 124
daniferca 0:d6db09ba7537 125 }
daniferca 0:d6db09ba7537 126 }
daniferca 0:d6db09ba7537 127
daniferca 0:d6db09ba7537 128
daniferca 0:d6db09ba7537 129 if(y==1) { //Entrada al Taladro
daniferca 0:d6db09ba7537 130
daniferca 0:d6db09ba7537 131
daniferca 0:d6db09ba7537 132 if(tiempo.read() > 4 ){
daniferca 0:d6db09ba7537 133
daniferca 0:d6db09ba7537 134 contador++;
daniferca 0:d6db09ba7537 135 estado=abierta;
daniferca 0:d6db09ba7537 136 enable=0;
daniferca 0:d6db09ba7537 137
daniferca 0:d6db09ba7537 138 }
daniferca 0:d6db09ba7537 139
daniferca 0:d6db09ba7537 140 else if ((contador>0) && (tiempo.read() > 0.6)){
daniferca 0:d6db09ba7537 141
daniferca 0:d6db09ba7537 142 contador++;
daniferca 0:d6db09ba7537 143 estado=abierta;
daniferca 0:d6db09ba7537 144 enable=0;
daniferca 0:d6db09ba7537 145
daniferca 0:d6db09ba7537 146 }
daniferca 0:d6db09ba7537 147 else {
daniferca 0:d6db09ba7537 148
daniferca 0:d6db09ba7537 149 paso(1);
daniferca 0:d6db09ba7537 150
daniferca 0:d6db09ba7537 151
daniferca 0:d6db09ba7537 152 }
daniferca 0:d6db09ba7537 153
daniferca 0:d6db09ba7537 154 }
daniferca 0:d6db09ba7537 155
daniferca 0:d6db09ba7537 156
daniferca 0:d6db09ba7537 157 }
daniferca 0:d6db09ba7537 158
daniferca 0:d6db09ba7537 159 void estadoCerrandose()
daniferca 0:d6db09ba7537 160 {
daniferca 0:d6db09ba7537 161
daniferca 0:d6db09ba7537 162 if(x==1) { //Entrada al Transportador de Piezas
daniferca 0:d6db09ba7537 163
daniferca 0:d6db09ba7537 164 if((finalIzq==1 && contador<3)) { //Bucle hasta hasta que el contador alcance 3
daniferca 0:d6db09ba7537 165
daniferca 0:d6db09ba7537 166 estado=cerrada;
daniferca 0:d6db09ba7537 167 enable=0;
daniferca 0:d6db09ba7537 168 }
daniferca 0:d6db09ba7537 169
daniferca 0:d6db09ba7537 170 else if ((finalIzq==1)&& contador>2) { //Cuando el contador alcance 3, se terminara el programa
daniferca 0:d6db09ba7537 171
daniferca 0:d6db09ba7537 172 estado = cerrada;
daniferca 0:d6db09ba7537 173 enable = 0;
daniferca 0:d6db09ba7537 174 contador=0;
daniferca 0:d6db09ba7537 175 FUNCIONAR=0;
daniferca 0:d6db09ba7537 176
daniferca 0:d6db09ba7537 177 }
daniferca 0:d6db09ba7537 178
daniferca 0:d6db09ba7537 179 else { //Activar/Mantener movimiento
daniferca 0:d6db09ba7537 180
daniferca 0:d6db09ba7537 181 paso(0);
daniferca 0:d6db09ba7537 182
daniferca 0:d6db09ba7537 183 }
daniferca 0:d6db09ba7537 184 }
daniferca 0:d6db09ba7537 185
daniferca 0:d6db09ba7537 186 if (y==1){ //Entrada al Taladro
daniferca 0:d6db09ba7537 187
daniferca 0:d6db09ba7537 188 if((tiempo.read() > 0.6) && contador<7) { //Recorrido limitado por tiempo y contador(menor que 7) para taladro
daniferca 0:d6db09ba7537 189
daniferca 0:d6db09ba7537 190 estado=cerrada;
daniferca 0:d6db09ba7537 191
daniferca 0:d6db09ba7537 192 }
daniferca 0:d6db09ba7537 193
daniferca 0:d6db09ba7537 194
daniferca 0:d6db09ba7537 195 else if ((contador>6)&& (finalIzq==1)){ //Cuando el contador alcance 7 se pulse el final de carrera de la izquierda, se terminara el programa
daniferca 0:d6db09ba7537 196
daniferca 0:d6db09ba7537 197 estado = cerrada;
daniferca 0:d6db09ba7537 198 enable = 0;
daniferca 0:d6db09ba7537 199 contador=0;
daniferca 0:d6db09ba7537 200 FUNCIONAR=0;
daniferca 0:d6db09ba7537 201
daniferca 0:d6db09ba7537 202 }
daniferca 0:d6db09ba7537 203
daniferca 0:d6db09ba7537 204
daniferca 0:d6db09ba7537 205 else {
daniferca 0:d6db09ba7537 206
daniferca 0:d6db09ba7537 207 paso(0); //Activar/Mantener movimiento
daniferca 0:d6db09ba7537 208
daniferca 0:d6db09ba7537 209 }
daniferca 0:d6db09ba7537 210
daniferca 0:d6db09ba7537 211 }
daniferca 0:d6db09ba7537 212
daniferca 0:d6db09ba7537 213 }
daniferca 0:d6db09ba7537 214
daniferca 0:d6db09ba7537 215 void estadoAbierta()
daniferca 0:d6db09ba7537 216 {
daniferca 0:d6db09ba7537 217
daniferca 0:d6db09ba7537 218 if(x==1){ //Entrada al Transportador de Piezas
daniferca 0:d6db09ba7537 219
daniferca 0:d6db09ba7537 220 contador++; //Contador Piezas
daniferca 0:d6db09ba7537 221
daniferca 0:d6db09ba7537 222
daniferca 0:d6db09ba7537 223 gOled.clearDisplay();
daniferca 0:d6db09ba7537 224 gOled.printf("Piezas Transportadas = %d\n",contador);
daniferca 0:d6db09ba7537 225 gOled.printf("temp = %3.1f C\r\n", temp);
daniferca 0:d6db09ba7537 226 gOled.display();
daniferca 0:d6db09ba7537 227 gOled.setTextCursor(0,0);
daniferca 0:d6db09ba7537 228 pc.printf("temp = %3.1f C\r\n", temp);
daniferca 0:d6db09ba7537 229
daniferca 0:d6db09ba7537 230
daniferca 0:d6db09ba7537 231 }
daniferca 0:d6db09ba7537 232
daniferca 0:d6db09ba7537 233 if (y==1){ //Entrada al Taladro
daniferca 0:d6db09ba7537 234
daniferca 0:d6db09ba7537 235 gOled.clearDisplay();
daniferca 0:d6db09ba7537 236 gOled.printf("Impactos Taladro = %d\n",contador);
daniferca 0:d6db09ba7537 237 gOled.printf("temp = %3.1f C\r\n", temp);
daniferca 0:d6db09ba7537 238 gOled.display();
daniferca 0:d6db09ba7537 239 gOled.setTextCursor(0,0);
daniferca 0:d6db09ba7537 240 pc.printf("temp = %3.1f C\r\n", temp);
daniferca 0:d6db09ba7537 241
daniferca 0:d6db09ba7537 242 }
daniferca 0:d6db09ba7537 243
daniferca 0:d6db09ba7537 244
daniferca 0:d6db09ba7537 245 tiempo.reset();
daniferca 0:d6db09ba7537 246 tiempo.start();
daniferca 0:d6db09ba7537 247
daniferca 0:d6db09ba7537 248 enable=1;
daniferca 0:d6db09ba7537 249 estado=cerrandose;
daniferca 0:d6db09ba7537 250
daniferca 0:d6db09ba7537 251 }
daniferca 0:d6db09ba7537 252
daniferca 0:d6db09ba7537 253
daniferca 0:d6db09ba7537 254 int main()
daniferca 0:d6db09ba7537 255 {
daniferca 0:d6db09ba7537 256 pc.baud(115200);
daniferca 0:d6db09ba7537 257 estado=cerrada;
daniferca 0:d6db09ba7537 258 gOled.begin();
daniferca 0:d6db09ba7537 259 gOled.clearDisplay();
daniferca 0:d6db09ba7537 260 gOled.printf("Hola\n");
daniferca 0:d6db09ba7537 261 gOled.display();
daniferca 0:d6db09ba7537 262
daniferca 0:d6db09ba7537 263
daniferca 0:d6db09ba7537 264 if (boton == 1){
daniferca 0:d6db09ba7537 265
daniferca 0:d6db09ba7537 266 FUNCIONAR=1;
daniferca 0:d6db09ba7537 267
daniferca 0:d6db09ba7537 268 }
daniferca 0:d6db09ba7537 269
daniferca 0:d6db09ba7537 270
daniferca 0:d6db09ba7537 271
daniferca 0:d6db09ba7537 272 if(x==1) {
daniferca 0:d6db09ba7537 273 gOled.clearDisplay();
daniferca 0:d6db09ba7537 274 gOled.printf("Programa: Transporte de Piezas\n");
daniferca 0:d6db09ba7537 275 gOled.display();
daniferca 0:d6db09ba7537 276 }
daniferca 0:d6db09ba7537 277
daniferca 0:d6db09ba7537 278 if(y==1) {
daniferca 0:d6db09ba7537 279 gOled.clearDisplay();
daniferca 0:d6db09ba7537 280 gOled.printf("Programa: Taladro\n");
daniferca 0:d6db09ba7537 281 gOled.display();
daniferca 0:d6db09ba7537 282 }
daniferca 0:d6db09ba7537 283 tiempo.reset();
daniferca 0:d6db09ba7537 284
daniferca 0:d6db09ba7537 285 pc.baud(115200);
daniferca 0:d6db09ba7537 286
daniferca 0:d6db09ba7537 287 while(1) {
daniferca 0:d6db09ba7537 288
daniferca 0:d6db09ba7537 289 if (switcher ==0){ //Programa Transportador de Piezas
daniferca 0:d6db09ba7537 290
daniferca 0:d6db09ba7537 291 y=0;
daniferca 0:d6db09ba7537 292 x=1;
daniferca 0:d6db09ba7537 293
daniferca 0:d6db09ba7537 294 myLed1=1;
daniferca 0:d6db09ba7537 295 myLed2=0;
daniferca 0:d6db09ba7537 296
daniferca 0:d6db09ba7537 297 }
daniferca 0:d6db09ba7537 298
daniferca 0:d6db09ba7537 299 else if (switcher==1){ //Programa Taladro
daniferca 0:d6db09ba7537 300
daniferca 0:d6db09ba7537 301 y=1;
daniferca 0:d6db09ba7537 302 x=0;
daniferca 0:d6db09ba7537 303
daniferca 0:d6db09ba7537 304 myLed1=0;
daniferca 0:d6db09ba7537 305 myLed2=1;
daniferca 0:d6db09ba7537 306
daniferca 0:d6db09ba7537 307 }
daniferca 0:d6db09ba7537 308
daniferca 0:d6db09ba7537 309 if (boton==1){
daniferca 0:d6db09ba7537 310
daniferca 0:d6db09ba7537 311 FUNCIONAR=1;
daniferca 0:d6db09ba7537 312
daniferca 0:d6db09ba7537 313 }
daniferca 0:d6db09ba7537 314
daniferca 0:d6db09ba7537 315
daniferca 0:d6db09ba7537 316 switch ( estado ) {
daniferca 0:d6db09ba7537 317 case cerrada:
daniferca 0:d6db09ba7537 318 estadoCerrada();
daniferca 0:d6db09ba7537 319 break;
daniferca 0:d6db09ba7537 320 case abriendose:
daniferca 0:d6db09ba7537 321 estadoAbriendose();
daniferca 0:d6db09ba7537 322 break;
daniferca 0:d6db09ba7537 323 case abierta:
daniferca 0:d6db09ba7537 324 estadoAbierta();
daniferca 0:d6db09ba7537 325 break;
daniferca 0:d6db09ba7537 326 case cerrandose:
daniferca 0:d6db09ba7537 327 estadoCerrandose();
daniferca 0:d6db09ba7537 328 break;
daniferca 0:d6db09ba7537 329 default:
daniferca 0:d6db09ba7537 330 break;
daniferca 0:d6db09ba7537 331 }
daniferca 0:d6db09ba7537 332
daniferca 0:d6db09ba7537 333
daniferca 0:d6db09ba7537 334 }
daniferca 0:d6db09ba7537 335
daniferca 0:d6db09ba7537 336 }
daniferca 0:d6db09ba7537 337