Semafor

Dependencies:   BSP_DISCO_F746NG

main.cpp

Committer:
iliatumash
Date:
2020-12-16
Revision:
0:96b25ebf5df8

File content as of revision 0:96b25ebf5df8:

#include "mbed.h"
#include "stm32746g_discovery_lcd.h"
#include "stm32746g_discovery_ts.h"
#include <Semaphore.h>


Semaphore semafor(1);
Thread thread0, thread1, thread2;
bool touch = false;

void test_thread0()
{
    while (true) {
        semafor.acquire();
        BSP_LCD_Clear(LCD_COLOR_DARKBLUE);
        BSP_LCD_SetBackColor(LCD_COLOR_DARKBLUE);
        BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
        BSP_LCD_DisplayStringAt(0, 50, (uint8_t *)"Jsem vlakno 1", CENTER_MODE); 
        BSP_LCD_DisplayStringAt(0, 80, (uint8_t *)"Stiskni displej", CENTER_MODE); 
    }
}

void test_thread1()
{
    while (true) {
        semafor.acquire();
        BSP_LCD_Clear(LCD_COLOR_BLUE);
        BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
        BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
        BSP_LCD_DisplayStringAt(0, 50, (uint8_t *)"Jsem vlakno 2", CENTER_MODE); 
        BSP_LCD_DisplayStringAt(0, 80, (uint8_t *)"Stiskni displej", CENTER_MODE); 
    }
}

void test_thread2()
{
    while (true) {
        semafor.acquire();
        BSP_LCD_Clear(LCD_COLOR_LIGHTBLUE);
        BSP_LCD_SetBackColor(LCD_COLOR_LIGHTBLUE);
        BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
        BSP_LCD_DisplayStringAt(0, 50, (uint8_t *)"Jsem vlakno 3", CENTER_MODE); 
        BSP_LCD_DisplayStringAt(0, 80, (uint8_t *)"Stiskni displej", CENTER_MODE); 
    }
}

void display(){  
    BSP_LCD_Init();
    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
    BSP_LCD_Clear(LCD_COLOR_DARKBLUE);
    BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
}

 void touchScreen(){
    TS_StateTypeDef TS_State;
    uint8_t status;
    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
    while(1) {
        BSP_TS_GetState(&TS_State);
        if (TS_State.touchDetected) {
          if(!touch) {
             touch = true;
             semafor.release();
          }
          }else{
              touch = false;
          }
        }
}


int main(){
    display();
    thread0.start(test_thread0);
    thread1.start(test_thread1);
    thread2.start(test_thread2);
   touchScreen();
    while(1){
         
           }
}