2 #include "LCD_DISCO_F746NG.h" 3 #include "TS_DISCO_F746NG.h" 7 #include "stm32746g_discovery_sd.h" 8 #include "stm32746g_discovery_sdram.h" 10 #include "FileSystem.h" 13 Serial
usbCom(USBTX, USBRX);
21 DigitalOut
led1(LED1);
76 lcd.DisplayStringAt(0, LINE(4), (uint8_t *)display_int, CENTER_MODE);
88 for (
int i = 0; i <= 10; i++)
90 lcd.DisplayStringAt(0, LINE(i), (uint8_t *)
" ", LEFT_MODE);
91 lcd.DisplayStringAt(0, LINE(i), (uint8_t *)
" ", CENTER_MODE);
92 lcd.DisplayStringAt(0, LINE(i), (uint8_t *)
" ", RIGHT_MODE);
94 lcd.ClearStringLine(i);
130 float h = 0.0f, c = 0.0f, d = 0.0f;
140 char tempScaleSymbol[8];
147 sprintf(tempScaleSymbol,
"C");
150 sprintf(tempScaleSymbol,
"F");
153 sprintf(tempScaleSymbol,
"K");
157 sprintf(tempScaleSymbol,
"C");
161 sprintf(temp,
"Temperature: %d %s", (
int)c, tempScaleSymbol);
162 sprintf(humid,
"Humidity: %d %%", (
int)h);
163 sprintf(dew_point,
"Dew Point: %d %s", (
int)d, tempScaleSymbol);
165 lcd.DisplayStringAt(0, LINE(6), (uint8_t *)temp, CENTER_MODE);
166 lcd.DisplayStringAt(0, LINE(7), (uint8_t *)humid, CENTER_MODE);
167 lcd.DisplayStringAt(0, LINE(8), (uint8_t *)dew_point, CENTER_MODE);
181 lcd.DisplayStringAt(0, LINE(12), (uint8_t *)
"Godnat", CENTER_MODE);
185 lcd.DisplayStringAt(0, LINE(12), (uint8_t *)
"Goddag", CENTER_MODE);
204 lcd.DisplayStringAt(0, LINE(13), (uint8_t *)
"Noise warning!", CENTER_MODE);
209 lcd.DisplayStringAt(0, LINE(13), (uint8_t *)
" ", CENTER_MODE);
213 ThisThread::sleep_for(1000);
223 char earth_quake[32];
226 lcd.DisplayStringAt(0, LINE(10), (uint8_t *)earth_quake, CENTER_MODE);
244 void drawButton(uint16_t xPos, u_int16_t yPos, uint8_t *Text,
int dia = 10,
int xOffset = 5,
int yOffset = 7)
246 lcd.DrawCircle(xPos, yPos, dia);
248 lcd.DisplayStringAt((xPos - xOffset), (yPos - yOffset), Text, LEFT_MODE);
263 bool buttonHit(uint16_t xPos, uint16_t yPos, uint16_t cursor_x, uint16_t cursor_y, uint16_t hitBoxAera = 20)
265 int y_hitbox_min = yPos - hitBoxAera;
266 int y_hitbox_max = yPos + hitBoxAera;
268 int x_hitbox_min = xPos - hitBoxAera;
269 int x_hitbox_max = xPos + hitBoxAera;
271 if ((cursor_y >= y_hitbox_min && cursor_y <= y_hitbox_max) && (cursor_x >= x_hitbox_min && cursor_x <= x_hitbox_max))
285 char str_building[32];
291 lcd.DisplayStringAt(125, 75, (uint8_t *)str_building, LEFT_MODE);
292 lcd.DisplayStringAt(125, 150, (uint8_t *)str_room, LEFT_MODE);
295 uint16_t building_incr_xPos = 300;
296 uint16_t building_incr_yPos = 80;
297 drawButton(building_incr_xPos, building_incr_yPos, (uint8_t *)
"+");
299 uint16_t building_decr_xPos = 350;
300 uint16_t building_decr_yPos = 80;
301 drawButton(building_decr_xPos, building_decr_yPos, (uint8_t *)
"-");
304 uint16_t room_incr_xPos = 300;
305 uint16_t room_incr_yPos = 155;
306 drawButton(room_incr_xPos, room_incr_yPos, (uint8_t *)
"+");
308 uint16_t room_decr_xPos = 350;
309 uint16_t room_decr_yPos = 155;
310 drawButton(room_decr_xPos, room_decr_yPos, (uint8_t *)
"-");
313 uint16_t save_btn_xPos = 240;
314 uint16_t save_btn_yPos = 230;
315 drawButton(save_btn_xPos, save_btn_yPos, (uint8_t *)
"Save", 32, 22);
325 float btnPressWait = 0.3f;
328 if (
buttonHit(building_incr_xPos, building_incr_yPos,
x,
y))
335 if (
buttonHit(building_decr_xPos, building_decr_yPos,
x,
y))
343 if (
buttonHit(room_incr_xPos, room_incr_yPos,
x,
y))
350 if (
buttonHit(room_decr_xPos, room_incr_yPos,
x,
y))
383 ThisThread::sleep_for(1000);
419 sprintf(i2c_clock,
"I2C Clock: %d KHz", ((
int)I2C_SPEED / 1000));
420 lcd.DisplayStringAt(0, LINE(3), (uint8_t *)i2c_clock, CENTER_MODE);
422 if (BSP_SD_IsDetected())
424 lcd.DisplayStringAt(0, LINE(7), (uint8_t *)
"SD Card detected", CENTER_MODE);
428 lcd.DisplayStringAt(0, LINE(7), (uint8_t *)
"SD Card not detected", CENTER_MODE);
431 lcd.DisplayStringAt(145, 150, (uint8_t *)
"Temperature scale", LEFT_MODE);
433 uint16_t tempBtnYpos = 190;
434 uint16_t tempBtnCelsiusPos = 170;
435 uint16_t tempBtnFahrenheitPos = 230;
436 uint16_t tempBtnKelvinPos = 290;
438 drawButton(tempBtnCelsiusPos, tempBtnYpos, (uint8_t *)
"C");
439 drawButton(tempBtnFahrenheitPos, tempBtnYpos, (uint8_t *)
"F");
440 drawButton(tempBtnKelvinPos, tempBtnYpos, (uint8_t *)
"K");
451 if (
buttonHit(tempBtnCelsiusPos, tempBtnYpos,
x,
y))
455 usbCom.printf(
"Temp scale switched to Celcius!");
460 if (
buttonHit(tempBtnFahrenheitPos, tempBtnYpos,
x,
y))
464 usbCom.printf(
"Temp scale switched to Fahrenheit!");
469 if (
buttonHit(tempBtnKelvinPos, tempBtnYpos,
x,
y))
473 usbCom.printf(
"Temp scale switched to Kelvin!");
490 usbCom.printf(
"[Toggle]: setView viewNumber %d!\n", viewNumber);
510 usbCom.printf(
"Unknown view number: %d\n", viewNumber);
523 usbCom.printf(
"switchView toggled!\n");
536 usbCom.printf(
"switchView viewNumber %d!\n", viewNumber);
555 lcd.DisplayStringAt(0, LINE(1), (uint8_t *)
"Booting Hercules...", CENTER_MODE);
556 lcd.DisplayStringAt(0, LINE(4), (uint8_t *)
"Please wait", CENTER_MODE);
558 if (BSP_SD_IsDetected())
561 lcd.DisplayStringAt(0, LINE(6), (uint8_t *)
"SD Card detected", CENTER_MODE);
565 lcd.DisplayStringAt(0, LINE(6), (uint8_t *)
"SD Card not detected", CENTER_MODE);
598 int y_hitbox_min = 240 - 50;
599 int y_hitbox_max = 240 + 50;
601 int x_hitbox_min = 410 - 50;
602 int x_hitbox_max = 410 + 50;
604 if ((
y >= y_hitbox_min &&
y <= y_hitbox_max) && (
x >= x_hitbox_min &&
x <= x_hitbox_max))
616 char displayView[32];
619 lcd.DrawHLine(10, 10, 460);
623 lcd.DisplayStringAt(10, 12, (uint8_t *)
"Hercules v1.1", LEFT_MODE);
624 lcd.DrawVLine(80, 10, 11);
634 lcd.DisplayStringAt(85, 12, (uint8_t *)building, LEFT_MODE);
635 lcd.DisplayStringAt(150, 12, (uint8_t *)room, LEFT_MODE);
640 lcd.DrawHLine(10, 20, 460);
641 lcd.SetFont(&Font16);
645 lcd.DisplayStringAt(10, 240, (uint8_t *)displayView, LEFT_MODE);
646 lcd.DisplayStringAt(410, 240, (uint8_t *)
"Next", LEFT_MODE);
void displayLightStatus()
Says "godnat" when dark, "goddag" when light.
#define LCD_TEXT_BACKGROUND
bool counterThreadStarted
void displayEarthQuakeStatus()
Displays current earthquake status.
void switchView()
Switches the current view.
bool buttonHit(uint16_t xPos, uint16_t yPos, uint16_t cursor_x, uint16_t cursor_y, uint16_t hitBoxAera=20)
Checks if a button has been hit.
void drawButton(uint16_t xPos, u_int16_t yPos, uint8_t *Text, int dia=10, int xOffset=5, int yOffset=7)
Draw a round button on screen.
void displayCurrentHT()
Displays temperature & humidity (humidity)
int main()
Application entry point.
AnalogIn vibrationSensor(A1)
Serial usbCom(USBTX, USBRX)
void setView(int viewNumber)
Set the View object.
void noiseWarning()
Displays a warning when the noise is too much.
void gui_thread()
Gui Thread.
void view2()
View 2 logic.
DHT dhtSensor(A0, SEN51035P)
void clearDisplay()
Clears the main display & sets default colors.
void counterTick()
Increases the current count or resets when counter_max is hit.
int device_setup_building_no
int earthQuakeDetected()
Detects earth quakes. Sets the red led to ON/OFF.
#define LCD_BACKGROUND
LCD color.
void deviceSetup()
Initial device setup view.
void boot()
Setup for app.
void counter_thread()
Counter task.
void view1()
View 1 logic.