![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
First version
Dependencies: mbed EthernetInterface mbed-rto
Diff: LEDDriver.cpp
- Revision:
- 26:4c673da1a3ae
- Parent:
- 10:7871aeacea08
- Child:
- 27:29948b116e82
--- a/LEDDriver.cpp Wed Apr 25 09:14:53 2018 +0000 +++ b/LEDDriver.cpp Wed Apr 25 13:17:55 2018 +0000 @@ -1,45 +1,18 @@ #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 + // 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,8 +20,10 @@ 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}; + 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) ;//prep multi for(int j=0;j<20;j++) { for(int i =0;i<numberOfLeds;i++) @@ -56,22 +31,27 @@ 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 +63,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 +72,17 @@ } } +} + +void LEDDriver::poll(int numberOfLeds) +{ + for(int i =0;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