Electronica / Mbed OS Proyecto2

Dependencies:   Adafruit_GFX

main.cpp

Committer:
agat
Date:
2021-12-15
Revision:
2:fd3b989cedcd
Parent:
1:1d515eb7abf3
Child:
3:3fbadf6c492f

File content as of revision 2:fd3b989cedcd:

#include "mbed.h"
#include "math.h"
#include "Adafruit_SSD1306.h"

//#include "hcsr04.h"
class I2CPreInit : public I2C
{
public:
    I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
    {
        frequency(100000);
        start();
    };
};

I2CPreInit gI2C(PB_9,PB_8);

// an SPI sub-class that provides a constructed default

Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128);
Serial pc(USBTX, USBRX); // tx, rx
Ticker tickerMideDistancia;
Ticker visualTemp;
unsigned distancia=1000;

AnalogIn senal(A0);
DigitalIn final1(D9);
DigitalIn final2(D10);
DigitalOut step(D2);
DigitalOut dir(A4);
DigitalOut enableMotor(D11);
DigitalIn boton_inicial(D3);
DigitalOut dirAMotor(D4);//M121
PwmOut     dirBMotor(D5);//M121
DigitalOut rele(D6);//Rcal

//InterruptIn encoderA(A2);

Timer t;

float temperatura;

enum estados {reset, apagado, encendido, motorpalante,atras, estatico };
estados estado;

//HCSR04  usensor(D7,D8); //(PinName TrigPin,PinName EchoPin):
void paso(int d)
{
    dir=d;
    step=1;
    wait_us(100);
    step=0;
    wait_us(900);
}
void estadoreset()
{
    if (final1!=1) {
        enableMotor=1;
        paso(0);
    } else if (final1 ==1) {
        estado = apagado;
        enableMotor =0;
    }
}

void estadoapagado()
{
    if (boton_inicial==1) {
        enableMotor=1;
        estado= motorpalante;
        t.reset();
    }
}

/*void estadoencendido()
{
    if (boton_inicial==0) {
        paso(1);
        estado = motorpalante;

    }
}*/

void estadomotorpalante()
{
//if (final2)
    if (boton_inicial==0&&final2==0) {
        
        paso(1);

        dirAMotor=1;
        rele =1;

    } else if (final2==1) {
        int tiempo=t.read();
        
        //pc.printf("La temperatura es de %.4f\n",temperatura);
        gOled.clearDisplay();
        gOled.printf("La temperatura es de %.4f\n",temperatura);
        gOled.display();
        gOled.setTextCursor(0,0);
    
       // pc.printf("El tiempo transcurrido es de %d\n",tiempo);
        //pc.printf("La temperatura es de %.4f\n",temperatura);
        //dirAMotor=0;
        wait(2.0);
        //enableMotor=0;
        //rele=0;

        //if (final2==1) {
            estado=atras;
        //}
        //Print en pantalla con el Oled.
    }
}

void estadoatras()
{
    if (final2!=1 && boton_inicial==1 && final1!=1) {
        enableMotor=0;
        rele=0;
        dirAMotor=0;
        estado= estatico;
    } else if (final1 ==1) {
        estado = motorpalante;
    } else {
        paso(0);
    }
}

void muestraTemp()
{
    pc.printf("La temperatura es de %.4f\n",temperatura);
    gOled.clearDisplay();
    gOled.printf("La temperatura es de %.4f\n",temperatura);
    gOled.display();
    gOled.setTextCursor(0,0);
}

void medir()
{
    float tension=senal.read()*3.3;
    float Rt= 100e3*((3.3-tension)/tension);
    temperatura = (3950/(log(Rt/100e3)+(3950/298)))-273.1;
}
int main()
{
    pc.baud(115200);
    gOled.begin();
    gOled.clearDisplay();
    gOled.printf("Hola");
    gOled.display();
    gOled.setTextCursor(0,0);
    //visualTemp.attach(&muestraTemp,1.0);
    //tickerMideDistancia.attach(&mideDistancia, 0.5);
    estado=reset;
    step=1;
    enableMotor =1;
    pc.printf("Estado cerrada\n");
    t.start();
    while(1) {
        medir();
        //distancia=usensor.get_dist_cm();
        switch ( estado ) {

            case reset:
                estadoreset();
                pc.printf("Estado reset\n");
                break;
            case apagado:
                estadoapagado();
                pc.printf("Estado apagado\n");
                break;
            /* case encendido:
                 pc.printf("HOLI2");
                 estadoencendido();
                 break;*/
            case motorpalante:
                estadomotorpalante();
                pc.printf("Estado alante\n");
                break;
            case atras:
                estadoatras();
                pc.printf("Estado atras\n");
                break;
            case estatico:
                pc.printf("Estado estatico\n");
//estadoestatico();
                break;
                /*case cerrada:
                    estadoCerrada();
                    break;
                case abriendose:
                    estadoAbriendose();
                    break;
                case abierta:
                    estadoAbierta();
                    break;
                case cerrandose:
                    estadoCerrandose();
                    break;
                default:
                    break;
                }*/
        }
    }
}