Allans code

Dependencies:   RPG SerLCDv25 CascadedTLC5940 mbed

main.cpp

Committer:
Mach5
Date:
2013-04-05
Revision:
0:3f24fed55710

File content as of revision 0:3f24fed55710:

#include "mbed.h"
#include "TLC5940.h"
#include "SerLCDv25.h"
#include "RPG.h"

SPI spi (p5, NC, p7);//pin5 is sin/ nc/p7 is sclk
DigitalOut dcprg (p6);//see p10
DigitalOut xlat (p8);
DigitalOut blank (p9);
DigitalOut vprg (p10);//this might need to be swapped with dcprg cause pins may be backwards
 
SPI adcspi (NC, p12, p13);//adc
DigitalOut cs(p14);//chipselect
PwmOut gsclk (p21);//constantly gives clock to grey scale clock
Serial lcdspi(p28, NC);//do not need pin 27 
//Constructor(Channel A input pin, Channel B input pin, Pushbutton input pin)
RPG encoder1 (p27,p29,p30);//encoder top left 
RPG encoder2 (p26,p25,p24);//encoder middle right
//RPG encoder3 (p22,p23,p11);//Left connected to check batterylevels
AnalogIn vbatt(p20);//analog input span of 0 to check for battery levels
InterruptIn interpulsea(p22);
InterruptIn interpulseb(p23);
InterruptIn inter(p11);//pb interrupt

DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);


int ic_number = 3; //change depending on ics you have
unsigned short leds [48];//number of channels you will have 16*number of ics

BusOut mux(p15, p16, p17, p18);
//A0
//mux
//mux
//a3
DigitalOut muxenable(p19);
//EN
void startup(void);
void checkbattery(void);
void ledstartup(void);
void ledtest(void);




int main() //main start function =============================================================<<<<<<<<<<<<<<<<<<<<<<<<<
{

    startup();
    setup (spi, vprg, xlat, blank, dcprg, gsclk, ic_number);//setsup led
    ledstartup();//test all leds in sequence 0-15 in R then G then B 
    //padpush(15,0xf0,0x0f,0x01);
    led1 =0;
    led2 =0;
    led3 =0;
    led4 =0;
    inter.fall(&ledstartup);
    interpulsea.fall(&ledtest);
    interpulseb.fall(&ledtest);
    while(1) // MAIN LOOOP ====================================================================<<<<<<<<<<<<<<<<<<<
    {
      muxenable = 1;
      for (int m = 0; m <=0xf; m++)
      {
        mux = m;
        //if adc > something do something
      }
      padpush(0x0,0x10,0xff,0x01);
      led4=!led4;
      update_led (spi, xlat, blank, (unsigned short*)leds);
      
    

   // update_led (spi, xlat, blank, (unsigned short*)leds);

    }//endofwhile
}//endofmain










//LCD FUNCTIONS================================================================================

void clear(void) {//clear lcd display
    lcdspi.putc(0xFE);
    lcdspi.putc(0x01);
}
 

void move_cursor(int line, int pos) {//move to a certain part of the lcd
    int cp;
    cp = pos + (line * 64) +128;
    lcdspi.putc(0xFE);
    lcdspi.putc(cp);
}



//Allan's Functions ===================================================================
void startup(void)
{
    for (int a = 0; a<3;a++)
    {
        clear();
        move_cursor(0,0);
        lcdspi.printf("Initializing");
        wait(0.2);
        lcdspi.printf(".");
        wait(0.2);      
        lcdspi.printf(".");
        wait(0.2);
        lcdspi.printf(".");
        wait(0.2);
    }    
    checkbattery();//in initialize, check battery levels
}

void checkbattery(void)
{
    float batterylevel = vbatt*100;
    
    //Check Battery Levels
        led1 = (vbatt > 0.2) ? 1 : 0;
        led2 = (vbatt > 0.4) ? 1 : 0;
        led3 = (vbatt > 0.6) ? 1 : 0;
        led4 = (vbatt > 0.8) ? 1 : 0;
        if (vbatt< 0.2) {
            clear();
            move_cursor(0,0);
            lcdspi.printf("WARNING");
            move_cursor(1,0);
            lcdspi.printf("LOW BATTERY");
            wait(2);}
        else 
        {
            clear();
            move_cursor(0,0);
            lcdspi.printf("Battery Level");
            move_cursor(1,0);
            lcdspi.printf("      %.0f%%",batterylevel);}
            wait(2);
    
}
//CheckallLEDS on startup
void ledstartup(void)
{
    clear();
    move_cursor(0,0);
    lcdspi.printf("LED TEST");
    for (int t = 0; t<=48;t++) //will check all leds and colors R G B to ensure there are no shorts
    {
        clearall();
        leds[t] = 0xff;
        update_led (spi, xlat, blank, (unsigned short*)leds);
        wait(0.02);
        
    }
    clear();
}

void ledtest(void)
{
    
}


//TLC5940 Pushbutton Functions============================================
//Writes to 1 button and allows you to control 3 colours
//k = 0-15 indicates which button you want to select
//r g b = value between 0x0-0xff. 0xff = full brightness
void padpush (int k,int r,int g,int b)
{
    //k=0x1-0xfff    
    leds[k] = r;
    leds[k+16] = g;
    leds[k+32] = b;
}
//Turn all LEDS on pads off
void clearall(void)
{
    for (int i = 0; i<=(ic_number*16-1);i++)
    {
         leds [i] =0;
    }
}