demo versie 16/05

Dependencies:   EthernetInterface mbed-rto mbed

Fork of ProjectVLC by Klaas Govaerts

Revision:
25:4c673da1a3ae
Parent:
10:7871aeacea08
Child:
26:29948b116e82
diff -r d87a025e4fb6 -r 4c673da1a3ae LEDDriver.cpp
--- 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