demo versie 16/05

Dependencies:   EthernetInterface mbed-rto mbed

Fork of ProjectVLC by Klaas Govaerts

Committer:
albireo987
Date:
Wed Apr 25 09:27:31 2018 +0000
Revision:
12:1dc7dfe499fd
Parent:
10:7871aeacea08
prep multi thread driver;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
albireo987 2:36158325f7b0 1 #include "LEDDriver.h"
albireo987 9:c800045806f0 2
albireo987 10:7871aeacea08 3 LEDDriver::LEDDriver( int* sharedDirections, int sizeOfSharedDirections)
albireo987 2:36158325f7b0 4 {
albireo987 9:c800045806f0 5 static int messageList[8]={0};
albireo987 10:7871aeacea08 6 static DigitalOut leds[]={DigitalOut(p23),DigitalOut(p11),DigitalOut(p12),DigitalOut(p13),DigitalOut(p14),DigitalOut(p15),DigitalOut(p16),DigitalOut(p17)};
albireo987 2:36158325f7b0 7 this->copy=Copy();
albireo987 2:36158325f7b0 8 this->messageList=messageList;
albireo987 2:36158325f7b0 9 this->leds=leds;
albireo987 9:c800045806f0 10 copy.copyInt((directions),sharedDirections,sizeOfSharedDirections);
albireo987 2:36158325f7b0 11 }
albireo987 2:36158325f7b0 12
albireo987 10:7871aeacea08 13 void LEDDriver::determineMessage(int directionValue,int led)
albireo987 2:36158325f7b0 14 {
albireo987 9:c800045806f0 15 if(directionValue==0)
albireo987 9:c800045806f0 16 {
albireo987 9:c800045806f0 17 messageList[led]=0;
albireo987 9:c800045806f0 18 }
albireo987 9:c800045806f0 19 else if(directionValue==1)
albireo987 9:c800045806f0 20 {
albireo987 9:c800045806f0 21 messageList[led]=1;
albireo987 9:c800045806f0 22 }
albireo987 9:c800045806f0 23 else if(directionValue==2)
albireo987 9:c800045806f0 24 {
albireo987 9:c800045806f0 25 messageList[led]=2;
albireo987 9:c800045806f0 26 }
albireo987 9:c800045806f0 27 else if(directionValue==3)
albireo987 9:c800045806f0 28 {
albireo987 9:c800045806f0 29 messageList[led]=3;
albireo987 9:c800045806f0 30 }
albireo987 12:1dc7dfe499fd 31 else if(directionValue==4)
albireo987 12:1dc7dfe499fd 32 {
albireo987 12:1dc7dfe499fd 33 messageList[led]=4;
albireo987 12:1dc7dfe499fd 34 }
albireo987 2:36158325f7b0 35 }
albireo987 2:36158325f7b0 36
albireo987 2:36158325f7b0 37 int LEDDriver::getDirection(int id)
albireo987 2:36158325f7b0 38 {
albireo987 9:c800045806f0 39 int direction= directions[id];
albireo987 2:36158325f7b0 40 return direction;
albireo987 2:36158325f7b0 41 }
albireo987 2:36158325f7b0 42
albireo987 2:36158325f7b0 43 void LEDDriver::drive(int numberOfLeds)
albireo987 2:36158325f7b0 44 {
albireo987 12:1dc7dfe499fd 45 determineAll(numberOfLeds);//needs to be removed after multithreading
albireo987 12:1dc7dfe499fd 46 // 1 1 1 1 0 0 0 0 0 1 links
albireo987 10:7871aeacea08 47 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)
albireo987 12:1dc7dfe499fd 48 // 1 1 1 1 0 1 0 0 0 1 rechts
albireo987 9:c800045806f0 49 static int codedMessage1[]={1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,1,0};
albireo987 12:1dc7dfe499fd 50 // 1 1 1 1 1 0 1 0 0 1 rechtdoor
albireo987 9:c800045806f0 51 static int codedMessage2[]={1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0};
albireo987 12:1dc7dfe499fd 52 // 1 1 1 1 1 1 0 0 0 1 achteruit
albireo987 9:c800045806f0 53 static int codedMessage3[]={1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,0};
albireo987 12:1dc7dfe499fd 54 static int codedMessage4[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; //default if no directions are received yet
albireo987 10:7871aeacea08 55 while(true)
albireo987 2:36158325f7b0 56 {
albireo987 12:1dc7dfe499fd 57 // determineAll(numberOfLeds); prep for multithreading
albireo987 9:c800045806f0 58 for(int j=0;j<20;j++)
albireo987 9:c800045806f0 59 {
albireo987 9:c800045806f0 60 for(int i =0;i<numberOfLeds;i++)
albireo987 9:c800045806f0 61 {
albireo987 9:c800045806f0 62 if(messageList[i]==0)
albireo987 9:c800045806f0 63 {
albireo987 9:c800045806f0 64 leds[i].write(codedMessage0[j]);
albireo987 10:7871aeacea08 65 ownWait(10);//100=708 HZ 10 = 7.08 kHZ
albireo987 10:7871aeacea08 66 }
albireo987 9:c800045806f0 67 else if(messageList[i]==1)
albireo987 9:c800045806f0 68 {
albireo987 9:c800045806f0 69 leds[i].write(codedMessage1[j]);
albireo987 10:7871aeacea08 70 ownWait(10);
albireo987 9:c800045806f0 71 }
albireo987 9:c800045806f0 72 else if(messageList[i]==2)
albireo987 9:c800045806f0 73 {
albireo987 9:c800045806f0 74 leds[i].write(codedMessage2[j]);
albireo987 10:7871aeacea08 75 ownWait(10);
albireo987 9:c800045806f0 76 }
albireo987 9:c800045806f0 77 else if(messageList[i]==3)
albireo987 9:c800045806f0 78 {
albireo987 9:c800045806f0 79 leds[i].write(codedMessage3[j]);
albireo987 10:7871aeacea08 80 ownWait(10);
albireo987 9:c800045806f0 81 }
albireo987 12:1dc7dfe499fd 82 else if(messageList[i]==4)
albireo987 12:1dc7dfe499fd 83 {
albireo987 12:1dc7dfe499fd 84 leds[i].write(codedMessage4[j]);
albireo987 12:1dc7dfe499fd 85 ownWait(10);
albireo987 12:1dc7dfe499fd 86 }
albireo987 9:c800045806f0 87 }
albireo987 9:c800045806f0 88 }
albireo987 9:c800045806f0 89 }
albireo987 2:36158325f7b0 90 }
albireo987 2:36158325f7b0 91
albireo987 2:36158325f7b0 92 void LEDDriver::run(int numberOfLeds)
albireo987 2:36158325f7b0 93 {
albireo987 2:36158325f7b0 94 drive(numberOfLeds);
albireo987 2:36158325f7b0 95 }
albireo987 2:36158325f7b0 96
albireo987 12:1dc7dfe499fd 97 void LEDDriver::determineAll(int numberOfLeds)
albireo987 2:36158325f7b0 98 {
albireo987 2:36158325f7b0 99 for(int i = 0;i<numberOfLeds;i++)
albireo987 2:36158325f7b0 100 {
albireo987 10:7871aeacea08 101 determineMessage(getDirection(i),i);
albireo987 2:36158325f7b0 102 }
albireo987 10:7871aeacea08 103 }
albireo987 10:7871aeacea08 104
albireo987 10:7871aeacea08 105 void LEDDriver::ownWait(uint32_t us)
albireo987 10:7871aeacea08 106 {
albireo987 10:7871aeacea08 107 for(uint32_t i=0;i<us;i++)
albireo987 10:7871aeacea08 108 {
albireo987 10:7871aeacea08 109 for(volatile uint32_t j =0; j <96;j++)
albireo987 10:7871aeacea08 110 {
albireo987 10:7871aeacea08 111
albireo987 10:7871aeacea08 112 }
albireo987 10:7871aeacea08 113 }
albireo987 2:36158325f7b0 114 }