Program using Touch Sensor and PWM function. This code set a value of brightness in RGB led using Touch Sensor like a slider. The begining of touch is used to select a color. The end of touch is used to select an effect.

Dependencies:   MMA8451Q TSI mbed

Fork of FRDM_TSI by Subhrajit Mitra

main.cpp

Committer:
carlossell
Date:
2013-09-12
Revision:
6:343ba87cc6cf
Parent:
5:7f7b888f616b

File content as of revision 6:343ba87cc6cf:

#include "mbed.h"
#include "TSISensor.h"
//#include "MMA8451Q.h"

//#define MMA8451_I2C_ADDRESS (0x1d<<1)

int main(void) 
{
//    MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
    
    PwmOut led1(LED_BLUE);
    PwmOut led2(LED_GREEN);
    PwmOut led3(LED_RED);
    
    float tp = 0;
    //float tp_old = 0;
    float valor_ledR, valor_ledG, valor_ledB = 1.0;
    float valor_inicial, valor_final = 0.0;
    float offset = 0.0;
    float aux = 0.0;
    
    unsigned char led_atual = 0;
    unsigned char ajustando = 0;
    unsigned char efeito = 0;
    unsigned char blink = 0;
    
    TSISensor tsi; //inicializa rotinas do sensor de toque 
   
    led1 = 1.0; //desliga leds
    led2 = 1.0;
    led3 = 1.0;
    
    valor_ledB = led1;
    valor_ledG = led2;
    valor_ledR = led3;

    valor_inicial = 0.0;
    valor_final = 0.0;
        
    efeito = 0;
    
    while (1) 
    {   
        //tp  = (tsi.readPercentage()>0)?tsi.readPercentage():tp;
          
        tp = tsi.readDistance();  //take actual value of touch sensor
                  
        if (tp == 0)              //there is no touch
        {
            
            if(!ajustando)
            {
                valor_inicial = 0.0;
                valor_final = 0.0;
            }
            
            ajustando = 0;          //not adjusting
            
            if(led_atual)           //there is any color selected?
            {
                if(!efeito)
                {
                    led3 = valor_ledR;  //adjust red led 
                    led2 = valor_ledG;  //adjust green led
                    led1 = valor_ledB;  //adjust blue led
                }
            }
            else
            {
                led3 = led2 = led1 = 1.0;   //turn off all colors
            }
        }
          
        if(efeito)
        {
            if(led_atual)
            {
                if(efeito == 1)
                {
                    blink = ~blink;
                    if(blink)
                    {
                        led3 = valor_ledR;  //adjust red led 
                        led2 = valor_ledG;  //adjust green led
                        led1 = valor_ledB;  //adjust blue led
                    }
                    else
                    {
                        led3 = 1.0;  //adjust red led 
                        led2 = 1.0;  //adjust green led
                        led1 = 1.0;  //adjust blue led
                    }
                }
                if(efeito == 2)
                {
                    offset = offset +  0.02;
                    
                    if(offset > 1.0)
                    {
                        offset = 0.0;
                    }
                                            
                    if(valor_ledB < 1.0)
                    {
                        led1 = offset;
                    }
                    if(valor_ledG < 1.0)
                    {
                        led2 = offset;
                    }
                    if(valor_ledR < 1.0)
                    {
                        led3 = offset;
                    }    
                }
                
                if(efeito == 3)
                {
                    offset = offset -  0.02;
                    
                    if(offset < 0.0)
                    {
                        offset = 1.0;
                    }
                                            
                    if(valor_ledB < 1.0)
                    {
                        led1 = offset;
                    }
                    if(valor_ledG < 1.0)
                    {
                        led2 = offset;
                    }
                    if(valor_ledR < 1.0)
                    {
                        led3 = offset;
                    }
                }
                if(efeito == 4)
                {
                    offset = offset -  0.01;
                    
                    if(offset < 0.0)
                    {
                        offset = 1.0;
                    }
                                            
                    led1 = offset;
                    
                    aux = 1 - offset;
                    if(aux < 0.0)
                    {
                        aux = 0.0;
                    }
                    led2 = aux;
                    
                    aux = offset * 2;
                    if(aux > 1.0)
                    {
                        aux = 0.0; 
                    }
                    led3 = aux;
                    
                }
            }
            //wait(0.1);
        }
           
        if((tp > 0) & (tp < 5))   //the colors are select at begin of touch sensor
        {
            if(!ajustando)          //the adjust function is not activeted
            {
                led1 = 1.0;         //turn off all colors
                led2 = 1.0;
                led3 = 1.0;
            
                led_atual++;        //increment actual color selector
            
                if(led_atual > 7)   
                {
                    led_atual = 0;  //turn off leds
                }
                
                if(led_atual == 1)  //selected color is blue
                {
                    led1 = valor_ledB = 0.0;     //turn on blue led
                    led2 = valor_ledG = 1.0;
                    led3 = valor_ledR = 1.0;
                }
                
                if(led_atual == 2)  //selected color is green
                {
                    led1 = valor_ledB = 1.0;
                    led2 = valor_ledG = 0.0;     //turn on green led
                    led3 = valor_ledR = 1.0;
                }
                
                if(led_atual == 3)  //selected color is red
                {
                    led1 = valor_ledB = 1.0;
                    led2 = valor_ledG = 1.0;
                    led3 = valor_ledR = 0.0;     //turn on red led
                }
                
                if(led_atual == 4)
                {
                    led1 = valor_ledB = 0.0;     //turn on blue led and
                    led2 = valor_ledG = 0.0;     //turn on green led
                    led3 = valor_ledR = 1.0;
                }
                
                if(led_atual == 5)
                {
                    led1 = valor_ledB = 0.0;     //turn on blue led and
                    led2 = valor_ledG = 1.0;
                    led3 = valor_ledR = 0.0;     //turn on red led
                }
                
                if(led_atual == 6)
                {
                    led1 = valor_ledB = 1.0;
                    led2 = valor_ledG = 0.0;     //turn on green led
                    led3 = valor_ledR = 0.0;     //turn on red led
                }
                
                if(led_atual == 7)  // select color is white 
                {
                    led1 = valor_ledB = 0.0;     //turn on blue color
                    led2 = valor_ledG = 0.0;     //turn on green color
                    led3 = valor_ledR = 0.0;     //turn on red led
                }
                
                wait(0.5);          //show selected led to user
            }
        }
        
        if (tp > 35)              //superior side
        {
            if(!ajustando)
            {
                efeito++;
                if(efeito > 4)
                {
                    efeito = 0;
                }
            }
            //wait(0.5);
        }
         
        if((tp > 5))    //set the brightness of select color
        {
            if(!ajustando)
            {
                valor_inicial = tp;
            }
            
            ajustando = 1;  //adjusting is true
            
            valor_final = tp;
                
            //led1 = 1.0;     //take off all colors
            //led2 = 1.0;
            //led3 = 1.0;
                  
            if(led_atual == 1)  //selected color is blue
            {
                valor_ledB = valor_ledB + (valor_inicial - valor_final)/200;
                
                if(valor_ledB < 0.0)
                {
                    valor_ledB = 0.0;
                }
                
                if(valor_ledB > 1.0)
                {
                    valor_ledB = 1.0;    
                }
                
                //valor_ledB = (40.0 - tp)/40.0; 
                
                led1 = valor_ledB;          //put new value on blue led
                led2 = valor_ledG = 1.0;    //turn off
                led3 = valor_ledR = 1.0;    //turn off
            }
                
            if(led_atual == 2)  //selected color is green
            {
                //valor_ledG = (40.0 - tp)/40.0; 
                
                valor_ledG = valor_ledG + (valor_inicial - valor_final)/200;
                
                if(valor_ledG < 0.0)
                {
                    valor_ledG = 0.0;
                }
                
                if(valor_ledG > 1.0)
                {
                    valor_ledG = 1.0;    
                }
                
                led1 = valor_ledB = 1.0;    //turn off
                led2 = valor_ledG;          //put new value on green led
                led3 = valor_ledR = 1.0;    //turn off
            }
                
            if(led_atual == 3)  //selected color is red
            {
                //valor_ledR = (40.0 - tp)/40.0; 
                
                valor_ledR = valor_ledR + (valor_inicial - valor_final)/200;
                
                if(valor_ledR < 0.0)
                {
                    valor_ledR = 0.0;
                }
                
                if(valor_ledR > 1.0)
                {
                    valor_ledR = 1.0;    
                }
                
                led1 = valor_ledB = 1.0;    //turn off
                led2 = valor_ledG = 1.0;    //turn off
                led3 = valor_ledR;          //put new value on red led
            }
                
            if(led_atual == 4)
            {
                //valor_ledB = (40.0 - tp)/40.0;      
                
                valor_ledB = valor_ledB + (valor_inicial - valor_final)/200;
                
                if(valor_ledB < 0.0)
                {
                    valor_ledB = 0.0;
                }
                
                if(valor_ledB > 1.0)
                {
                    valor_ledB = 1.0;    
                }
                
                led1 = valor_ledB;                  //put new value on blue led
                led2 = valor_ledG = valor_ledB;     //put new value on green led
                led3 = valor_ledR = 1.0;            //turn off
            }
                
            if(led_atual == 5)
            {
                //valor_ledB = (40.0 - tp)/40.0;
                
                valor_ledB = valor_ledB + (valor_inicial - valor_final)/200;
                
                if(valor_ledB < 0.0)
                {
                    valor_ledB = 0.0;
                }
                
                if(valor_ledB > 1.0)
                {
                    valor_ledB = 1.0;    
                }
                
                led1 = valor_ledB;                  //put new value on blue led
                led2 = valor_ledG = 1.0;            //turn off
                led3 = valor_ledR = valor_ledB;     //put new value on red led
            }
                
            if(led_atual == 6)
            {
                //valor_ledG = (40.0 - tp)/40.0;
                
                valor_ledG = valor_ledG + (valor_inicial - valor_final)/200;
                
                if(valor_ledG < 0.0)
                {
                    valor_ledG = 0.0;
                }
                
                if(valor_ledG > 1.0)
                {
                    valor_ledG = 1.0;    
                }
                
                led1 = valor_ledB = 1.0;            //turn off
                led2 = valor_ledG;                  //put new value on green led
                led3 = valor_ledR = valor_ledG;     //put new value on red led
            }
                
            if(led_atual == 7)  // select color is white 
            {
                //valor_ledB = (40.0 - tp)/40.0;
                
                valor_ledB = valor_ledB + (valor_inicial - valor_final)/200;
                
                if(valor_ledB < 0.0)
                {
                    valor_ledB = 0.0;
                }
                
                if(valor_ledB > 1.0)
                {
                    valor_ledB = 1.0;    
                }
                
                led1 = valor_ledB;                  //put new value on blue led
                led2 = valor_ledG = valor_ledB;     //put new value on green led
                led3 = valor_ledR = valor_ledB;     //put new value on red led
            }
        }
         
        //led1 = (tsi.readPercentage()==0)?(1-abs(acc.getAccX())):((tp>0.00 && tp <= 0.33)?(1-(tp-0.00)*3):1);
        //led2 = (tsi.readPercentage()==0)?(1-abs(acc.getAccY())):((tp>=0.34 && tp <= 0.66)?(1-(tp-0.33)*3):1);
        //led3 = (tsi.readPercentage()==0)?(1-abs(acc.getAccZ())):((tp>=0.67 && tp <= 0.99)?(1-(tp-0.66)*3):1);
          
        wait(0.1);
    }
}