![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
First version
Dependencies: mbed EthernetInterface mbed-rto
Diff: LEDDriver.cpp
- Revision:
- 32:537005b4a065
- Parent:
- 27:29948b116e82
- Child:
- 38:47c075a354b5
--- a/LEDDriver.cpp Wed Apr 25 14:51:18 2018 +0000 +++ b/LEDDriver.cpp Tue May 01 11:58:20 2018 +0000 @@ -1,45 +1,20 @@ #include "LEDDriver.h" -Serial pc(USBTX,USBRX); - -LEDDriver::LEDDriver( int* sharedDirections, int sizeOfSharedDirections) +Serial pc(USBTX,USBRX); +LEDDriver::LEDDriver( Queue<int,8>* queue) { - static int messageList[8]={0}; + static int messageList[8]={4,4,4,4,4,4,4,4}; static DigitalOut leds[]={DigitalOut(p23),DigitalOut(p11),DigitalOut(p12),DigitalOut(p13),DigitalOut(p14),DigitalOut(p15),DigitalOut(p16),DigitalOut(p17)}; - this->copy=Copy(); this->messageList=messageList; this->leds=leds; - copy.copyInt((directions),sharedDirections,sizeOfSharedDirections); -} - -void LEDDriver::determineMessage(int directionValue,int led) -{ - if(directionValue==0) - { - messageList[led]=0; - } - else if(directionValue==1) - { - messageList[led]=1; - } - else if(directionValue==2) - { - messageList[led]=2; - } - else if(directionValue==3) - { - messageList[led]=3; - } -} - -int LEDDriver::getDirection(int id) -{ - int direction= directions[id]; - return direction; + this->queue=queue;// prep for multithreaded + } void LEDDriver::drive(int numberOfLeds) { - encodeAll(numberOfLeds);// 1 1 1 1 0 0 0 0 0 1 + poll(numberOfLeds,1) ; + poll(numberOfLeds,2) ; + // 1 1 1 1 0 0 0 0 0 1 static int codedMessage0[]={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 static int codedMessage1[]={1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,1,0}; @@ -47,34 +22,41 @@ static int codedMessage2[]={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 static int codedMessage3[]={1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,0}; - while(true) - { + static int codedMessage4[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};//default message for multithreading + while(true) + { + poll(numberOfLeds,1) ;//prep multi for(int j=0;j<20;j++) - { - for(int i =0;i<numberOfLeds;i++) - { + { + for(int i =0;i<numberOfLeds;i++) + { if(messageList[i]==0) { leds[i].write(codedMessage0[j]); - ownWait(10);//100=708 HZ 10 = 7.08 kHZ - } + ownWait(1);//7.511kHZ + } else if(messageList[i]==1) { leds[i].write(codedMessage1[j]); - ownWait(10); + // ownWait(1); } else if(messageList[i]==2) { leds[i].write(codedMessage2[j]); - ownWait(10); + // ownWait(1); } else if(messageList[i]==3) { leds[i].write(codedMessage3[j]); - ownWait(10); + // ownWait(1); } - } - } + else if(messageList[i]==4) + { + leds[i].write(codedMessage4[j]); + // ownWait(1); + } + } + } } } @@ -83,14 +65,6 @@ drive(numberOfLeds); } -void LEDDriver::encodeAll(int numberOfLeds) -{ - for(int i = 0;i<numberOfLeds;i++) - { - determineMessage(getDirection(i),i); - } -} - void LEDDriver::ownWait(uint32_t us) { for(uint32_t i=0;i<us;i++) @@ -100,4 +74,32 @@ } } +} + +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==1||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==1||temp==1||temp==2||temp==3) + { + messageList[i]=temp; + } + } + } } \ No newline at end of file