Colour sensors calibrated
Dependencies: mbed-rtos mbed Servo QEI
Fork of ICRSEurobot13 by
Revision 12:d4b5851742a3, committed 2013-04-05
- Comitter:
- twighk
- Date:
- Fri Apr 05 21:49:23 2013 +0000
- Parent:
- 11:bbddc908c78c
- Child:
- 14:c638d4b9ee94
- Commit message:
- Printing Thread prints stuff
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Processes/Printing/Printing.cpp Fri Apr 05 21:49:23 2013 +0000 @@ -0,0 +1,85 @@ +#include "Printing.h" +#ifdef PRINTINGOFF +void printingThread(void const*){Thread::wait(osWaitForever);} +bool registerID(char, size_t){return true;} +bool unregisterID(char) {return true;} +bool updateval(char, float*, size_t){return true;} +bool updateval(char id, float value){return true;} +#else +#include <iostream> +using namespace std; + +size_t idlist[NUMIDS]; // Stores length of buffer 0 => unassigned +float* buffarr[NUMIDS]; +volatile unsigned int newdataflags; + +bool registerID(char id, size_t length) { + if (id < NUMIDS && !idlist[id]) {//check if the id is already taken + idlist[id] = length; + buffarr[id] = new float[length]; + return true; + } else + return false; +} +bool unregisterID(char id) { + if (id < NUMIDS) { + idlist[id] = 0; + if (buffarr[id]) + delete buffarr[id]; + return true; + } else + return false; +} + +bool updateval(char id, float* buffer, size_t length) { + //check if the id is registered, and has buffer of correct length + if (id < NUMIDS && idlist[id] == length && buffarr[id] && !(newdataflags & (1<<id))) { + for (size_t i = 0; i < length; i++) + buffarr[id][i] = buffer[i]; + newdataflags |= (1<<id); + return true; + } else + return false; +} + +bool updateval(char id, float value){ + //check if the id is registered, and the old value has been written + if (id < NUMIDS && idlist[id] == 1 && buffarr[id] && !(newdataflags & (1<<id))) { + buffarr[id][0] = value; + newdataflags |= (1<<id); + return true; + } else + return false; +} + +void printingThread(void const*){ + newdataflags = 0; + for (int i = 0; i < NUMIDS; i++) { + idlist[i] = 0; + buffarr[i] = 0; + } + + + Thread::wait(3500); + while(true){ + // Send number of packets + char numtosend = 0; + for (unsigned int v = newdataflags; v; numtosend++){v &= v - 1;} + cout.put(numtosend); + + // Send packets + for (char id = 0; id < NUMIDS; id++) { + if (newdataflags & (1<<id)) { + cout.put(id); + cout.write((char*)buffarr[id], idlist[id] * sizeof(float)); + newdataflags &= ~(1<<id); + } + } + cout << endl; + Thread::wait(200); + } +} +#endif + + + \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Processes/Printing/Printing.h Fri Apr 05 21:49:23 2013 +0000 @@ -0,0 +1,16 @@ + +// Eurobot13 Printing.h + +#include "mbed.h" +#include "rtos.h" + +const size_t NUMIDS = sizeof(unsigned int)*8; + +//Function to start in Thread +void printingThread(void const*); // + +//Functions to use +bool registerID(char id, size_t length); +bool unregisterID(char id); +bool updateval(char id, float* buffer, size_t length); +bool updateval(char id, float value);
--- a/main.cpp Fri Apr 05 17:47:06 2013 +0000 +++ b/main.cpp Fri Apr 05 21:49:23 2013 +0000 @@ -37,6 +37,7 @@ */ #include "mbed.h" +#include "rtos.h" Serial pc(USBTX, USBRX); const PinName P_SERVO_LOWER_ARM = p5; @@ -65,6 +66,7 @@ #include "Sensors/Encoders/Encoder.h" #include "Sensors/Colour/Colour.h" #include "Sensors/CakeSensor/CakeSensor.h" +#include "Processes/Printing/Printing.h" @@ -80,6 +82,8 @@ void ledphototransistortest(); void colourtest(); void cakesensortest(); +void printingtestthread(void const*); +void printingtestthread2(void const*); int main() { @@ -95,9 +99,43 @@ //motortestline(); //ledtest(); //phototransistortest(); - ledphototransistortest(); + //ledphototransistortest(); //colourtest(); // Red SnR too low - cakesensortest(); + //cakesensortest(); + DigitalOut l1(LED1); + Thread p(printingThread, NULL, osPriorityNormal, 2048); + l1=1; + Thread a(printingtestthread, NULL, osPriorityNormal, 1024); + Thread b(printingtestthread2, NULL, osPriorityNormal, 1024); + Thread::wait(osWaitForever); +} + +#include <cstdlib> +using namespace std; + +void printingtestthread(void const*){ + const char ID = 1; + float buffer[3] = {ID}; + registerID(ID,sizeof(buffer)/sizeof(buffer[0])); + while (true){ + for(size_t i = 1; i != sizeof(buffer)/sizeof(buffer[0]); ++i){ + buffer[i] =ID ; + } + updateval(ID, buffer, sizeof(buffer)/sizeof(buffer[0])); + Thread::wait(200); + } +} +void printingtestthread2(void const*){ + const char ID = 2; + float buffer[5] = {ID}; + registerID(ID,sizeof(buffer)/sizeof(buffer[0])); + while (true){ + for(size_t i = 1; i != sizeof(buffer)/sizeof(buffer[0]); ++i){ + buffer[i] = ID; + } + updateval(ID, buffer, sizeof(buffer)/sizeof(buffer[0])); + Thread::wait(500); + } } void cakesensortest(){
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Fri Apr 05 21:49:23 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#53e6cccd8782