Code Demonstrate most of the feature of application board/ /like LED, Speaker,RGB,Joystick,LCD,POT,Accelerometer,temperature sensor/ /by using component of real time operating system such as Mutex, Threads/ Signals,Queue and Memory pool Video at https://www.youtube.com/watch?v=c0pRzfZGfV0

Dependencies:   C12832_lcd LCD_fonts LM75B MMA7660 MMA7660FC mbed-rtos mbed

Committer:
embeddednerd
Date:
Sun Nov 02 20:47:05 2014 +0000
Revision:
0:9641fb66f65a
First Version of code Demonstrate most of the hardware of app-board with use of RTOS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
embeddednerd 0:9641fb66f65a 1
embeddednerd 0:9641fb66f65a 2 /************Author embedded nerd**********************/
embeddednerd 0:9641fb66f65a 3 /*********www.embedded.zettamonk.com*******************/
embeddednerd 0:9641fb66f65a 4 /**************Free to use Lic************************/
embeddednerd 0:9641fb66f65a 5 /*************Date 28 Aug 2014***********************/
embeddednerd 0:9641fb66f65a 6 /* Code Demonstarte most of the feature of application board/
embeddednerd 0:9641fb66f65a 7 /like LED, Speaker,RGB,Joystick,LCD,POT,Accelomenter,temprature sensor/
embeddednerd 0:9641fb66f65a 8 /by using component of real time oprating system such as Mutex, Threads/
embeddednerd 0:9641fb66f65a 9 Signals,Queue and Memorypool//////////////////////////////////////////*/
embeddednerd 0:9641fb66f65a 10
embeddednerd 0:9641fb66f65a 11 /////////////////////////////////////////Header Files//////////////////////
embeddednerd 0:9641fb66f65a 12 #include "mbed.h"
embeddednerd 0:9641fb66f65a 13 #include "rtos.h" // real time os
embeddednerd 0:9641fb66f65a 14 #include "Small_6.h" // LCD
embeddednerd 0:9641fb66f65a 15 #include "Small_7.h" // LCD
embeddednerd 0:9641fb66f65a 16 #include "Arial_9.h" // LCD
embeddednerd 0:9641fb66f65a 17 #include "stdio.h"
embeddednerd 0:9641fb66f65a 18 #include "C12832_lcd.h" // LCD
embeddednerd 0:9641fb66f65a 19 #include "LM75B.h" // temprature
embeddednerd 0:9641fb66f65a 20 #include "MMA7660FC.h"
embeddednerd 0:9641fb66f65a 21 #include "MMA7660.h" // Axix
embeddednerd 0:9641fb66f65a 22 #include <string>
embeddednerd 0:9641fb66f65a 23 #define SET 1
embeddednerd 0:9641fb66f65a 24 #define RESET 0
embeddednerd 0:9641fb66f65a 25 #define ADDR_MMA7660 0x98 //// I2C SLAVE ADDR MMA7660FC
embeddednerd 0:9641fb66f65a 26
embeddednerd 0:9641fb66f65a 27
embeddednerd 0:9641fb66f65a 28 /****************************Defination and Object Creation*****************************/
embeddednerd 0:9641fb66f65a 29 C12832_LCD LCD; // LCD object
embeddednerd 0:9641fb66f65a 30 BusOut leds(LED1,LED2,LED3,LED4); // Led decration
embeddednerd 0:9641fb66f65a 31 AnalogIn Pot1(p19); // Analog pin name decration
embeddednerd 0:9641fb66f65a 32 AnalogIn Pot2(p20); // Analog pin name decration
embeddednerd 0:9641fb66f65a 33 BusIn Up(p15); //Joy stick
embeddednerd 0:9641fb66f65a 34 BusIn Down(p12); //Joy stick
embeddednerd 0:9641fb66f65a 35 BusIn Left(p13); //Joy stick
embeddednerd 0:9641fb66f65a 36 BusIn Right(p16); //Joy stick
embeddednerd 0:9641fb66f65a 37 BusOut Reset(p14); //Joy stick
embeddednerd 0:9641fb66f65a 38 PwmOut spkr(p26); //Speaker
embeddednerd 0:9641fb66f65a 39 PwmOut r (p23); //RGB red
embeddednerd 0:9641fb66f65a 40 PwmOut g (p24); //RGB green
embeddednerd 0:9641fb66f65a 41 PwmOut b (p25); // RGB blue
embeddednerd 0:9641fb66f65a 42 LM75B sensor(p28,p27); // I2c
embeddednerd 0:9641fb66f65a 43 MMA7660FC Acc(p28, p27, ADDR_MMA7660); //sda, scl, Addr
embeddednerd 0:9641fb66f65a 44 MMA7660 MMA(p28, p27);
embeddednerd 0:9641fb66f65a 45 /*****************************************************************************************/
embeddednerd 0:9641fb66f65a 46 //r.period(0);
embeddednerd 0:9641fb66f65a 47
embeddednerd 0:9641fb66f65a 48 // 0 1 2 3 4 5 6 7
embeddednerd 0:9641fb66f65a 49 const string display_menu[] = {" ","LED ","POT ","Temp ","Axix ","Spker","RGB ","POT2"}; // aray to display modules on LCD
embeddednerd 0:9641fb66f65a 50 unsigned char oprate_menu[] = {0, 0, 0, 0, 0, 0, 0, 0}; // Store Flags for module
embeddednerd 0:9641fb66f65a 51
embeddednerd 0:9641fb66f65a 52
embeddednerd 0:9641fb66f65a 53 typedef struct {
embeddednerd 0:9641fb66f65a 54 float voltage;
embeddednerd 0:9641fb66f65a 55 float current;
embeddednerd 0:9641fb66f65a 56 uint32_t counter;
embeddednerd 0:9641fb66f65a 57 } message_t;
embeddednerd 0:9641fb66f65a 58 MemoryPool<message_t, 16> mpool;
embeddednerd 0:9641fb66f65a 59 Queue<message_t, 16> queue;
embeddednerd 0:9641fb66f65a 60
embeddednerd 0:9641fb66f65a 61
embeddednerd 0:9641fb66f65a 62 //Mutex decleration of LCD
embeddednerd 0:9641fb66f65a 63 Mutex lcd_mutex;
embeddednerd 0:9641fb66f65a 64
embeddednerd 0:9641fb66f65a 65 // Semaphore Declearation of Calcualtion with two slots
embeddednerd 0:9641fb66f65a 66 Semaphore calculate(2);
embeddednerd 0:9641fb66f65a 67 int count= 0,menu = 0;
embeddednerd 0:9641fb66f65a 68 /*////////////////////// Thread led/////////////////////////
embeddednerd 0:9641fb66f65a 69 Input:
embeddednerd 0:9641fb66f65a 70 Output: LED
embeddednerd 0:9641fb66f65a 71 if module flag is set than it will turn led on from 0X00 to 0X0F
embeddednerd 0:9641fb66f65a 72 //////////////////////////////////////////////////////////*/
embeddednerd 0:9641fb66f65a 73 void led(void const *args)
embeddednerd 0:9641fb66f65a 74 {
embeddednerd 0:9641fb66f65a 75
embeddednerd 0:9641fb66f65a 76 char out =0;
embeddednerd 0:9641fb66f65a 77 while(true) { // thread loop
embeddednerd 0:9641fb66f65a 78 if (oprate_menu[1] == SET) // Checking flag for module
embeddednerd 0:9641fb66f65a 79 {
embeddednerd 0:9641fb66f65a 80 leds = out; // Turning LEd on
embeddednerd 0:9641fb66f65a 81 out++;
embeddednerd 0:9641fb66f65a 82 if(out>16) out = 0; // Reseting count
embeddednerd 0:9641fb66f65a 83 }
embeddednerd 0:9641fb66f65a 84 else leds = 0; // If flag not set than turn of the module
embeddednerd 0:9641fb66f65a 85 Thread::wait(100); // Thread wait .1s
embeddednerd 0:9641fb66f65a 86 }
embeddednerd 0:9641fb66f65a 87
embeddednerd 0:9641fb66f65a 88 } // thread close
embeddednerd 0:9641fb66f65a 89
embeddednerd 0:9641fb66f65a 90 /*////////////////////// Thread menu_sel/////////////////////////
embeddednerd 0:9641fb66f65a 91 Input: Joustick
embeddednerd 0:9641fb66f65a 92 Output: Set flag in oprate_menu
embeddednerd 0:9641fb66f65a 93 By using left right key user in enable to change module and by up
embeddednerd 0:9641fb66f65a 94 cown key user is able to set module on or off bye pressinf enter key
embeddednerd 0:9641fb66f65a 95 //////////////////////////////////////////////////////////*/
embeddednerd 0:9641fb66f65a 96 void menu_sel(void const *args)
embeddednerd 0:9641fb66f65a 97 {
embeddednerd 0:9641fb66f65a 98 int k;
embeddednerd 0:9641fb66f65a 99 while(true) { // thread loop
embeddednerd 0:9641fb66f65a 100 //LCD.locate(0,5);LCD.printf(" ");
embeddednerd 0:9641fb66f65a 101
embeddednerd 0:9641fb66f65a 102 LCD.set_font((unsigned char*) Small_7);
embeddednerd 0:9641fb66f65a 103 if (Left) // Checking keys
embeddednerd 0:9641fb66f65a 104 {
embeddednerd 0:9641fb66f65a 105 count = 0 ;
embeddednerd 0:9641fb66f65a 106 menu--; // manipulating menue number as per key response
embeddednerd 0:9641fb66f65a 107 if(menu<1){ menu = 7;} //
embeddednerd 0:9641fb66f65a 108 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 109 LCD.locate(50,10);
embeddednerd 0:9641fb66f65a 110 LCD.printf(" %s",display_menu[menu]); // displaying menue on LCD
embeddednerd 0:9641fb66f65a 111 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 112 wait(1);
embeddednerd 0:9641fb66f65a 113 }
embeddednerd 0:9641fb66f65a 114 if (Right)
embeddednerd 0:9641fb66f65a 115 {
embeddednerd 0:9641fb66f65a 116 count = 0 ;
embeddednerd 0:9641fb66f65a 117 menu++;
embeddednerd 0:9641fb66f65a 118 if(menu>7) {menu = 1;}
embeddednerd 0:9641fb66f65a 119
embeddednerd 0:9641fb66f65a 120 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 121 LCD.locate(50,10);
embeddednerd 0:9641fb66f65a 122 LCD.printf(" %s",display_menu[menu]);
embeddednerd 0:9641fb66f65a 123 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 124 wait(1);
embeddednerd 0:9641fb66f65a 125 //while(Right);
embeddednerd 0:9641fb66f65a 126 }
embeddednerd 0:9641fb66f65a 127 if(Up)
embeddednerd 0:9641fb66f65a 128 {
embeddednerd 0:9641fb66f65a 129 count = 1 ; // Manipulating flag as per selection from user
embeddednerd 0:9641fb66f65a 130 LCD.set_font((unsigned char*) Small_7);
embeddednerd 0:9641fb66f65a 131 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 132 LCD.locate(50,20);
embeddednerd 0:9641fb66f65a 133 LCD.printf(" ON ");
embeddednerd 0:9641fb66f65a 134 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 135 }
embeddednerd 0:9641fb66f65a 136 if(Down)
embeddednerd 0:9641fb66f65a 137 {
embeddednerd 0:9641fb66f65a 138 count = 0;
embeddednerd 0:9641fb66f65a 139 LCD.set_font((unsigned char*) Small_7);
embeddednerd 0:9641fb66f65a 140 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 141 LCD.locate(50,20);
embeddednerd 0:9641fb66f65a 142 LCD.printf(" OFF");
embeddednerd 0:9641fb66f65a 143 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 144 }
embeddednerd 0:9641fb66f65a 145 if (Reset)
embeddednerd 0:9641fb66f65a 146 {
embeddednerd 0:9641fb66f65a 147 LCD.set_font((unsigned char*) Small_7);
embeddednerd 0:9641fb66f65a 148 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 149 LCD.locate(50,20);
embeddednerd 0:9641fb66f65a 150 LCD.printf(" ");
embeddednerd 0:9641fb66f65a 151 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 152 oprate_menu[menu] = count;
embeddednerd 0:9641fb66f65a 153 //if menu = 1 thread.signal_set(0x1);
embeddednerd 0:9641fb66f65a 154 }
embeddednerd 0:9641fb66f65a 155
embeddednerd 0:9641fb66f65a 156 Thread::wait(10); // wait 0.5s
embeddednerd 0:9641fb66f65a 157 }
embeddednerd 0:9641fb66f65a 158 }
embeddednerd 0:9641fb66f65a 159
embeddednerd 0:9641fb66f65a 160
embeddednerd 0:9641fb66f65a 161 /*////////////////////// Thread spk/////////////////////////
embeddednerd 0:9641fb66f65a 162 Input:
embeddednerd 0:9641fb66f65a 163 Output: Turn on speaker on board
embeddednerd 0:9641fb66f65a 164 Turn on PWM on speaker pin for specific period of time
embeddednerd 0:9641fb66f65a 165 //////////////////////////////////////////////////////////*/
embeddednerd 0:9641fb66f65a 166 void spk(void const *args)
embeddednerd 0:9641fb66f65a 167 {
embeddednerd 0:9641fb66f65a 168 while (1) {
embeddednerd 0:9641fb66f65a 169 if (oprate_menu[5] == SET)
embeddednerd 0:9641fb66f65a 170 {
embeddednerd 0:9641fb66f65a 171 for (float i=2000.0; i<10000.0; i+=500) {
embeddednerd 0:9641fb66f65a 172 spkr.period(1.0/i);
embeddednerd 0:9641fb66f65a 173 spkr=0.5;
embeddednerd 0:9641fb66f65a 174 wait(0.1);}
embeddednerd 0:9641fb66f65a 175 }
embeddednerd 0:9641fb66f65a 176 else {spkr.period(0); spkr=0;}
embeddednerd 0:9641fb66f65a 177 Thread::wait(50);
embeddednerd 0:9641fb66f65a 178 }
embeddednerd 0:9641fb66f65a 179
embeddednerd 0:9641fb66f65a 180 }
embeddednerd 0:9641fb66f65a 181
embeddednerd 0:9641fb66f65a 182
embeddednerd 0:9641fb66f65a 183 /*////////////////////// Thread pot/////////////////////////
embeddednerd 0:9641fb66f65a 184 Input: Analog in
embeddednerd 0:9641fb66f65a 185 Output:
embeddednerd 0:9641fb66f65a 186 Read the analog value and manupulate it for further use
embeddednerd 0:9641fb66f65a 187 //////////////////////////////////////////////////////////*/
embeddednerd 0:9641fb66f65a 188 void pot(void const *args)
embeddednerd 0:9641fb66f65a 189 {
embeddednerd 0:9641fb66f65a 190 int k;
embeddednerd 0:9641fb66f65a 191 while(true) // thread loop
embeddednerd 0:9641fb66f65a 192 {
embeddednerd 0:9641fb66f65a 193 if (oprate_menu[2] == SET)
embeddednerd 0:9641fb66f65a 194 {
embeddednerd 0:9641fb66f65a 195 k = Pot1.read_u16(); // get the value of poti 2
embeddednerd 0:9641fb66f65a 196 k = k >> 5; // we need only 6 bit for contrast
embeddednerd 0:9641fb66f65a 197 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 198 LCD.set_font((unsigned char*) Small_6);
embeddednerd 0:9641fb66f65a 199 LCD.locate(0,10);
embeddednerd 0:9641fb66f65a 200 LCD.printf("Pot: %d",k);
embeddednerd 0:9641fb66f65a 201 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 202 //Thread::wait(500); // wait 0.5s
embeddednerd 0:9641fb66f65a 203 }
embeddednerd 0:9641fb66f65a 204 else
embeddednerd 0:9641fb66f65a 205 {
embeddednerd 0:9641fb66f65a 206 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 207 LCD.set_font((unsigned char*) Small_6);
embeddednerd 0:9641fb66f65a 208 LCD.locate(0,10);
embeddednerd 0:9641fb66f65a 209 LCD.printf(" ");
embeddednerd 0:9641fb66f65a 210 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 211 }
embeddednerd 0:9641fb66f65a 212 Thread::wait(50);
embeddednerd 0:9641fb66f65a 213 }
embeddednerd 0:9641fb66f65a 214 }
embeddednerd 0:9641fb66f65a 215 /*////////////////////// Thread pot/////////////////////////
embeddednerd 0:9641fb66f65a 216 Input:
embeddednerd 0:9641fb66f65a 217 Output: PWM output to RGB led Pin
embeddednerd 0:9641fb66f65a 218 Multicolor LED display diffrent colors as per PWM cycle in set
embeddednerd 0:9641fb66f65a 219 //////////////////////////////////////////////////////////*/
embeddednerd 0:9641fb66f65a 220 void rgb(void const *args)
embeddednerd 0:9641fb66f65a 221 {
embeddednerd 0:9641fb66f65a 222 while(1) {
embeddednerd 0:9641fb66f65a 223 if (oprate_menu[6] == SET)
embeddednerd 0:9641fb66f65a 224 {
embeddednerd 0:9641fb66f65a 225
embeddednerd 0:9641fb66f65a 226 r = 0.5 + (rand() % 11)/20.0;
embeddednerd 0:9641fb66f65a 227 g = 0.5 + (rand() % 11)/20.0;
embeddednerd 0:9641fb66f65a 228 b = 0.5 + (rand() % 11)/20.0;
embeddednerd 0:9641fb66f65a 229
embeddednerd 0:9641fb66f65a 230 }
embeddednerd 0:9641fb66f65a 231
embeddednerd 0:9641fb66f65a 232 else {r =.1;g=0;b=0;}
embeddednerd 0:9641fb66f65a 233 Thread::wait(500);
embeddednerd 0:9641fb66f65a 234 }
embeddednerd 0:9641fb66f65a 235 }
embeddednerd 0:9641fb66f65a 236
embeddednerd 0:9641fb66f65a 237 /*////////////////////// Thread temp/////////////////////////
embeddednerd 0:9641fb66f65a 238 Input:
embeddednerd 0:9641fb66f65a 239 Output: PWM output to RGB led Pin
embeddednerd 0:9641fb66f65a 240 Multicolor LED display diffrent colors as per PWM cycle in set
embeddednerd 0:9641fb66f65a 241 //////////////////////////////////////////////////////////*/
embeddednerd 0:9641fb66f65a 242
embeddednerd 0:9641fb66f65a 243 void temp(void const *args)
embeddednerd 0:9641fb66f65a 244 {
embeddednerd 0:9641fb66f65a 245
embeddednerd 0:9641fb66f65a 246 int k;
embeddednerd 0:9641fb66f65a 247 while(true) // thread loop
embeddednerd 0:9641fb66f65a 248 {
embeddednerd 0:9641fb66f65a 249 if (oprate_menu[3] == SET)
embeddednerd 0:9641fb66f65a 250 {
embeddednerd 0:9641fb66f65a 251 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 252 LCD.set_font((unsigned char*) Small_6);
embeddednerd 0:9641fb66f65a 253 LCD.locate(0,20);
embeddednerd 0:9641fb66f65a 254 LCD.printf("Temp:%.1f", (float)sensor);
embeddednerd 0:9641fb66f65a 255 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 256 Thread::wait(50);
embeddednerd 0:9641fb66f65a 257 }
embeddednerd 0:9641fb66f65a 258 else
embeddednerd 0:9641fb66f65a 259 {
embeddednerd 0:9641fb66f65a 260 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 261 LCD.set_font((unsigned char*) Small_6);
embeddednerd 0:9641fb66f65a 262 LCD.locate(0,20);
embeddednerd 0:9641fb66f65a 263 LCD.printf(" ");
embeddednerd 0:9641fb66f65a 264 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 265 Thread::wait(50);
embeddednerd 0:9641fb66f65a 266 }
embeddednerd 0:9641fb66f65a 267
embeddednerd 0:9641fb66f65a 268
embeddednerd 0:9641fb66f65a 269 Thread::wait(50); // wait 0.5s
embeddednerd 0:9641fb66f65a 270 }
embeddednerd 0:9641fb66f65a 271 }
embeddednerd 0:9641fb66f65a 272
embeddednerd 0:9641fb66f65a 273 /*////////////////////// Thread AXIX/////////////////////////
embeddednerd 0:9641fb66f65a 274 Input: I2C data
embeddednerd 0:9641fb66f65a 275 Output:
embeddednerd 0:9641fb66f65a 276 Draw a circle and a buble in it. Buble move with respond to
embeddednerd 0:9641fb66f65a 277 change in axix of board
embeddednerd 0:9641fb66f65a 278 //////////////////////////////////////////////////////////*/
embeddednerd 0:9641fb66f65a 279 void axix(void const *args)
embeddednerd 0:9641fb66f65a 280 {
embeddednerd 0:9641fb66f65a 281 // Acc.init();
embeddednerd 0:9641fb66f65a 282 float x=0, y=0, z=0;
embeddednerd 0:9641fb66f65a 283 while(1)
embeddednerd 0:9641fb66f65a 284 {
embeddednerd 0:9641fb66f65a 285 //int x=0,y=0;
embeddednerd 0:9641fb66f65a 286 if (oprate_menu[4] == SET)
embeddednerd 0:9641fb66f65a 287 {
embeddednerd 0:9641fb66f65a 288
embeddednerd 0:9641fb66f65a 289 Acc.read_Tilt(&x, &y, &z);
embeddednerd 0:9641fb66f65a 290 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 291 x = (x + MMA.x() * 32.0)/2.0;
embeddednerd 0:9641fb66f65a 292 y = (y -(MMA.y() * 16.0))/2.0;
embeddednerd 0:9641fb66f65a 293 // if(y>25) y = 0; //else if(y<0) y = 0;
embeddednerd 0:9641fb66f65a 294 if(y>8) y =8; if(y<-8) y =-8; if(x>8) x =8; if(x<-8) x =-8; // confining
embeddednerd 0:9641fb66f65a 295 LCD.fillcircle(x+115, y+17, 2, 1); //draw bubble
embeddednerd 0:9641fb66f65a 296 LCD.circle(115, 17, 8, 1);
embeddednerd 0:9641fb66f65a 297 wait(.1); //time delay
embeddednerd 0:9641fb66f65a 298 LCD.fillcircle(x+115, y+17, 2, 0); //erase bubble
embeddednerd 0:9641fb66f65a 299
embeddednerd 0:9641fb66f65a 300 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 301 // LCD.locate(0,3);
embeddednerd 0:9641fb66f65a 302 wait_ms(100);
embeddednerd 0:9641fb66f65a 303 }
embeddednerd 0:9641fb66f65a 304 else
embeddednerd 0:9641fb66f65a 305 {
embeddednerd 0:9641fb66f65a 306 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 307 LCD.circle(115, 17, 8, 0);
embeddednerd 0:9641fb66f65a 308 // LCD.locate(0,3);
embeddednerd 0:9641fb66f65a 309 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 310 }
embeddednerd 0:9641fb66f65a 311 Thread::wait(10);
embeddednerd 0:9641fb66f65a 312 }
embeddednerd 0:9641fb66f65a 313 }
embeddednerd 0:9641fb66f65a 314
embeddednerd 0:9641fb66f65a 315 /*////////////////////// Memory pool example and Semaphore///////////////
embeddednerd 0:9641fb66f65a 316 Output:
embeddednerd 0:9641fb66f65a 317
embeddednerd 0:9641fb66f65a 318 //////////////////////////////////////////////////////////*/
embeddednerd 0:9641fb66f65a 319 void calci(void const *args) {
embeddednerd 0:9641fb66f65a 320 uint32_t i = 0;
embeddednerd 0:9641fb66f65a 321 while (true) {
embeddednerd 0:9641fb66f65a 322 calculate.wait(); //semaphore
embeddednerd 0:9641fb66f65a 323 i = Pot2.read_u16();;
embeddednerd 0:9641fb66f65a 324 i = (i>>5)/2;
embeddednerd 0:9641fb66f65a 325 message_t *message = mpool.alloc();
embeddednerd 0:9641fb66f65a 326 message->voltage = (i * 3.3) / 1024;
embeddednerd 0:9641fb66f65a 327 message->current = ((i * 3.3) / 2048);
embeddednerd 0:9641fb66f65a 328 message->counter = i;
embeddednerd 0:9641fb66f65a 329 queue.put(message);
embeddednerd 0:9641fb66f65a 330 calculate.release();
embeddednerd 0:9641fb66f65a 331 Thread::wait(100000);
embeddednerd 0:9641fb66f65a 332 }
embeddednerd 0:9641fb66f65a 333 }
embeddednerd 0:9641fb66f65a 334
embeddednerd 0:9641fb66f65a 335 // print the actual contrast
embeddednerd 0:9641fb66f65a 336 int main()
embeddednerd 0:9641fb66f65a 337 {
embeddednerd 0:9641fb66f65a 338 int j;
embeddednerd 0:9641fb66f65a 339 // r =0; b=0;g=0;
embeddednerd 0:9641fb66f65a 340 LCD.cls();
embeddednerd 0:9641fb66f65a 341 LCD.set_font((unsigned char*) Small_7);
embeddednerd 0:9641fb66f65a 342 LCD.locate(0,0);
embeddednerd 0:9641fb66f65a 343 LCD.printf(" embedded.zettamonk.com");
embeddednerd 0:9641fb66f65a 344 /////////////////////////////Threads///////////////////
embeddednerd 0:9641fb66f65a 345 Thread t1(led); //start thread1
embeddednerd 0:9641fb66f65a 346 Thread t2(menu_sel); //start thread2
embeddednerd 0:9641fb66f65a 347 Thread t3(spk); //start thread3
embeddednerd 0:9641fb66f65a 348 Thread t4(pot); //start thread4
embeddednerd 0:9641fb66f65a 349 Thread t5(rgb); //start thread4
embeddednerd 0:9641fb66f65a 350 Thread t6(temp); //start thread4
embeddednerd 0:9641fb66f65a 351 Thread t7(axix);
embeddednerd 0:9641fb66f65a 352 Thread t8(calci);
embeddednerd 0:9641fb66f65a 353 Thread t9(calci);
embeddednerd 0:9641fb66f65a 354 ////////////////////////////////////////////////
embeddednerd 0:9641fb66f65a 355 while(true) { // main is the next thread
embeddednerd 0:9641fb66f65a 356
embeddednerd 0:9641fb66f65a 357 if (oprate_menu[7] == SET)
embeddednerd 0:9641fb66f65a 358 {
embeddednerd 0:9641fb66f65a 359 LCD.set_font((unsigned char*) Small_7);
embeddednerd 0:9641fb66f65a 360 LCD.locate(0,0);
embeddednerd 0:9641fb66f65a 361
embeddednerd 0:9641fb66f65a 362 osEvent evt = queue.get();
embeddednerd 0:9641fb66f65a 363 if (evt.status == osEventMessage) {
embeddednerd 0:9641fb66f65a 364 message_t *message = (message_t*)evt.value.p;
embeddednerd 0:9641fb66f65a 365 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 366 LCD.printf(" V:%.2fv" , message->voltage);
embeddednerd 0:9641fb66f65a 367 LCD.printf(" I:%.2fA" , message->current);
embeddednerd 0:9641fb66f65a 368 LCD.printf(" R: %u ", message->counter);
embeddednerd 0:9641fb66f65a 369 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 370 mpool.free(message);
embeddednerd 0:9641fb66f65a 371
embeddednerd 0:9641fb66f65a 372
embeddednerd 0:9641fb66f65a 373 // wait(.2);
embeddednerd 0:9641fb66f65a 374 }
embeddednerd 0:9641fb66f65a 375 else
embeddednerd 0:9641fb66f65a 376 { LCD.set_font((unsigned char*) Small_7);
embeddednerd 0:9641fb66f65a 377 LCD.locate(0,0);
embeddednerd 0:9641fb66f65a 378 lcd_mutex.lock();
embeddednerd 0:9641fb66f65a 379 LCD.printf("embedded.zettamonk.com");
embeddednerd 0:9641fb66f65a 380 lcd_mutex.unlock();
embeddednerd 0:9641fb66f65a 381 }
embeddednerd 0:9641fb66f65a 382
embeddednerd 0:9641fb66f65a 383 Thread::wait(100); // wait 0.5s
embeddednerd 0:9641fb66f65a 384 }
embeddednerd 0:9641fb66f65a 385 }
embeddednerd 0:9641fb66f65a 386 }