
Using Threads to control LCD display and LEDS
Dependencies: mbed mbed-rtos C12832_lcd LCD_fonts
Diff: main.cpp
- Revision:
- 4:3202052e5a8b
- Parent:
- 3:3ec443c0842a
--- a/main.cpp Wed Dec 05 08:06:20 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -// example to test the mbed Lab Board lcd lib with the mbed rtos -// Pot1 change the contrast -// Pot2 change the speed of the sin wave - -#include "mbed.h" -#include "rtos.h" -#include "Small_6.h" -#include "Small_7.h" -#include "Arial_9.h" -#include "stdio.h" -#include "C12832_lcd.h" - -// LCD object -C12832_LCD LCD; - -AnalogIn Pot1(p19); -AnalogIn Pot2(p20); - - -// mutex to make the lcd lib thread save -Mutex lcd_mutex; - -// Thread 1 -// print counter into first line and wait for 1 s -void thread1(void const *args) -{ - int i; - while(true) { // thread loop - lcd_mutex.lock(); - LCD.locate(0,0); - LCD.set_font((unsigned char*) Small_6); - LCD.printf("Thread1 count: %d",i); - lcd_mutex.unlock(); - i++; - Thread::wait(1000); - } -} - -// Thread 2 -// print counter into third line and wait for 0,5s -void thread2(void const *args) -{ - int k; - while(true) { // thread loop - lcd_mutex.lock(); - LCD.locate(0,20); - LCD.set_font((unsigned char*) Arial_9); - LCD.printf("Thread 2 count : %d",k); - lcd_mutex.unlock(); - k++; - Thread::wait(500); // wait 0.5s - } -} - -// Thread 3 -// print a sin function in a small window -// the value of pot 1 change the speed of the sinwave -void thread3(void const *args) -{ - int i,k,v; - double s,a; - k = 1; - lcd_mutex.lock(); - LCD.rect(89,0,127,17,1); - lcd_mutex.unlock(); - while(true) { // thread loop - v = Pot1.read_u16(); // get value of pot 1 - lcd_mutex.lock(); - for (i=90; i<127; i++) { - s = 8 * sin((long double)(i+k) /5); // pixel to print - a = 8 * sin((long double)(i+k-1) /5); // old pixel to erase - LCD.pixel(i,9 + (int)a ,0); // erase pixel - LCD.pixel(i,9 + (int)s ,1); // print pixel - } - LCD.copy_to_lcd(); // LCD.pixel do not update the lcd - lcd_mutex.unlock(); - k++; - Thread::wait(v/100); // value of pot1 / 100 - } -} - -// Thread 4 -// input pot 2 and change the contrast of lcd -void thread4(void const *args) -{ - int k; - while(true) { // thread loop - k = Pot2.read_u16(); // get the value of poti 2 - k = k >> 10; // we need only 6 bit for contrast - lcd_mutex.lock(); - LCD.set_contrast(k); - lcd_mutex.unlock(); - Thread::wait(500); // wait 0.5s -} -} - - -// print the actual contrast -int main() -{ - int j; - LCD.cls(); - - Thread t1(thread1); //start thread1 - Thread t2(thread2); //start thread2 - Thread t3(thread3); //start thread3 - Thread t4(thread4); //start thread4 - - while(true) { // main is the next thread - lcd_mutex.lock(); - LCD.locate(0,9); - LCD.set_font((unsigned char*) Small_7); - j = LCD.get_contrast(); // read the actual contrast - LCD.printf("contrast : %d",j); - lcd_mutex.unlock(); - Thread::wait(500); // wait 0.5s - } - -}