STM32-F746NG-DISCO Project.
Dependencies: BSP_DISCO_F746NG
main.cpp
- Committer:
- chri721u
- Date:
- 2020-01-08
- Revision:
- 2:f3bee2fcc2a0
- Parent:
- 1:0c13955ae7ae
- Child:
- 3:1d1ced98a985
File content as of revision 2:f3bee2fcc2a0:
/* Author: Christian Andresen Website: xcha11.skp-dp.sde.dk Date: 10-01-2020 Brief: Basic arduino project involving sensors (Button, Touch), digital output (LED, Buzzer), and onboard LCD Screen. */ #include "mbed.h" // mbed-os 5 #include "stm32746g_discovery_lcd.h" // Last updated 27/11/2019 // D2-D4: DigitalIN, D5-D8: DigitalOut. DigitalIn button(D2); DigitalIn touch(D3); //InterruptIn button(D2); //InterruptIn touch(D3); DigitalOut led(D5); DigitalOut buzzer(D6); // Multithreading Thread firstThread; Thread secondThread; // Prototype for the blue screen of death. void bluescreen(); // Visible ints, used to register button presses and touch-sensor activation. int button_count; int touch_count; // Integer used for the 9999 counter. int countup; // restarts is an invisible int, gaining 1 in value eachtime countup reaches 9999. Used for the bluescreen() event. int restarts; // 9999 counter program. Added above main for multithread ability. void ninecounter() { HAL_Delay(3000); while(1) { if (countup != 9999) { wait(0.001); countup++; } else { countup = 9900; restarts++; } } } /* // USE ONLY IF TOUCH SENSOR AND BUTTON ARE INTERRUPT-IN void buttonpress() { led = 1; // Turn LED on buzzer = 1; // Emit sound from buzzer wait(0.25); button_count++; // Register a button has been pressed, so it can be displayed later. led = 0; // Turn LED off buzzer = 0; // Halt sound emmital from buzzer. } void touchpress() { led = 1; // Turn LED on wait(0.25); touch_count++; // Register that the touch sensor has been triggered, so it can be displayed layer. led = 0; // Turn LED off } */ void inputcounter() { HAL_Delay(3000); while(1) { //button.rise(&buttonpress); USE IF BUTTON IS INTERRUPT IN (BRUG IKKE RISE I WHILE - Flyt 2 linjer op) //touch.rise(&touchpress); USE IF TOUCH SENSOR IS INTERRUPT IN // USE IF BUTTON AND TOUCH SENSOR IS DIGITAL IN // Register if the button has been pressed. if(button) { led = 1; // Turn LED on buzzer = 1; // Emit sound from buzzer wait(0.5); button_count++; // Register a button has been pressed, so it can be displayed later. led = 0; // Turn LED off buzzer = 0; // Halt sound emmital from buzzer. } // Register if touchscreen has been touched. else if(touch) { led = 1; // Turn LED on wait(0.69); touch_count++; // Register that the touch sensor has been triggered, so it can be displayed layer. led = 0; // Turn LED off } // If nothing is being toched, prevent anything from happening. else { led = 0; buzzer = 0; } } } // Main part of the program int main() { firstThread.start(&ninecounter); // Start multithread main and ninecounter() secondThread.start(&inputcounter); // Prepare 3 text elements for later print to LCD uint8_t text1[30]; uint8_t text2[30]; uint8_t text3[30]; // Give integers a default value of 0 button_count = 0; touch_count = 0; countup = 9900; restarts = 0; // Boot up LCD screen BSP_LCD_Init(); BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS); BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER); // Clear the screen, add black background and red text BSP_LCD_Clear(LCD_COLOR_BLACK); BSP_LCD_SetBackColor(LCD_COLOR_BLACK); BSP_LCD_SetTextColor(LCD_COLOR_RED); // Bootup Message BSP_LCD_DisplayStringAt(0, 130, (uint8_t *) "SYSTEM BOOTING", CENTER_MODE); HAL_Delay(2500); // Change LCD Screen to system BSP_LCD_Clear(LCD_COLOR_BLACK); // Studio name & department BSP_LCD_DisplayStringAt(0, 25, (uint8_t *) "HELLDROP STUDIO SOFTWARE", CENTER_MODE); BSP_LCD_DisplayStringAt(0, 250, (uint8_t *) "Code by Christian Andresen", CENTER_MODE); while(restarts < 10) { sprintf((char*)text1, "Button count: %d", button_count); sprintf((char*)text2, "Touch count: %d", touch_count); sprintf((char*)text3, " %d (%d) ", countup, restarts); BSP_LCD_DisplayStringAt(0, 75, (uint8_t *)&text1, CENTER_MODE); BSP_LCD_DisplayStringAt(0, 125, (uint8_t *)&text2, CENTER_MODE); BSP_LCD_DisplayStringAt(0, 175, (uint8_t *)&text3, CENTER_MODE); } if (restarts >= 10) { bluescreen(); } } void bluescreen() { //BLUE SCREEN OF DEATH BSP_LCD_Clear(LCD_COLOR_BLUE); BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); BSP_LCD_DisplayStringAt(0, 75, (uint8_t *) "This device has", CENTER_MODE); BSP_LCD_DisplayStringAt(0, 100, (uint8_t *) "encountered", CENTER_MODE); BSP_LCD_DisplayStringAt(0, 125, (uint8_t *) "a fatal error", CENTER_MODE); BSP_LCD_DisplayStringAt(0, 150, (uint8_t *) "and needs to reboot.", CENTER_MODE); BSP_LCD_DisplayStringAt(0, 250, (uint8_t *) "HAL Error", LEFT_MODE); BSP_LCD_DisplayStringAt(0, 250, (uint8_t *) "ERROR CODE: 40", RIGHT_MODE); }