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
main.cpp@0:9641fb66f65a, 2014-11-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |