f

Dependencies:   Speaker mbed wave_player mbed-rtos 4DGL-uLCD-SE LCD_fonts SDFileSystem_OldbutworkswithRTOS

main.cpp

Committer:
apaks180
Date:
2019-02-21
Revision:
5:5f393c6b02cb
Parent:
4:79863d2ea5a0
Child:
6:bb887c1a381b

File content as of revision 5:5f393c6b02cb:

// example to test the mbed Lab Board lcd lib with the mbed rtos
// Pot1 changes the contrast
// Pot2 changes the speed of the sin wave

#include "mbed.h"
#include "rtos.h"
#include "uLCD_4DGL.h"
#include "stdio.h"
#include "Speaker.h"
#include "banner.h"
#include "SDFileSystem.h"
#include "wave_player.h"

AnalogOut DACout(p18);
wave_player waver(&DACout);
SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
uLCD_4DGL uLCD(p13,p14,p11);
//AnalogIn Pot1(p19);
//AnalogIn Pot2(p20);
//Speaker speaker(p26);
PwmOut RGBLED_r(p23);
PwmOut RGBLED_g(p24);
PwmOut RGBLED_b(p25);
//DigitalIn joyfire(p14);
//BusIn joy(p15,p12,p13,p16);
BusOut leds(LED1,LED2,LED3,LED4);

// mutex to make the lcd lib thread safe
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();
        uLCD.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 changes the speed of the sine wave
//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 does 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;          // need only 6 bits for contrast
//        lcd_mutex.lock();
//        LCD.set_contrast(k);
//        lcd_mutex.unlock();
//        Thread::wait(500);    // wait 0.5s
//    }
//}
//// Thread 5
//// RGB LED
void thread5(void const *args)
{
    int i = 0;
    while(true) { 
            // thread loop
        if(i==0){
            RGBLED_r = 1;
            RGBLED_g = 0;
            RGBLED_b = 0;
        }
        else if(i==1){
            RGBLED_r = 1;
            RGBLED_g = 1;
            RGBLED_b = 1;
        }
        else{
            RGBLED_r = 0;
            RGBLED_g = 0;
            RGBLED_b = 1;
        }
        i++;
        i=i%3;
        Thread::wait(673);    // wait 1.5s
    }
}
//// Thread 6
//// Speaker
void thread6(void const *args)
{
    //while(true) {         // thread loop
//        speaker.PlayNote(311.1, 1, .1);
//        Thread::wait(1000);    // wait 1.0s
//        speaker.PlayNote(0,1,0);
//        Thread::wait(1000);
//    }
    FILE *wave_file;
    printf("\n\n\nHello, wave world!\n");
    wave_file=fopen("/sd/banner2.wav","r");
    waver.play(wave_file);
    fclose(wave_file);
}

void thread7(void const *args)
{
    int i = 0;
    while(true) {         // thread loop
        i++;
        printf("thread 1: %d\n", i);
        Thread::wait(200);    // wait 0.25s
    }
}



int main()
{
//    int j;
    uLCD.cls();

    Thread t1(thread1); //start thread1
    //Thread t2(thread2); //start thread2
    //Thread t3(thread3); //start thread3
    //Thread t4(thread4); //start thread4
    Thread t5(thread5); //start thread5
    Thread t6(thread6); //start thread6
    Thread t7(thread7); //start thread7

    while(true) {       // main is the next thread
//        speaker.PlayNote(311.1, 1, .1);
        //Thread::wait(1000);    // wait 1.0s
//        speaker.PlayNote(0,1,0);
        //Thread::wait(1000);
//        lcd_mutex.lock();
//        uLCD.cls();
//        uLCD.media_init();
//        uLCD.set_sector_address(0x001D, 0x4C42);
//        uLCD.display_video(0,0);
//        lcd_mutex.unlock();
//        Thread::wait(33);   // wait 0.5s
    }
}