![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
demo versie 16/05
Dependencies: EthernetInterface mbed-rto mbed
Fork of ProjectVLC by
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); } } }