Cambios

Dependencies:   mbed Adafruit_GFX SeeedShieldBot BluetoothSerial

Committer:
arturodeusto
Date:
Tue Dec 22 11:02:59 2020 +0000
Revision:
5:e3fe2afec9b6
Parent:
4:5182de07691c
final

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