![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Cambios
Dependencies: mbed Adafruit_GFX SeeedShieldBot BluetoothSerial
main.cpp
- Committer:
- arturodeusto
- Date:
- 2020-12-21
- Revision:
- 2:8e21f1f358bc
- Parent:
- 1:035ceace4dc3
- Child:
- 3:b33d698b0a5c
File content as of revision 2:8e21f1f358bc:
#include "mbed.h" #include "hcsr04.h" #include "Adafruit_SSD1306.h" /*#include "estadomovder.h" #include "estadoinicio.h" #include "estadocalentar.h" #include "estadomovizq1.h" #include "estadocentro.h" #include "estadomovizq2.h" #include "estadosoplado.h"*/ class I2CPreInit : public I2C { public: I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl) { frequency(100000); start(); }; }; I2CPreInit gI2C(PB_9,PB_8); Serial pc(USBTX, USBRX); // tx, rx Serial bt(A5, A4); // tx, rx Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128); Ticker repeticion; DigitalOut led(LED1); DigitalOut step(D13); DigitalOut dir(D12); DigitalOut enable(D11); DigitalOut dirAMotor(D4); PwmOut dirBMotor(A3); InterruptIn encoderA(A2); DigitalOut rele(D3); HCSR04 usensor(D7,D8); DigitalIn final1(D9); InterruptIn final2(D10); AnalogIn Vout(A0); AnalogIn Aout(A1); enum estados {inicio,movder,calentar,movizq1,centro,movizq2,soplado}; estados estado; void medir_corriente() { float corriente=((Aout.read()*5)-2.5)/0.185; pc.printf("Intensidad medida = %.4f A \n", corriente); bt.printf("Intensidad medida = %.4f A \n", corriente); } int dato=0; void estadoinicio() { { if(bt.readable()) { //Mira si hay algun dato pendiente en el bt dato=bt.getc(); //Lee un caracter del bt } if (dato=='1') { //Si el dato es un 1 comienza el proceso estado = movder; gOled.printf("Fabricando\n"); bt.printf("Transportando\n"); } else { //Si el dato es cualquier otra cosa no empieza a hacer nada } } } void estadomovderecha() { if(final1==0) { enable=1; //activar el motor dir=1; //direccion hacia la derecha //step=1; // avanzar step=1; wait_us(100); step=0; wait_us(900); } else { enable=0; estado=calentar; //gOled.clearDisplay(); //gOled.printf("Calentando\n"); bt.printf("Calentando\n"); } } void estadocalentar() { rele=1; float tension=Vout.read()*3.3; //pc.printf("Valor voltios %.4f leido flat\n",tension); float resistencia= ((3.3*100000.0)/tension)-100000.0; float temp= 3950.0/(log(resistencia/100000.0)+(3950.0/298.0)); bt.printf("Calentando a: %.4f\n",temp); //gOled.printf("Calentando a: %.4f\n",temp); if (temp<308.0) { //rele.write(1); } else { rele=0; estado=movizq1; //gOled.clearDisplay(); //gOled.printf("Transportando\n"); bt.printf("Transportando\n"); } } void estadomovizq1() { unsigned int dist; usensor.start(); wait(0.01); dist=usensor.get_dist_cm(); if(dist>20) { enable=1; //activar el motor dir=0; //direccion hacia la derecha step=1; // avanzar wait_us(100); step=0; wait_us(900); } else { enable=0; estado=centro; //gOled.clearDisplay(); //gOled.printf("Comprobar\n"); bt.printf("Centro\n"); } } void estadocentro() { { if(bt.readable()) { //Mira si hay algun dato pendiente en el bt dato=bt.getc(); //Lee un caracter del bt } if (dato=='2') { //Si el dato es un 1 comienza el proceso estado = movder; //gOled.printf("Pieza incorrecta\n"); bt.printf("Pieza incorrecta\n"); } else if(dato=='3') { //Si el dato es una b enciende el led estado = movizq2; //gOled.printf("Pieza correcta\n"); bt.printf("Pieza correcta\n"); } } } void estadomovizq2() { if(final2==0) { enable=1; //activar el motor dir=0; //direccion hacia la derecha step=1; // avanzar wait_us(100); step=0; wait_us(900); } else { enable=0; estado=soplado; //gOled.clearDisplay(); //gOled.printf("Soplando\n"); bt.printf("Soplando\n"); } } void estadosoplado() { dirAMotor=0; dirBMotor=1; wait(5); dirAMotor=0; dirBMotor=0; estado=inicio; gOled.clearDisplay(); gOled.printf("Reposo\n"); bt.printf("Reposo\n"); } int main() { pc.baud(115200); estado = inicio; gOled.begin(); gOled.clearDisplay(); gOled.printf("Reposo\n"); bt.printf("Reposo\n"); repeticion.attach(&medir_corriente, 5.0); //Medir la intensidad cada tres segundos while(1) { switch (estado) { case inicio: estadoinicio(); break; case movder: estadomovderecha(); break; case calentar: estadocalentar(); break; case movizq1: estadomovizq1(); break; case centro: estadocentro(); break; case movizq2: estadomovizq2(); break; case soplado: estadosoplado(); break; default: break; } } }