Practicas / Mbed 2 deprecated Maqueta_Combinada_FINAL

Dependencies:   mbed Adafruit_GFX DS1820

Committer:
daniferca
Date:
Wed Dec 15 18:22:44 2021 +0000
Revision:
1:65e9a9b006c1
Parent:
0:d6db09ba7537
Child:
2:20c2d39d5902
V2;

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 1:65e9a9b006c1 74 if((finalIzq == 1) && (FUNCIONAR==1) && contador==0) { //Inicio en funcion del Final de Carrera de la Izquierda y del Boton
daniferca 1:65e9a9b006c1 75
daniferca 1:65e9a9b006c1 76 wait(0.5); //Tiempo de espera para descargar la Pieza
daniferca 0:d6db09ba7537 77 enable=1;
daniferca 0:d6db09ba7537 78 estado=abriendose;
daniferca 0:d6db09ba7537 79
daniferca 1:65e9a9b006c1 80 gOled.clearDisplay();
daniferca 1:65e9a9b006c1 81 gOled.printf("Programa Transporte");
daniferca 1:65e9a9b006c1 82 gOled.display();
daniferca 1:65e9a9b006c1 83 gOled.setTextCursor(0,0);
daniferca 0:d6db09ba7537 84
daniferca 0:d6db09ba7537 85 }
daniferca 1:65e9a9b006c1 86
daniferca 1:65e9a9b006c1 87 else if (contador>0){
daniferca 1:65e9a9b006c1 88
daniferca 1:65e9a9b006c1 89 wait(0.5); //Tiempo de espera para descargar la Pieza
daniferca 1:65e9a9b006c1 90 enable=1;
daniferca 1:65e9a9b006c1 91 estado=abriendose;
daniferca 1:65e9a9b006c1 92
daniferca 1:65e9a9b006c1 93
daniferca 1:65e9a9b006c1 94 }
daniferca 0:d6db09ba7537 95 }
daniferca 0:d6db09ba7537 96
daniferca 0:d6db09ba7537 97 if(y==1) { //Entrada al Taladro
daniferca 0:d6db09ba7537 98
daniferca 0:d6db09ba7537 99 if((finalIzq == 1) && (FUNCIONAR==1)) { //Inicio en funcion del Final de Carrera de la Izquierda y del Boton
daniferca 0:d6db09ba7537 100 enable=1;
daniferca 0:d6db09ba7537 101 estado=abriendose;
daniferca 0:d6db09ba7537 102
daniferca 1:65e9a9b006c1 103 gOled.clearDisplay();
daniferca 1:65e9a9b006c1 104 gOled.printf("Programa Taladro");
daniferca 1:65e9a9b006c1 105 gOled.display();
daniferca 1:65e9a9b006c1 106 gOled.setTextCursor(0,0);
daniferca 1:65e9a9b006c1 107
daniferca 0:d6db09ba7537 108 }
daniferca 0:d6db09ba7537 109
daniferca 0:d6db09ba7537 110
daniferca 0:d6db09ba7537 111 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 112
daniferca 0:d6db09ba7537 113 estado=abriendose;
daniferca 0:d6db09ba7537 114
daniferca 0:d6db09ba7537 115
daniferca 1:65e9a9b006c1 116
daniferca 0:d6db09ba7537 117 }
daniferca 0:d6db09ba7537 118
daniferca 0:d6db09ba7537 119 tiempo.reset();
daniferca 0:d6db09ba7537 120 tiempo.start();
daniferca 0:d6db09ba7537 121 }
daniferca 0:d6db09ba7537 122
daniferca 0:d6db09ba7537 123
daniferca 0:d6db09ba7537 124 }
daniferca 0:d6db09ba7537 125
daniferca 0:d6db09ba7537 126 void estadoAbriendose()
daniferca 0:d6db09ba7537 127 {
daniferca 0:d6db09ba7537 128
daniferca 0:d6db09ba7537 129 if(x==1) { //Entrada al Transportador de Piezas
daniferca 0:d6db09ba7537 130
daniferca 0:d6db09ba7537 131 if((finalDer==1)) {
daniferca 0:d6db09ba7537 132
daniferca 0:d6db09ba7537 133 estado=abierta;
daniferca 0:d6db09ba7537 134 enable=0;
daniferca 0:d6db09ba7537 135
daniferca 0:d6db09ba7537 136 }
daniferca 0:d6db09ba7537 137
daniferca 0:d6db09ba7537 138 else {
daniferca 0:d6db09ba7537 139
daniferca 0:d6db09ba7537 140 gOled.clearDisplay();
daniferca 0:d6db09ba7537 141
daniferca 0:d6db09ba7537 142 paso(1);
daniferca 0:d6db09ba7537 143
daniferca 0:d6db09ba7537 144 }
daniferca 0:d6db09ba7537 145 }
daniferca 0:d6db09ba7537 146
daniferca 0:d6db09ba7537 147
daniferca 0:d6db09ba7537 148 if(y==1) { //Entrada al Taladro
daniferca 0:d6db09ba7537 149
daniferca 0:d6db09ba7537 150
daniferca 0:d6db09ba7537 151 if(tiempo.read() > 4 ){
daniferca 0:d6db09ba7537 152
daniferca 0:d6db09ba7537 153 contador++;
daniferca 0:d6db09ba7537 154 estado=abierta;
daniferca 0:d6db09ba7537 155 enable=0;
daniferca 0:d6db09ba7537 156
daniferca 0:d6db09ba7537 157 }
daniferca 0:d6db09ba7537 158
daniferca 0:d6db09ba7537 159 else if ((contador>0) && (tiempo.read() > 0.6)){
daniferca 0:d6db09ba7537 160
daniferca 0:d6db09ba7537 161 contador++;
daniferca 0:d6db09ba7537 162 estado=abierta;
daniferca 0:d6db09ba7537 163 enable=0;
daniferca 0:d6db09ba7537 164
daniferca 0:d6db09ba7537 165 }
daniferca 0:d6db09ba7537 166 else {
daniferca 0:d6db09ba7537 167
daniferca 0:d6db09ba7537 168 paso(1);
daniferca 0:d6db09ba7537 169
daniferca 0:d6db09ba7537 170
daniferca 0:d6db09ba7537 171 }
daniferca 0:d6db09ba7537 172
daniferca 0:d6db09ba7537 173 }
daniferca 0:d6db09ba7537 174
daniferca 0:d6db09ba7537 175
daniferca 0:d6db09ba7537 176 }
daniferca 0:d6db09ba7537 177
daniferca 0:d6db09ba7537 178 void estadoCerrandose()
daniferca 0:d6db09ba7537 179 {
daniferca 0:d6db09ba7537 180
daniferca 0:d6db09ba7537 181 if(x==1) { //Entrada al Transportador de Piezas
daniferca 0:d6db09ba7537 182
daniferca 0:d6db09ba7537 183 if((finalIzq==1 && contador<3)) { //Bucle hasta hasta que el contador alcance 3
daniferca 0:d6db09ba7537 184
daniferca 0:d6db09ba7537 185 estado=cerrada;
daniferca 0:d6db09ba7537 186 enable=0;
daniferca 0:d6db09ba7537 187 }
daniferca 0:d6db09ba7537 188
daniferca 0:d6db09ba7537 189 else if ((finalIzq==1)&& contador>2) { //Cuando el contador alcance 3, se terminara el programa
daniferca 0:d6db09ba7537 190
daniferca 0:d6db09ba7537 191 estado = cerrada;
daniferca 0:d6db09ba7537 192 enable = 0;
daniferca 0:d6db09ba7537 193 contador=0;
daniferca 0:d6db09ba7537 194 FUNCIONAR=0;
daniferca 0:d6db09ba7537 195
daniferca 0:d6db09ba7537 196 }
daniferca 0:d6db09ba7537 197
daniferca 0:d6db09ba7537 198 else { //Activar/Mantener movimiento
daniferca 0:d6db09ba7537 199
daniferca 0:d6db09ba7537 200 paso(0);
daniferca 0:d6db09ba7537 201
daniferca 0:d6db09ba7537 202 }
daniferca 0:d6db09ba7537 203 }
daniferca 0:d6db09ba7537 204
daniferca 0:d6db09ba7537 205 if (y==1){ //Entrada al Taladro
daniferca 0:d6db09ba7537 206
daniferca 0:d6db09ba7537 207 if((tiempo.read() > 0.6) && contador<7) { //Recorrido limitado por tiempo y contador(menor que 7) para taladro
daniferca 0:d6db09ba7537 208
daniferca 0:d6db09ba7537 209 estado=cerrada;
daniferca 0:d6db09ba7537 210
daniferca 0:d6db09ba7537 211 }
daniferca 0:d6db09ba7537 212
daniferca 0:d6db09ba7537 213
daniferca 0:d6db09ba7537 214 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 215
daniferca 0:d6db09ba7537 216 estado = cerrada;
daniferca 0:d6db09ba7537 217 enable = 0;
daniferca 0:d6db09ba7537 218 contador=0;
daniferca 0:d6db09ba7537 219 FUNCIONAR=0;
daniferca 0:d6db09ba7537 220
daniferca 0:d6db09ba7537 221 }
daniferca 0:d6db09ba7537 222
daniferca 0:d6db09ba7537 223
daniferca 0:d6db09ba7537 224 else {
daniferca 0:d6db09ba7537 225
daniferca 0:d6db09ba7537 226 paso(0); //Activar/Mantener movimiento
daniferca 0:d6db09ba7537 227
daniferca 0:d6db09ba7537 228 }
daniferca 0:d6db09ba7537 229
daniferca 0:d6db09ba7537 230 }
daniferca 0:d6db09ba7537 231
daniferca 0:d6db09ba7537 232 }
daniferca 0:d6db09ba7537 233
daniferca 0:d6db09ba7537 234 void estadoAbierta()
daniferca 0:d6db09ba7537 235 {
daniferca 0:d6db09ba7537 236
daniferca 0:d6db09ba7537 237 if(x==1){ //Entrada al Transportador de Piezas
daniferca 0:d6db09ba7537 238
daniferca 0:d6db09ba7537 239 contador++; //Contador Piezas
daniferca 0:d6db09ba7537 240
daniferca 0:d6db09ba7537 241
daniferca 0:d6db09ba7537 242 gOled.clearDisplay();
daniferca 0:d6db09ba7537 243 gOled.printf("Piezas Transportadas = %d\n",contador);
daniferca 0:d6db09ba7537 244 gOled.display();
daniferca 0:d6db09ba7537 245 gOled.setTextCursor(0,0);
daniferca 0:d6db09ba7537 246
daniferca 0:d6db09ba7537 247
daniferca 0:d6db09ba7537 248 }
daniferca 0:d6db09ba7537 249
daniferca 0:d6db09ba7537 250 if (y==1){ //Entrada al Taladro
daniferca 0:d6db09ba7537 251
daniferca 0:d6db09ba7537 252 gOled.clearDisplay();
daniferca 0:d6db09ba7537 253 gOled.printf("Impactos Taladro = %d\n",contador);
daniferca 0:d6db09ba7537 254 gOled.printf("temp = %3.1f C\r\n", temp);
daniferca 0:d6db09ba7537 255 gOled.display();
daniferca 0:d6db09ba7537 256 gOled.setTextCursor(0,0);
daniferca 0:d6db09ba7537 257 pc.printf("temp = %3.1f C\r\n", temp);
daniferca 0:d6db09ba7537 258
daniferca 1:65e9a9b006c1 259 }
daniferca 0:d6db09ba7537 260
daniferca 0:d6db09ba7537 261
daniferca 0:d6db09ba7537 262 tiempo.reset();
daniferca 0:d6db09ba7537 263 tiempo.start();
daniferca 0:d6db09ba7537 264
daniferca 0:d6db09ba7537 265 enable=1;
daniferca 0:d6db09ba7537 266 estado=cerrandose;
daniferca 0:d6db09ba7537 267
daniferca 0:d6db09ba7537 268 }
daniferca 0:d6db09ba7537 269
daniferca 0:d6db09ba7537 270
daniferca 0:d6db09ba7537 271 int main()
daniferca 0:d6db09ba7537 272 {
daniferca 0:d6db09ba7537 273 pc.baud(115200);
daniferca 0:d6db09ba7537 274 estado=cerrada;
daniferca 0:d6db09ba7537 275 gOled.begin();
daniferca 0:d6db09ba7537 276 gOled.clearDisplay();
daniferca 0:d6db09ba7537 277 gOled.printf("Hola\n");
daniferca 0:d6db09ba7537 278 gOled.display();
daniferca 0:d6db09ba7537 279
daniferca 0:d6db09ba7537 280
daniferca 0:d6db09ba7537 281 if (boton == 1){
daniferca 0:d6db09ba7537 282
daniferca 0:d6db09ba7537 283 FUNCIONAR=1;
daniferca 0:d6db09ba7537 284
daniferca 0:d6db09ba7537 285 }
daniferca 0:d6db09ba7537 286
daniferca 0:d6db09ba7537 287
daniferca 0:d6db09ba7537 288
daniferca 0:d6db09ba7537 289 if(x==1) {
daniferca 0:d6db09ba7537 290 gOled.clearDisplay();
daniferca 0:d6db09ba7537 291 gOled.printf("Programa: Transporte de Piezas\n");
daniferca 0:d6db09ba7537 292 gOled.display();
daniferca 0:d6db09ba7537 293 }
daniferca 0:d6db09ba7537 294
daniferca 0:d6db09ba7537 295 if(y==1) {
daniferca 0:d6db09ba7537 296 gOled.clearDisplay();
daniferca 0:d6db09ba7537 297 gOled.printf("Programa: Taladro\n");
daniferca 0:d6db09ba7537 298 gOled.display();
daniferca 0:d6db09ba7537 299 }
daniferca 0:d6db09ba7537 300 tiempo.reset();
daniferca 0:d6db09ba7537 301
daniferca 0:d6db09ba7537 302 pc.baud(115200);
daniferca 0:d6db09ba7537 303
daniferca 0:d6db09ba7537 304 while(1) {
daniferca 0:d6db09ba7537 305
daniferca 0:d6db09ba7537 306 if (switcher ==0){ //Programa Transportador de Piezas
daniferca 0:d6db09ba7537 307
daniferca 0:d6db09ba7537 308 y=0;
daniferca 0:d6db09ba7537 309 x=1;
daniferca 0:d6db09ba7537 310
daniferca 0:d6db09ba7537 311 myLed1=1;
daniferca 0:d6db09ba7537 312 myLed2=0;
daniferca 0:d6db09ba7537 313
daniferca 0:d6db09ba7537 314 }
daniferca 0:d6db09ba7537 315
daniferca 0:d6db09ba7537 316 else if (switcher==1){ //Programa Taladro
daniferca 0:d6db09ba7537 317
daniferca 0:d6db09ba7537 318 y=1;
daniferca 0:d6db09ba7537 319 x=0;
daniferca 0:d6db09ba7537 320
daniferca 0:d6db09ba7537 321 myLed1=0;
daniferca 0:d6db09ba7537 322 myLed2=1;
daniferca 0:d6db09ba7537 323
daniferca 0:d6db09ba7537 324 }
daniferca 0:d6db09ba7537 325
daniferca 0:d6db09ba7537 326 if (boton==1){
daniferca 0:d6db09ba7537 327
daniferca 0:d6db09ba7537 328 FUNCIONAR=1;
daniferca 0:d6db09ba7537 329
daniferca 0:d6db09ba7537 330 }
daniferca 0:d6db09ba7537 331
daniferca 0:d6db09ba7537 332
daniferca 0:d6db09ba7537 333 switch ( estado ) {
daniferca 0:d6db09ba7537 334 case cerrada:
daniferca 0:d6db09ba7537 335 estadoCerrada();
daniferca 0:d6db09ba7537 336 break;
daniferca 0:d6db09ba7537 337 case abriendose:
daniferca 0:d6db09ba7537 338 estadoAbriendose();
daniferca 0:d6db09ba7537 339 break;
daniferca 0:d6db09ba7537 340 case abierta:
daniferca 0:d6db09ba7537 341 estadoAbierta();
daniferca 0:d6db09ba7537 342 break;
daniferca 0:d6db09ba7537 343 case cerrandose:
daniferca 0:d6db09ba7537 344 estadoCerrandose();
daniferca 0:d6db09ba7537 345 break;
daniferca 0:d6db09ba7537 346 default:
daniferca 0:d6db09ba7537 347 break;
daniferca 0:d6db09ba7537 348 }
daniferca 0:d6db09ba7537 349
daniferca 0:d6db09ba7537 350
daniferca 0:d6db09ba7537 351 }
daniferca 0:d6db09ba7537 352
daniferca 0:d6db09ba7537 353 }
daniferca 0:d6db09ba7537 354