Cambios

Dependencies:   mbed Adafruit_GFX SeeedShieldBot BluetoothSerial

Committer:
arturodeusto
Date:
Mon Dec 21 16:26:20 2020 +0000
Revision:
3:b33d698b0a5c
Parent:
2:8e21f1f358bc
Child:
4:5182de07691c
retoques

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
aitor98 0:92bf762d49fa 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 3:b33d698b0a5c 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 0:92bf762d49fa 33 InterruptIn 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 2:8e21f1f358bc 62 gOled.printf("Fabricando\n");
arturodeusto 3:b33d698b0a5c 63 bt.printf("Transportando a calentador\n");
aitor98 0:92bf762d49fa 64
aitor98 0:92bf762d49fa 65
arturodeusto 3:b33d698b0a5c 66 } else {
arturodeusto 3:b33d698b0a5c 67 bt.printf("Reposo\n"); //Si el dato es cualquier otra cosa no empieza a hacer nada
aitor98 0:92bf762d49fa 68 }
aitor98 0:92bf762d49fa 69 }
aitor98 0:92bf762d49fa 70 }
aitor98 0:92bf762d49fa 71
aitor98 0:92bf762d49fa 72
aitor98 0:92bf762d49fa 73 void estadomovderecha()
aitor98 0:92bf762d49fa 74 {
aitor98 0:92bf762d49fa 75 if(final1==0) {
aitor98 0:92bf762d49fa 76 enable=1; //activar el motor
aitor98 0:92bf762d49fa 77 dir=1; //direccion hacia la derecha
aitor98 0:92bf762d49fa 78 //step=1; // avanzar
aitor98 0:92bf762d49fa 79 step=1;
aitor98 0:92bf762d49fa 80 wait_us(100);
aitor98 0:92bf762d49fa 81 step=0;
aitor98 0:92bf762d49fa 82 wait_us(900);
aitor98 0:92bf762d49fa 83 } else {
aitor98 0:92bf762d49fa 84 enable=0;
aitor98 0:92bf762d49fa 85 estado=calentar;
arturodeusto 3:b33d698b0a5c 86
arturodeusto 1:035ceace4dc3 87 bt.printf("Calentando\n");
arturodeusto 1:035ceace4dc3 88
aitor98 0:92bf762d49fa 89 }
aitor98 0:92bf762d49fa 90 }
aitor98 0:92bf762d49fa 91
aitor98 0:92bf762d49fa 92 void estadocalentar()
aitor98 0:92bf762d49fa 93 {
aitor98 0:92bf762d49fa 94 float tension=Vout.read()*3.3;
aitor98 0:92bf762d49fa 95 //pc.printf("Valor voltios %.4f leido flat\n",tension);
aitor98 0:92bf762d49fa 96
aitor98 0:92bf762d49fa 97 float resistencia= ((3.3*100000.0)/tension)-100000.0;
aitor98 0:92bf762d49fa 98
arturodeusto 3:b33d698b0a5c 99 float temp= (3950.0/(log(resistencia/100000.0)+(3950.0/298.0))-273.0);
arturodeusto 1:035ceace4dc3 100 bt.printf("Calentando a: %.4f\n",temp);
arturodeusto 3:b33d698b0a5c 101
aitor98 0:92bf762d49fa 102
arturodeusto 3:b33d698b0a5c 103 if (temp<35.0) {
arturodeusto 3:b33d698b0a5c 104 rele=1;
aitor98 0:92bf762d49fa 105
aitor98 0:92bf762d49fa 106 } else {
aitor98 0:92bf762d49fa 107 rele=0;
aitor98 0:92bf762d49fa 108 estado=movizq1;
arturodeusto 3:b33d698b0a5c 109
arturodeusto 3:b33d698b0a5c 110 bt.printf("Transportando a revision\n");
aitor98 0:92bf762d49fa 111 }
aitor98 0:92bf762d49fa 112 }
aitor98 0:92bf762d49fa 113
aitor98 0:92bf762d49fa 114 void estadomovizq1()
aitor98 0:92bf762d49fa 115 {
aitor98 0:92bf762d49fa 116 unsigned int dist;
aitor98 0:92bf762d49fa 117 usensor.start();
arturodeusto 1:035ceace4dc3 118 wait(0.01);
aitor98 0:92bf762d49fa 119 dist=usensor.get_dist_cm();
aitor98 0:92bf762d49fa 120
aitor98 0:92bf762d49fa 121 if(dist>20) {
aitor98 0:92bf762d49fa 122 enable=1; //activar el motor
aitor98 0:92bf762d49fa 123 dir=0; //direccion hacia la derecha
aitor98 0:92bf762d49fa 124 step=1; // avanzar
aitor98 0:92bf762d49fa 125 wait_us(100);
aitor98 0:92bf762d49fa 126 step=0;
aitor98 0:92bf762d49fa 127 wait_us(900);
arturodeusto 1:035ceace4dc3 128
aitor98 0:92bf762d49fa 129 } else {
aitor98 0:92bf762d49fa 130 enable=0;
aitor98 0:92bf762d49fa 131 estado=centro;
arturodeusto 3:b33d698b0a5c 132
arturodeusto 3:b33d698b0a5c 133 bt.printf("Revisando\n");
aitor98 0:92bf762d49fa 134 }
aitor98 0:92bf762d49fa 135 }
aitor98 0:92bf762d49fa 136
aitor98 0:92bf762d49fa 137
aitor98 0:92bf762d49fa 138 void estadocentro()
aitor98 0:92bf762d49fa 139 {
aitor98 0:92bf762d49fa 140 {
aitor98 0:92bf762d49fa 141 if(bt.readable()) { //Mira si hay algun dato pendiente en el bt
aitor98 0:92bf762d49fa 142 dato=bt.getc(); //Lee un caracter del bt
aitor98 0:92bf762d49fa 143
aitor98 0:92bf762d49fa 144 }
aitor98 0:92bf762d49fa 145 if (dato=='2') { //Si el dato es un 1 comienza el proceso
aitor98 0:92bf762d49fa 146
aitor98 0:92bf762d49fa 147 estado = movder;
arturodeusto 3:b33d698b0a5c 148
arturodeusto 1:035ceace4dc3 149 bt.printf("Pieza incorrecta\n");
arturodeusto 3:b33d698b0a5c 150 bt.printf("Transportando a calentador\n");
arturodeusto 1:035ceace4dc3 151
aitor98 0:92bf762d49fa 152
aitor98 0:92bf762d49fa 153 } else if(dato=='3') { //Si el dato es una b enciende el led
aitor98 0:92bf762d49fa 154
aitor98 0:92bf762d49fa 155 estado = movizq2;
arturodeusto 3:b33d698b0a5c 156
arturodeusto 1:035ceace4dc3 157 bt.printf("Pieza correcta\n");
arturodeusto 3:b33d698b0a5c 158 bt.printf("Transportando a soplador\n");
aitor98 0:92bf762d49fa 159 }
aitor98 0:92bf762d49fa 160 }
aitor98 0:92bf762d49fa 161 }
aitor98 0:92bf762d49fa 162
aitor98 0:92bf762d49fa 163 void estadomovizq2()
aitor98 0:92bf762d49fa 164 {
aitor98 0:92bf762d49fa 165 if(final2==0) {
aitor98 0:92bf762d49fa 166 enable=1; //activar el motor
arturodeusto 1:035ceace4dc3 167 dir=0; //direccion hacia la derecha
aitor98 0:92bf762d49fa 168 step=1; // avanzar
aitor98 0:92bf762d49fa 169 wait_us(100);
aitor98 0:92bf762d49fa 170 step=0;
aitor98 0:92bf762d49fa 171 wait_us(900);
aitor98 0:92bf762d49fa 172 } else {
aitor98 0:92bf762d49fa 173 enable=0;
aitor98 0:92bf762d49fa 174 estado=soplado;
arturodeusto 3:b33d698b0a5c 175
arturodeusto 1:035ceace4dc3 176 bt.printf("Soplando\n");
aitor98 0:92bf762d49fa 177 }
aitor98 0:92bf762d49fa 178 }
aitor98 0:92bf762d49fa 179
aitor98 0:92bf762d49fa 180 void estadosoplado()
aitor98 0:92bf762d49fa 181 {
arturodeusto 1:035ceace4dc3 182 dirAMotor=0;
arturodeusto 1:035ceace4dc3 183 dirBMotor=1;
arturodeusto 3:b33d698b0a5c 184 wait(7);
aitor98 0:92bf762d49fa 185 dirAMotor=0;
arturodeusto 1:035ceace4dc3 186 dirBMotor=0;
aitor98 0:92bf762d49fa 187 estado=inicio;
arturodeusto 3:b33d698b0a5c 188
arturodeusto 2:8e21f1f358bc 189 gOled.printf("Reposo\n");
arturodeusto 1:035ceace4dc3 190 bt.printf("Reposo\n");
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 {
aitor98 0:92bf762d49fa 199 pc.baud(115200);
aitor98 0:92bf762d49fa 200 estado = inicio;
arturodeusto 2:8e21f1f358bc 201 gOled.begin();
aitor98 0:92bf762d49fa 202
arturodeusto 3:b33d698b0a5c 203 repeticion.attach(&medir_corriente, 10.0); //Medir la intensidad cada tres segundos
aitor98 0:92bf762d49fa 204
aitor98 0:92bf762d49fa 205
aitor98 0:92bf762d49fa 206 while(1) {
aitor98 0:92bf762d49fa 207 switch (estado) {
aitor98 0:92bf762d49fa 208 case inicio:
aitor98 0:92bf762d49fa 209 estadoinicio();
aitor98 0:92bf762d49fa 210 break;
aitor98 0:92bf762d49fa 211 case movder:
aitor98 0:92bf762d49fa 212 estadomovderecha();
aitor98 0:92bf762d49fa 213 break;
aitor98 0:92bf762d49fa 214 case calentar:
aitor98 0:92bf762d49fa 215 estadocalentar();
aitor98 0:92bf762d49fa 216 break;
aitor98 0:92bf762d49fa 217 case movizq1:
aitor98 0:92bf762d49fa 218 estadomovizq1();
aitor98 0:92bf762d49fa 219 break;
aitor98 0:92bf762d49fa 220 case centro:
aitor98 0:92bf762d49fa 221 estadocentro();
aitor98 0:92bf762d49fa 222 break;
aitor98 0:92bf762d49fa 223 case movizq2:
aitor98 0:92bf762d49fa 224 estadomovizq2();
aitor98 0:92bf762d49fa 225 break;
aitor98 0:92bf762d49fa 226 case soplado:
aitor98 0:92bf762d49fa 227 estadosoplado();
aitor98 0:92bf762d49fa 228 break;
aitor98 0:92bf762d49fa 229 default:
aitor98 0:92bf762d49fa 230 break;
aitor98 0:92bf762d49fa 231
aitor98 0:92bf762d49fa 232 }
aitor98 0:92bf762d49fa 233 }
aitor98 0:92bf762d49fa 234 }
aitor98 0:92bf762d49fa 235