Mahm

Dependencies:   TextLCD mbed

main.cpp

Committer:
thaisbetina
Date:
2017-04-03
Revision:
0:a8a2492e2740

File content as of revision 0:a8a2492e2740:

#include "mbed.h"
#include "TextLCD.h"

DigitalOut myled(LED1);
DigitalIn UP (p11);
DigitalIn DOWN (p12);
DigitalIn ENTER (p13);
DigitalIn BACK (p14);
//DigitalIn B3 (p15);
//DigitalIn C3 (p16);
PwmOut pwm1 (p23);
PwmOut pwm2 (p22);
PwmOut pwm3 (p21);

TextLCD lcd(p5, p6, p7, p8, p9, p10, TextLCD::LCD20x4); // RS, E, D4-D7
 
DigitalIn sensor (p17);
DigitalIn sensor2 (p18);

Timer temporizador;
Timer temporizador2;

#define GAIN 5.0

 int US=0, US2=0,result=0, result2=0, ajusteM3=0, contador=0;
 float  tolup, toldown, processValue=0, old_rpm=0,erro=0,output,setPoint=0;
 float  tolup2, toldown2, processValue2=0, old_rpm2=0,erro2=0,output2,setPoint2=0;

int main() {
    
    int lastUP=0, lastDOWN=0, lastENTER=0, lastBACK=0; //ultimo B
    
    lcd.locate(2, 0);
    lcd.printf("MAHM COMPONENTES");
    lcd.locate(0, 1);
    lcd.printf("Dosador 1:      RPM");
    lcd.locate(0, 2);
    lcd.printf("Dosador 2:         ");
    lcd.locate(0, 3);
    lcd.printf("Espalhador:        ");
    

   
    pwm1.period_us(10000); 
    pwm1.pulsewidth_us(10000);
    pwm2.period_us(10000);
    pwm2.pulsewidth_us(10000); 
    pwm3.period_us(10000); 
    pwm3.pulsewidth_us(10000);
    
    result=0;
    processValue=0;
    old_rpm=0;
    US=sensor;
 
    result2=0;
    processValue2=0;
    old_rpm2=0;
    US2=sensor2;
    
    while(1)
    {   
    
        if ((ENTER==1) && (lastENTER==0))
        {
            contador++;
            if(contador >= 4) contador=1;
        }
        lastENTER = ENTER;
            
        if ((BACK==1) && (lastBACK==0))
        {
            contador--;
            if(contador <= 0) contador=3;
        }        
      lastBACK = BACK;
       
       if (contador == 1)
       { 
           /*Set Point dos Motores 1 e 2*/       
             if ((UP==1) && (lastUP==0))
           {
               if(setPoint<50) setPoint++;
           }
         lastUP=UP;

             if ((DOWN==1) && (lastDOWN==0))
           {
                 if(setPoint>0) setPoint--;
           }
         lastDOWN=DOWN;     
             
       }
       
        lcd.locate(11, 1);
        lcd.printf("%2.1f  ", setPoint);  
          
        if (contador == 2)
       {        
             if ((UP==1) && (lastUP==0))
           {
                if(setPoint2<50) setPoint2++;
           }
         lastUP=UP;
      
             if ((DOWN==1) && (lastDOWN==0))
           {
                if(setPoint2>0) setPoint2--;
           }     
         lastDOWN=DOWN; 
        }
        
        lcd.locate(11, 2);
        lcd.printf("%2.1f  ", setPoint2);
        
        
           if (contador == 3)
       {          
           /*Ajuste de 0 a 100% Motor 3*/
            if ((UP==1) && (lastUP==0))
          {
                if(ajusteM3<100) ajusteM3++;
                pwm3.pulsewidth_us((100-ajusteM3)*100);
          }
         lastUP=UP;
      
             if ((DOWN==1) && (lastDOWN==0))
           {
                if(ajusteM3>0) ajusteM3--;
                pwm3.pulsewidth_us((100-ajusteM3)*100);
           }
         lastDOWN=DOWN; 
      }       
        
        lcd.locate(12, 3);
        lcd.printf("%d%%  ", ajusteM3); 
        
        /*Process Value dos Motores 1 e 2*/              
        /*Motor 1*/
         if ((sensor==1) && (US==0)){ //borda de subida
                 temporizador.stop();         
                 result=temporizador.read_ms();
                 temporizador.reset();
                 temporizador.start();} 
                 
        US=sensor;
        
        if (temporizador.read_ms()>=1000){   //Verifica se o timer esta ligado
                temporizador.stop();
                temporizador.reset();
                result=0;}
         
         if (result!=0) processValue=60/(((float)result*12)/1000);    //Conversao para RPM
         else processValue=0;
        
         tolup=old_rpm+1;
         toldown=old_rpm-1;
              
      /*  lcd.locate(12, 3);
        
        if((processValue>toldown) && (processValue<tolup)){
                lcd.printf("%2.1f ",old_rpm);}
                
        else{ 
              lcd.printf("%2.1f ",processValue);
              old_rpm=processValue;}*/
        
        
        /*Motor 2*/
        if ((sensor2==1) && (US2==0)){ //borda de subida
                 temporizador2.stop();         
                 result2=temporizador2.read_ms();
                 temporizador2.reset();
                 temporizador2.start();} 
      
           US2=sensor2;
        
        if (temporizador2.read_ms()>=1000){ //Verifica se o timer esta ligado
                temporizador2.stop();
                temporizador2.reset();
                result2=0;}
         
         if (result2!=0) processValue2=60/(((float)result2*12)/1000);   //Conversao para RPM
         else processValue2=0;
     
         tolup2=old_rpm2+1;
         toldown2=old_rpm2-1;
              
        /* lcd.locate(17, 3);
        
        if((processValue2>toldown2) && (processValue2<tolup2)){
                lcd.printf("%2.1f ",old_rpm2);}
                
        else{ 
              lcd.printf("%2.1f ",processValue2);
              old_rpm2=processValue2;}*/
        
        /*Controle Proporcional Motor 1 e 2*/
        
        erro=setPoint-processValue;
        
        output+=erro*GAIN;
        if(output>10000)output=10000;
        if(output<0)output=0;
        float val = output;
        if(val < 2000)val=0;
        pwm1.pulsewidth_us(10000-val);    
        
        erro2=setPoint2-processValue2;
        
        output2+=erro2*GAIN;
        if(output2>10000)output2=10000;
        if(output2<0)output2=0;
        float val2 = output2;
        if(val2 < 2000)val2=0;
        pwm2.pulsewidth_us(10000-val2);  
    }
}