First version

Dependencies:   mbed EthernetInterface mbed-rto

Committer:
albireo987
Date:
Tue May 01 11:58:20 2018 +0000
Revision:
32:537005b4a065
Parent:
27:29948b116e82
Child:
38:47c075a354b5
updated doc;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
albireo987 6:36158325f7b0 1 #include "LEDDriver.h"
albireo987 26:4c673da1a3ae 2 Serial pc(USBTX,USBRX);
albireo987 26:4c673da1a3ae 3 LEDDriver::LEDDriver( Queue<int,8>* queue)
albireo987 6:36158325f7b0 4 {
albireo987 26:4c673da1a3ae 5 static int messageList[8]={4,4,4,4,4,4,4,4};
albireo987 10:7871aeacea08 6 static DigitalOut leds[]={DigitalOut(p23),DigitalOut(p11),DigitalOut(p12),DigitalOut(p13),DigitalOut(p14),DigitalOut(p15),DigitalOut(p16),DigitalOut(p17)};
albireo987 6:36158325f7b0 7 this->messageList=messageList;
albireo987 6:36158325f7b0 8 this->leds=leds;
albireo987 26:4c673da1a3ae 9 this->queue=queue;// prep for multithreaded
albireo987 26:4c673da1a3ae 10
albireo987 6:36158325f7b0 11 }
albireo987 6:36158325f7b0 12
albireo987 6:36158325f7b0 13 void LEDDriver::drive(int numberOfLeds)
albireo987 6:36158325f7b0 14 {
albireo987 32:537005b4a065 15 poll(numberOfLeds,1) ;
albireo987 32:537005b4a065 16 poll(numberOfLeds,2) ;
albireo987 26:4c673da1a3ae 17 // 1 1 1 1 0 0 0 0 0 1
albireo987 10:7871aeacea08 18 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 9:c800045806f0 19 // 1 1 1 1 0 1 0 0 0 1
albireo987 9:c800045806f0 20 static int codedMessage1[]={1,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,1,0};
albireo987 9:c800045806f0 21 // 1 1 1 1 1 0 1 0 0 1
albireo987 9:c800045806f0 22 static int codedMessage2[]={1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0};
albireo987 9:c800045806f0 23 // 1 1 1 1 1 1 0 0 0 1
albireo987 9:c800045806f0 24 static int codedMessage3[]={1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,0};
albireo987 26:4c673da1a3ae 25 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
albireo987 32:537005b4a065 26 while(true)
albireo987 26:4c673da1a3ae 27 {
albireo987 27:29948b116e82 28 poll(numberOfLeds,1) ;//prep multi
albireo987 32:537005b4a065 29 for(int j=0;j<20;j++)
albireo987 27:29948b116e82 30 {
albireo987 27:29948b116e82 31 for(int i =0;i<numberOfLeds;i++)
albireo987 27:29948b116e82 32 {
albireo987 9:c800045806f0 33 if(messageList[i]==0)
albireo987 9:c800045806f0 34 {
albireo987 9:c800045806f0 35 leds[i].write(codedMessage0[j]);
albireo987 32:537005b4a065 36 ownWait(1);//7.511kHZ
albireo987 27:29948b116e82 37 }
albireo987 9:c800045806f0 38 else if(messageList[i]==1)
albireo987 9:c800045806f0 39 {
albireo987 9:c800045806f0 40 leds[i].write(codedMessage1[j]);
albireo987 27:29948b116e82 41 // ownWait(1);
albireo987 9:c800045806f0 42 }
albireo987 9:c800045806f0 43 else if(messageList[i]==2)
albireo987 9:c800045806f0 44 {
albireo987 9:c800045806f0 45 leds[i].write(codedMessage2[j]);
albireo987 27:29948b116e82 46 // ownWait(1);
albireo987 9:c800045806f0 47 }
albireo987 9:c800045806f0 48 else if(messageList[i]==3)
albireo987 9:c800045806f0 49 {
albireo987 9:c800045806f0 50 leds[i].write(codedMessage3[j]);
albireo987 27:29948b116e82 51 // ownWait(1);
albireo987 26:4c673da1a3ae 52 }
albireo987 26:4c673da1a3ae 53 else if(messageList[i]==4)
albireo987 26:4c673da1a3ae 54 {
albireo987 26:4c673da1a3ae 55 leds[i].write(codedMessage4[j]);
albireo987 27:29948b116e82 56 // ownWait(1);
albireo987 9:c800045806f0 57 }
albireo987 27:29948b116e82 58 }
albireo987 27:29948b116e82 59 }
albireo987 9:c800045806f0 60 }
albireo987 6:36158325f7b0 61 }
albireo987 6:36158325f7b0 62
albireo987 6:36158325f7b0 63 void LEDDriver::run(int numberOfLeds)
albireo987 6:36158325f7b0 64 {
albireo987 6:36158325f7b0 65 drive(numberOfLeds);
albireo987 6:36158325f7b0 66 }
albireo987 6:36158325f7b0 67
albireo987 10:7871aeacea08 68 void LEDDriver::ownWait(uint32_t us)
albireo987 10:7871aeacea08 69 {
albireo987 10:7871aeacea08 70 for(uint32_t i=0;i<us;i++)
albireo987 10:7871aeacea08 71 {
albireo987 10:7871aeacea08 72 for(volatile uint32_t j =0; j <96;j++)
albireo987 10:7871aeacea08 73 {
albireo987 10:7871aeacea08 74
albireo987 10:7871aeacea08 75 }
albireo987 10:7871aeacea08 76 }
albireo987 26:4c673da1a3ae 77 }
albireo987 26:4c673da1a3ae 78
albireo987 27:29948b116e82 79 void LEDDriver::poll(int numberOfLeds,int first)
albireo987 26:4c673da1a3ae 80 {
albireo987 27:29948b116e82 81 if(first==1)
albireo987 27:29948b116e82 82 {
albireo987 27:29948b116e82 83 for(int i =0;i<(numberOfLeds/2);i++)
albireo987 27:29948b116e82 84 {
albireo987 27:29948b116e82 85 osEvent event = queue->get();
albireo987 27:29948b116e82 86 int temp = *((int*)event.value.p);
albireo987 27:29948b116e82 87 if(temp==1||temp==1||temp==2||temp==3)
albireo987 27:29948b116e82 88 {
albireo987 27:29948b116e82 89 messageList[i]=temp;
albireo987 27:29948b116e82 90 }
albireo987 27:29948b116e82 91 }
albireo987 27:29948b116e82 92 }
albireo987 27:29948b116e82 93 else if(first==2)
albireo987 27:29948b116e82 94 {
albireo987 27:29948b116e82 95 for(int i =(numberOfLeds/2);i<(numberOfLeds);i++)
albireo987 27:29948b116e82 96 {
albireo987 27:29948b116e82 97 osEvent event = queue->get();
albireo987 27:29948b116e82 98 int temp = *((int*)event.value.p);
albireo987 27:29948b116e82 99 if(temp==1||temp==1||temp==2||temp==3)
albireo987 27:29948b116e82 100 {
albireo987 27:29948b116e82 101 messageList[i]=temp;
albireo987 27:29948b116e82 102 }
albireo987 27:29948b116e82 103 }
albireo987 32:537005b4a065 104 }
albireo987 6:36158325f7b0 105 }