Tuzo 5

Dependencies:   mbed-rtos mbed

Fork of Muestreo_Motor_CD_Tuzo_4 by PROCESAMIENTO_DIGITAL

main.cpp

Committer:
Sumobot
Date:
2017-11-10
Revision:
1:f7fb4980557c
Parent:
0:1c17e8f0fcc0
Child:
2:6bf21247bab4

File content as of revision 1:f7fb4980557c:

#include "mbed.h"
#include "rtos.h"

DigitalOut led1(LED1);
DigitalOut led2(LED2);
InterruptIn inter(p5);          //Se declara la variable de la interrupción
DigitalOut senal(p7);           //Se declara el pin el cual insertará la señal al pin de la interrupción
DigitalIn pulsos(p6);           //Pin en el cual se insertarán los pulsos del encoder.
DigitalOut senal1(p21);
DigitalIn opto(p23);
AnalogIn pot(p19);
DigitalOut prueba1(p10);
InterruptIn prueba2(p9);

Timer t;                        //Función que medirá el tiempo de operación
//Thread thread;
//Thread thread2;
//Thread thread3;
Thread thread4;              //Función que se ejecutará en paralelo al programa principal 
Thread thread5;
float velo=0, vRef=0, err=0, p=0, control=0, b, c, Control1=0;                     //Variable flotante en la cual se guardará la velocidad en rpm
int iteraciones=0;              //iteraciones=Variable que contará el número de pulsos

/*void Prueba() {
    senal1=1;
    wait(.0003);
    senal1=0;
    led2=!led2;
    }*/

void controlador() {               
    //Thread::wait(3000);
    while(1) {
    //prueba2.rise(&Prueba);
    }
}

void contador() {               //Función ejecutada por la interrupción inter, la cual es un contador para la variable iteración
    iteraciones=iteraciones+1;
}

void pruebas() {              
    while(1){
        senal=pulsos.read();    //se filtra la señal del encoder, para limpar el ruido.
        }
        }

void filtro() {              
    while(1){
        prueba1=opto.read();    //se filtra la señal del encoder, para limpar el ruido.
        }
}

void interr() {              
    inter.rise(&contador);      //Se declara la interrupción
}

/*void vel() {                                                    //Funcion Se convierte de iteraciones a rpmn vel, ejecutada por el hilo secundario
    while (1) {                                                 //Se ejecuta siempre
        t.reset();                                              //Se inicializa el timer
        Thread::wait(1000);                                     //Se espera 1 segundo
        printf("n vale:  %d\n\r", iteraciones);                 //Se imprime el número de iteraciones para monitorear
        velo= iteraciones*60*t.read();                          //Se convierte de iteraciones a rpm        
        printf("La velocidad en rpm es:  %f\n\r", velo);        //Se imprimen las rpm
        printf("El Pot es:  %f\n\r", pot.read());
        //printf("el tiempo es:  %f\n\r", t.read());            //Se imprime el tiempo de ejecución para monitorear
        iteraciones=0;                                          //Se comienza la cuenta de iteraciones de 0, para el siguiente ciclo
        }
    }*/
    
int main() {
    //vRef=600;                    //Hilo principal
    //t.start();                  //Se inicializa el timer    
    //thread.start(vel);          //Se inicializa el hilo secundario
    //thread2.start(filtro);
    //thread3.start(interr);
    thread4.start(controlador);
    thread5.start(filtro);
    
    while(1){
        led1=!led1;
            
    }  
        }
    //p=0.4295;
    /*while(1) {
    err= vRef-velo;
    control= p*err;             // Rango de error es de 0 a 1500; cuando el error es 1500 el angulo debe ser 
    if(err<0){
        led1=!led1;
        }
    if(err>1000){
        led2=!led2;
        }
    if(err>=0 && err<600){
        Control1=control/257.7;
        }
    if(err==600){
        
        }
    if(err>600 && err<1000){
        
        }  */