demo versie 16/05

Dependencies:   EthernetInterface mbed-rto mbed

Fork of ProjectVLC by Klaas Govaerts

LEDDriver.cpp

Committer:
albireo987
Date:
2018-05-16
Revision:
80:dbda5092950e
Parent:
79:ebff08a66ff3

File content as of revision 80:dbda5092950e:

#include "LEDDriver.h" 
Serial pc(USBTX,USBRX);
LEDDriver::LEDDriver( Queue<int,8>* queue)
{
    this->queue=queue;
    initArrays();
    currentLocation=0;
    mask=16777216;
    codedMessage0=0x1F54AAD;//32852653;// 2796202 commented message is frequency measure message(standard square wave) 4:('1')+2 ticker 0.002f. (250Hz, 10ms down)
    codedMessage1=0x1F54CAD;//32853165
    codedMessage2=0x1F552AD;//32854701;
    codedMessage3=0x1F554AD;//32855213;
    codedMessage4=0;  
}

void LEDDriver::drive(int numberOfLeds)
{
    if(currentLocation>=25){
        currentLocation=0;
        mask = 16777216;
    }
    if(currentLocation==0){
        poll(numberOfLeds);
    }
    setLEDS(mask);
    mask=mask>>1;
    currentLocation++;
    
}

void LEDDriver::drive8leds(){
    drive(8);
}

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

void LEDDriver::initArrays()
{
    int tempMessageList[8]={4,4,4,4,4,4,4,4};
    DigitalOut *tempLeds[]={new DigitalOut(p11),new DigitalOut(p10),new DigitalOut(p12),new DigitalOut(p13),new DigitalOut(p14),new DigitalOut(p15),new DigitalOut(p16),new DigitalOut(p17)};
    
    memcpy(messageList,tempMessageList,sizeof(messageList));
    memcpy(leds,tempLeds,sizeof(leds));
}

void LEDDriver::setLEDS(int mask){
    for(int led =0 ; led<8;led++)
        {
            if(messageList[led]==0)
            {
               leds[led]->write(codedMessage0&mask);
            }
            else if(messageList[led]==1)
            {
               leds[led]->write(codedMessage1&mask);
            }
            else if(messageList[led]==2)
            {
                leds[led]->write((codedMessage2)&mask);
            }
            else if(messageList[led]==3)
            {
               leds[led]->write((codedMessage3)&mask);
            }
            else if(messageList[led]==4||messageList[led]==-1)
            {
             leds[led]->write((codedMessage4)&mask);
            }
        }
}

LEDDriver::~LEDDriver(){
    for(int i=0;i<8;i++){
        delete leds[i];    
    }
}