demo versie 16/05

Dependencies:   EthernetInterface mbed-rto mbed

Fork of ProjectVLC by Klaas Govaerts

LEDDriver.cpp

Committer:
KlaasGovaerts
Date:
2018-05-09
Revision:
49:8fe84f455571
Parent:
47:2d877f01ca7b
Child:
50:c5cd73d93045

File content as of revision 49:8fe84f455571:

#include "LEDDriver.h" 
//Serial pc(USBTX,USBRX);
LEDDriver::LEDDriver( Queue<int,8>* queue)
{
    //this->messageList=messageList;
    //this->leds=leds;
    this->queue=queue;// prep for multithreaded
    printf("Queue created\r\n");
    initArrays();
    printf("Arrays initialised.\r\n");
    currentLocation=0;
}

void LEDDriver::drive(int numberOfLeds)
{
    if(currentLocation==0){
        poll(numberOfLeds,1);
        poll(numberOfLeds,2);
    }
    
    setLEDS(currentLocation);
    currentLocation++;
    if(currentLocation>=20){
        currentLocation=0;
    }
    
    /*
    Ticker ticker;    
    while(true)
    {   
        poll(numberOfLeds,1) ;//prep multi
        //for(int i =0;i<numberOfLeds;i++)
        //{
            //ticker.attach(this,&LEDDriver::sendData,0.000625f);
        //}   
        poll(numberOfLeds,2) ;
    }*/
}

void LEDDriver::run(Ticker* ticker)
{
    printf("ticker attached.\r\n");
    ticker->attach(this,&LEDDriver::drive8leds,1);//TODO faster
}

void LEDDriver::drive8leds(){
    printf("tick\r\n");//TODO
    drive(8);
}

void LEDDriver::ownWait(uint32_t us)
{
   for(uint32_t i=0;i<us;i++)
        {
            for(volatile uint32_t j =0; j <3;j++)
            {

            }
        }
}

void LEDDriver::poll(int numberOfLeds,int first)
{
    if(first==1)
    {
        for(int i =0;i<(numberOfLeds/2);i++)
        { 
            osEvent event = queue->get();
            int temp = *((int*)event.value.p);
            if(temp==0||temp==1||temp==2||temp==3)
            {
                messageList[i]=temp; 
            }     
        }       
    }        
    else if(first==2)
    {   
        for(int i =(numberOfLeds/2);i<(numberOfLeds);i++)
        { 
            osEvent event = queue->get();
            int temp = *((int*)event.value.p);
            if(temp==0||temp==1||temp==2||temp==3)
            {
                messageList[i]=temp; 
            }                     
        }  
    }    
}

void LEDDriver::initArrays()
{
                         //   1    1  1   1   0   0   0   0   0   1
    int tempCodedMessage0[20]={1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0};//{1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,0};  currently frequency measure message(standard square wave)
                            //    1   1   1  1  0   1     0  0   0   1 
    int tempCodedMessage1[20]={1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,1,0};
                            //    1   1   1  1  1   0     1  0   0   1
    int tempCodedMessage2[20]={1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0};
                            //   1   1   1   1   1   1   0  0    0   1  
    int tempCodedMessage3[20]={1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,0};
    int tempCodedMessage4[20]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};//default message for multithreading
    int tempMessageList[8]={0,0,0,0,0,0,0,0};//TODO
    DigitalOut tempLeds[]={DigitalOut(p23),DigitalOut(p11),DigitalOut(p12),DigitalOut(p13),DigitalOut(p14),DigitalOut(p15),DigitalOut(p16),DigitalOut(p17)};
    printf("Arrays created.\r\n");
    
    memcpy(codedMessage0,tempCodedMessage0,sizeof(codedMessage0));
    memcpy(codedMessage1,tempCodedMessage1,sizeof(codedMessage1));
    memcpy(codedMessage2,tempCodedMessage2,sizeof(codedMessage2));
    memcpy(codedMessage3,tempCodedMessage3,sizeof(codedMessage3));
    memcpy(codedMessage4,tempCodedMessage4,sizeof(codedMessage4));
    printf("First 5 arrays copied.\r\n");
    
    memcpy(messageList,tempMessageList,sizeof(messageList));
    printf("messageList array copied.\r\n");
    
    memcpy(leds,tempLeds,sizeof(leds));
    printf("LEDS array copied.\r\n");
}

void LEDDriver::setLEDS(int j){
    for(int led =0 ; led<8;led++)
        {
            if(messageList[led]==0)
            {
                leds[led].write(codedMessage0[j]);
                //ownWait(25);//100HZ
            }
            else if(messageList[led]==1)
            {
                leds[led].write(codedMessage1[j]);
                //ownWait(25);
            }
            else if(messageList[led]==2)
            {
                leds[led].write(codedMessage2[j]);
                //ownWait(25);
            }
            else if(messageList[led]==3)
            {
                leds[led].write(codedMessage3[j]);
                //ownWait(25);
            }
            else if(messageList[led]==4||messageList[led]==-1)
            {
                leds[led].write(codedMessage4[j]);
                //ownWait(25);
            }
        } 
}