Cambios

Dependencies:   mbed Adafruit_GFX SeeedShieldBot BluetoothSerial

Committer:
aitor98
Date:
Sun Dec 20 22:27:31 2020 +0000
Revision:
0:92bf762d49fa
Cambiosss

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aitor98 0:92bf762d49fa 1 #include "mbed.h"
aitor98 0:92bf762d49fa 2 #include "hcsr04.h"
aitor98 0:92bf762d49fa 3 #include "Adafruit_SSD1306.h"
aitor98 0:92bf762d49fa 4 /*#include "estadomovder.h"
aitor98 0:92bf762d49fa 5 #include "estadoinicio.h"
aitor98 0:92bf762d49fa 6 #include "estadocalentar.h"
aitor98 0:92bf762d49fa 7 #include "estadomovizq1.h"
aitor98 0:92bf762d49fa 8 #include "estadocentro.h"
aitor98 0:92bf762d49fa 9 #include "estadomovizq2.h"
aitor98 0:92bf762d49fa 10 #include "estadosoplado.h"*/
aitor98 0:92bf762d49fa 11
aitor98 0:92bf762d49fa 12
aitor98 0:92bf762d49fa 13 class I2CPreInit : public I2C
aitor98 0:92bf762d49fa 14 {
aitor98 0:92bf762d49fa 15 public:
aitor98 0:92bf762d49fa 16 I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
aitor98 0:92bf762d49fa 17 {
aitor98 0:92bf762d49fa 18 frequency(100000);
aitor98 0:92bf762d49fa 19 start();
aitor98 0:92bf762d49fa 20 };
aitor98 0:92bf762d49fa 21 };
aitor98 0:92bf762d49fa 22
aitor98 0:92bf762d49fa 23 I2CPreInit gI2C(PB_9,PB_8);
aitor98 0:92bf762d49fa 24
aitor98 0:92bf762d49fa 25 Serial pc(USBTX, USBRX); // tx, rx
aitor98 0:92bf762d49fa 26 Serial bt(A5, A4); // tx, rx
aitor98 0:92bf762d49fa 27 Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128);
aitor98 0:92bf762d49fa 28 Ticker repeticion;
aitor98 0:92bf762d49fa 29
aitor98 0:92bf762d49fa 30 DigitalOut led(LED1);
aitor98 0:92bf762d49fa 31 DigitalOut step(D13);
aitor98 0:92bf762d49fa 32 DigitalOut dir(D12);
aitor98 0:92bf762d49fa 33 DigitalOut enable(D11);
aitor98 0:92bf762d49fa 34 DigitalOut dirAMotor(D4);
aitor98 0:92bf762d49fa 35 PwmOut dirBMotor(A3);
aitor98 0:92bf762d49fa 36 InterruptIn encoderA(A2);
aitor98 0:92bf762d49fa 37 DigitalOut rele(D3);
aitor98 0:92bf762d49fa 38 HCSR04 usensor(D7,D8);
aitor98 0:92bf762d49fa 39 DigitalIn final1(D9);
aitor98 0:92bf762d49fa 40 InterruptIn final2(D10);
aitor98 0:92bf762d49fa 41 AnalogIn Vout(A0);
aitor98 0:92bf762d49fa 42 AnalogIn Aout(A1);
aitor98 0:92bf762d49fa 43
aitor98 0:92bf762d49fa 44 enum estados {inicio,movder,calentar,movizq1,centro,movizq2,soplado};
aitor98 0:92bf762d49fa 45 estados estado;
aitor98 0:92bf762d49fa 46
aitor98 0:92bf762d49fa 47
aitor98 0:92bf762d49fa 48 void medir_corriente()
aitor98 0:92bf762d49fa 49 {
aitor98 0:92bf762d49fa 50
aitor98 0:92bf762d49fa 51 float corriente=((Aout.read()*5)-2.5)/0.185;
aitor98 0:92bf762d49fa 52
aitor98 0:92bf762d49fa 53 pc.printf("Intensidad medida = %.4f A \n", corriente);
aitor98 0:92bf762d49fa 54 bt.printf("Intensidad medida = %.4f A \n", corriente);
aitor98 0:92bf762d49fa 55
aitor98 0:92bf762d49fa 56 }
aitor98 0:92bf762d49fa 57
aitor98 0:92bf762d49fa 58 int dato=0;
aitor98 0:92bf762d49fa 59
aitor98 0:92bf762d49fa 60 void estadoinicio()
aitor98 0:92bf762d49fa 61 {
aitor98 0:92bf762d49fa 62 {
aitor98 0:92bf762d49fa 63 if(bt.readable()) { //Mira si hay algun dato pendiente en el bt
aitor98 0:92bf762d49fa 64 dato=bt.getc(); //Lee un caracter del bt
aitor98 0:92bf762d49fa 65
aitor98 0:92bf762d49fa 66 }
aitor98 0:92bf762d49fa 67 if (dato=='1') { //Si el dato es un 1 comienza el proceso
aitor98 0:92bf762d49fa 68
aitor98 0:92bf762d49fa 69 estado = movder;
aitor98 0:92bf762d49fa 70
aitor98 0:92bf762d49fa 71
aitor98 0:92bf762d49fa 72 } else { //Si el dato es cualquier otra cosa no empieza a hacer nada
aitor98 0:92bf762d49fa 73
aitor98 0:92bf762d49fa 74 pc.printf("Reposo\n");
aitor98 0:92bf762d49fa 75 }
aitor98 0:92bf762d49fa 76 }
aitor98 0:92bf762d49fa 77 }
aitor98 0:92bf762d49fa 78
aitor98 0:92bf762d49fa 79
aitor98 0:92bf762d49fa 80 void estadomovderecha()
aitor98 0:92bf762d49fa 81 {
aitor98 0:92bf762d49fa 82 if(final1==0) {
aitor98 0:92bf762d49fa 83 enable=1; //activar el motor
aitor98 0:92bf762d49fa 84 dir=1; //direccion hacia la derecha
aitor98 0:92bf762d49fa 85 //step=1; // avanzar
aitor98 0:92bf762d49fa 86 step=1;
aitor98 0:92bf762d49fa 87 wait_us(100);
aitor98 0:92bf762d49fa 88 step=0;
aitor98 0:92bf762d49fa 89 wait_us(900);
aitor98 0:92bf762d49fa 90 pc.printf("Estado: Moviendo derecha\n");
aitor98 0:92bf762d49fa 91 gOled.printf("Transportando\n");
aitor98 0:92bf762d49fa 92 } else {
aitor98 0:92bf762d49fa 93 enable=0;
aitor98 0:92bf762d49fa 94 estado=calentar;
aitor98 0:92bf762d49fa 95 gOled.clearDisplay();
aitor98 0:92bf762d49fa 96 }
aitor98 0:92bf762d49fa 97 }
aitor98 0:92bf762d49fa 98
aitor98 0:92bf762d49fa 99 void estadocalentar()
aitor98 0:92bf762d49fa 100 {
aitor98 0:92bf762d49fa 101 float tension=Vout.read()*3.3;
aitor98 0:92bf762d49fa 102 //pc.printf("Valor voltios %.4f leido flat\n",tension);
aitor98 0:92bf762d49fa 103
aitor98 0:92bf762d49fa 104 float resistencia= ((3.3*100000.0)/tension)-100000.0;
aitor98 0:92bf762d49fa 105
aitor98 0:92bf762d49fa 106 float temp= 3950.0/(log(resistencia/100000.0)+(3950.0/298.0));
aitor98 0:92bf762d49fa 107 gOled.printf("Calentando a: %.4f\n",temp);
aitor98 0:92bf762d49fa 108
aitor98 0:92bf762d49fa 109 if (temp<35.0) {
aitor98 0:92bf762d49fa 110 //rele.write(1);
aitor98 0:92bf762d49fa 111 rele=1;
aitor98 0:92bf762d49fa 112 pc.printf("Estado: Rele activado\n");
aitor98 0:92bf762d49fa 113
aitor98 0:92bf762d49fa 114 } else {
aitor98 0:92bf762d49fa 115 rele=0;
aitor98 0:92bf762d49fa 116 estado=movizq1;
aitor98 0:92bf762d49fa 117 //gOled.clearDisplay();
aitor98 0:92bf762d49fa 118 }
aitor98 0:92bf762d49fa 119 }
aitor98 0:92bf762d49fa 120
aitor98 0:92bf762d49fa 121 void estadomovizq1()
aitor98 0:92bf762d49fa 122 {
aitor98 0:92bf762d49fa 123 unsigned int dist;
aitor98 0:92bf762d49fa 124 usensor.start();
aitor98 0:92bf762d49fa 125 dist=usensor.get_dist_cm();
aitor98 0:92bf762d49fa 126
aitor98 0:92bf762d49fa 127 if(dist>20) {
aitor98 0:92bf762d49fa 128 enable=1; //activar el motor
aitor98 0:92bf762d49fa 129 dir=0; //direccion hacia la derecha
aitor98 0:92bf762d49fa 130 step=1; // avanzar
aitor98 0:92bf762d49fa 131 wait_us(100);
aitor98 0:92bf762d49fa 132 step=0;
aitor98 0:92bf762d49fa 133 wait_us(900);
aitor98 0:92bf762d49fa 134 pc.printf("Estado: Moviendo izquierda1\n");
aitor98 0:92bf762d49fa 135 gOled.printf("Transportando\n");
aitor98 0:92bf762d49fa 136 } else {
aitor98 0:92bf762d49fa 137 enable=0;
aitor98 0:92bf762d49fa 138 estado=centro;
aitor98 0:92bf762d49fa 139 gOled.clearDisplay();
aitor98 0:92bf762d49fa 140 }
aitor98 0:92bf762d49fa 141 }
aitor98 0:92bf762d49fa 142
aitor98 0:92bf762d49fa 143
aitor98 0:92bf762d49fa 144 void estadocentro()
aitor98 0:92bf762d49fa 145 {
aitor98 0:92bf762d49fa 146 {
aitor98 0:92bf762d49fa 147 if(bt.readable()) { //Mira si hay algun dato pendiente en el bt
aitor98 0:92bf762d49fa 148 dato=bt.getc(); //Lee un caracter del bt
aitor98 0:92bf762d49fa 149
aitor98 0:92bf762d49fa 150 }
aitor98 0:92bf762d49fa 151 if (dato=='2') { //Si el dato es un 1 comienza el proceso
aitor98 0:92bf762d49fa 152
aitor98 0:92bf762d49fa 153 estado = movder;
aitor98 0:92bf762d49fa 154 gOled.printf("Pieza incorrecta\n");
aitor98 0:92bf762d49fa 155
aitor98 0:92bf762d49fa 156 } else if(dato=='3') { //Si el dato es una b enciende el led
aitor98 0:92bf762d49fa 157
aitor98 0:92bf762d49fa 158 estado = movizq2;
aitor98 0:92bf762d49fa 159 gOled.printf("Pieza correcta\n");
aitor98 0:92bf762d49fa 160 }
aitor98 0:92bf762d49fa 161 }
aitor98 0:92bf762d49fa 162 }
aitor98 0:92bf762d49fa 163
aitor98 0:92bf762d49fa 164 void estadomovizq2()
aitor98 0:92bf762d49fa 165 {
aitor98 0:92bf762d49fa 166 if(final2==0) {
aitor98 0:92bf762d49fa 167 enable=1; //activar el motor
aitor98 0:92bf762d49fa 168 dir=1; //direccion hacia la derecha
aitor98 0:92bf762d49fa 169 step=1; // avanzar
aitor98 0:92bf762d49fa 170 wait_us(100);
aitor98 0:92bf762d49fa 171 step=0;
aitor98 0:92bf762d49fa 172 wait_us(900);
aitor98 0:92bf762d49fa 173 pc.printf("Estado: Moviendo izquierda2\n");
aitor98 0:92bf762d49fa 174 gOled.printf("Transportando\n");
aitor98 0:92bf762d49fa 175 } else {
aitor98 0:92bf762d49fa 176 enable=0;
aitor98 0:92bf762d49fa 177 estado=soplado;
aitor98 0:92bf762d49fa 178 gOled.clearDisplay();
aitor98 0:92bf762d49fa 179 }
aitor98 0:92bf762d49fa 180 }
aitor98 0:92bf762d49fa 181
aitor98 0:92bf762d49fa 182 void estadosoplado()
aitor98 0:92bf762d49fa 183 {
aitor98 0:92bf762d49fa 184
aitor98 0:92bf762d49fa 185 dirAMotor=0;
aitor98 0:92bf762d49fa 186 pc.printf("Soplando pieza");
aitor98 0:92bf762d49fa 187 gOled.printf("Soplando");
aitor98 0:92bf762d49fa 188 wait(5);
aitor98 0:92bf762d49fa 189 estado=inicio;
aitor98 0:92bf762d49fa 190
aitor98 0:92bf762d49fa 191 }
aitor98 0:92bf762d49fa 192
aitor98 0:92bf762d49fa 193
aitor98 0:92bf762d49fa 194
aitor98 0:92bf762d49fa 195 int main()
aitor98 0:92bf762d49fa 196 {
aitor98 0:92bf762d49fa 197 pc.baud(115200);
aitor98 0:92bf762d49fa 198 estado = inicio;
aitor98 0:92bf762d49fa 199 gOled.begin();
aitor98 0:92bf762d49fa 200 gOled.clearDisplay();
aitor98 0:92bf762d49fa 201
aitor98 0:92bf762d49fa 202 repeticion.attach(&medir_corriente, 5.0); //Medir la intensidad cada tres segundos
aitor98 0:92bf762d49fa 203
aitor98 0:92bf762d49fa 204
aitor98 0:92bf762d49fa 205 while(1) {
aitor98 0:92bf762d49fa 206 switch (estado) {
aitor98 0:92bf762d49fa 207 case inicio:
aitor98 0:92bf762d49fa 208 estadoinicio();
aitor98 0:92bf762d49fa 209 break;
aitor98 0:92bf762d49fa 210 case movder:
aitor98 0:92bf762d49fa 211 estadomovderecha();
aitor98 0:92bf762d49fa 212 break;
aitor98 0:92bf762d49fa 213 case calentar:
aitor98 0:92bf762d49fa 214 estadocalentar();
aitor98 0:92bf762d49fa 215 break;
aitor98 0:92bf762d49fa 216 case movizq1:
aitor98 0:92bf762d49fa 217 estadomovizq1();
aitor98 0:92bf762d49fa 218 break;
aitor98 0:92bf762d49fa 219 case centro:
aitor98 0:92bf762d49fa 220 estadocentro();
aitor98 0:92bf762d49fa 221 break;
aitor98 0:92bf762d49fa 222 case movizq2:
aitor98 0:92bf762d49fa 223 estadomovizq2();
aitor98 0:92bf762d49fa 224 break;
aitor98 0:92bf762d49fa 225 case soplado:
aitor98 0:92bf762d49fa 226 estadosoplado();
aitor98 0:92bf762d49fa 227 break;
aitor98 0:92bf762d49fa 228 default:
aitor98 0:92bf762d49fa 229 break;
aitor98 0:92bf762d49fa 230
aitor98 0:92bf762d49fa 231 }
aitor98 0:92bf762d49fa 232 }
aitor98 0:92bf762d49fa 233 }
aitor98 0:92bf762d49fa 234