Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Core/Inc/top_board/oled/OLED_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@
#include <stdlib.h>

#define MAX_CHILDEREN 9
#define MAX_VAR_NAME_LENGTH 9
#define MAX_MENU_NAME_LENGTH 15
#define MAX_SUBMENU_NAME_LENGTH 23
#define MAX_STRING_LENGTH 23

typedef struct page_struct page_struct;
Expand Down Expand Up @@ -62,5 +60,8 @@ void end_of_test();
enum test_type OLED_get_current_page_test_type();
void end_of_boot_screen(bool MCP_OK);
void display_text();
void pageNameTooLongException(char* name);
void textTooLongException(char* page_name, int line, int length);
void unknownLineNumber(char* page_name, int line);

#endif /* INC_OLED_H_ */
1 change: 0 additions & 1 deletion Core/Inc/top_board/oled/menus/info_menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
#define INC_INFO_MENU_H_

#include "OLED_driver.h"
#include "general_info.h"
#include "encoder_page.h"
#include "mcp_page.h"
#include "time_page.h"
Expand Down
3 changes: 2 additions & 1 deletion Core/Inc/top_board/oled/pages.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
void pages_init(page_struct *p);
void pages_set_default_values(page_struct *page, page_struct *parent);
void add_child_to_parent(page_struct *current);

void page_set_page_name(char* name, page_struct *page);
void page_put_text_in_line(page_struct *page, char* text, int lineNum);

#endif /* INC_PAGES_H_ */
9 changes: 0 additions & 9 deletions Core/Inc/top_board/oled/variable_pages/general_info.h

This file was deleted.

4 changes: 2 additions & 2 deletions Core/Src/top_board/Control/stateControl.c
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ void wheels_Update() {
}

float feed_back_voltage = wheelFBOn*24.0f*(0.001367311 * (PID(angular_velocity_error, &wheelsK[motor])));
float max_fb_voltage = 12.5f;
float max_fb_voltage = 3.0f;
if (feed_back_voltage > max_fb_voltage) {
feed_back_voltage = max_fb_voltage;
}
Expand All @@ -272,7 +272,7 @@ void wheels_Update() {


// Set motor PWM fraction/voltage
float max_voltage = 12.5;
float max_voltage = 5.5;
// Add PID to commanded speed and convert to PWM (range between -1 and 1)
float wheel_voltage_to_be_applied = feed_forward[motor] + feed_back_voltage;
if (wheel_voltage_to_be_applied > max_voltage) {
Expand Down
90 changes: 80 additions & 10 deletions Core/Src/top_board/oled/OLED_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@ static bool oled_initialized = false;
static page_struct *current_page;
struct page_struct not_in_test_mode;
struct page_struct error_menu_has_no_children;
struct page_struct error_non_specified;
struct page_struct root_page;
static int item_selector;
static int id_self_test_menu;
bool flag_error_too_many_children = false;
bool flag_error_too_many_children_page_init = false;
bool flag_error_page_name_too_long = false;
char* page_name_error_too_many_children;
bool test_is_finished = false;
static char *robotNames[] = {"404", "WALL-E", "Bob", "Pumba", "Ted", "Eve", "Susie", "James", "Lizzy", "McQueen", "Kevin", "Brum", "Van Robogh", "Wout", "Jenny", "Hermann"};
Expand All @@ -36,24 +38,31 @@ static char *robotNames[] = {"404", "WALL-E", "Bob", "Pumba", "Ted", "Eve", "Sus
* @brief initialize the OLED screen
*/
void OLED_Init() {
// ERROR & EXCEPTION PAGES
pages_set_default_values(&error_menu_has_no_children, NULL);
error_menu_has_no_children.id = 50;
strcpy(error_menu_has_no_children.page_name, "Error");

pages_set_default_values(&error_non_specified, NULL);
error_non_specified.id = 60;
strcpy(error_non_specified.page_name, "Error");

initNotInTestMode();
id_self_test_menu = getSelfTestMenuID();

//ROOT
pages_set_default_values(&root_page, NULL);
root_page.id = 0;
strcpy(root_page.page_name, "Root");

pages_init(&root_page);
initNotInTestMode();

clear_screen();
current_page = &root_page;
item_selector = 0;
oled_initialized = true;
id_self_test_menu = getSelfTestMenuID();

boot_screen();

pages_init(&root_page);
oled_initialized = true;
}

/**
Expand All @@ -72,12 +81,16 @@ void OLED_Update(button_id_t button, bool test_mode) {
return;
}

/* show error if a menu has too many children; afterwards return */
/* error handling */
if (flag_error_too_many_children) {
if (!flag_error_too_many_children_page_init) menuHasTooManyChildrenException();
return;
}

if (current_page->id == error_non_specified.id) {
return;
}

/* if no button is pressed return; update variables displayed on page if needed beforehand */
if (button == BUTTON_NONE) {
if (current_page->is_test != NOT_A_TEST) {
Expand Down Expand Up @@ -124,8 +137,9 @@ void OLED_Update(button_id_t button, bool test_mode) {
* @display useful information after boot such as ID, team color, MCP alive, and test mode
*/
void end_of_boot_screen(bool MCP_OK) {
if (current_page->id == error_non_specified.id) return;
clear_screen();
strcpy(current_page->page_name, robotNames[robot_get_ID()]);
page_set_page_name(robotNames[robot_get_ID()], current_page);
putPageName();
char temp[MAX_STRING_LENGTH];
//ID + TEAM COLOR
Expand All @@ -134,10 +148,10 @@ void end_of_boot_screen(bool MCP_OK) {
} else {
sprintf(temp, "ID: %d YELLOW", robot_get_ID());
}
strcpy(current_page->line0, temp);
page_put_text_in_line(current_page, temp, 0);
//POWER
sprintf(temp, "%.2fV REM: %d", powerAlive.voltagePowerBoard, REM_LOCAL_VERSION);
strcpy(current_page->line1, temp);
page_put_text_in_line(current_page, temp, 1);
//MCP ALIVE
if (MCP_OK) {
strcpy(current_page->line2, "MCP: OK");
Expand Down Expand Up @@ -195,7 +209,6 @@ void end_of_test() {
strcpy(current_page->line1, "Test done!");
strcpy(current_page->line2, "press \"OK\" to");
strcpy(current_page->line3, "continue");
strcpy(current_page->line3, "");
display_text();
SSD1306_UpdateScreen();
}
Expand All @@ -221,6 +234,63 @@ void display_text() {
SSD1306_Puts(current_page->line3, &Font_7x10, 1);
}

void pageNameTooLongException(char* name) {
current_page = &error_non_specified;
clear_screen();
SSD1306_GotoXY (5,0);
SSD1306_Puts("ERROR", &Font_11x18, 1);
SSD1306_GotoXY (5,20);
char tempstr[20];
SSD1306_Puts("Page name:", &Font_7x10, 1);
SSD1306_GotoXY (5,31);
sprintf(tempstr, "%s", name);
SSD1306_Puts(tempstr, &Font_7x10, 1);
SSD1306_GotoXY (5,42);
SSD1306_Puts("is too long!", &Font_7x10, 1);
SSD1306_GotoXY (5,53);
sprintf(tempstr, "length %d > %d", strlen(name), MAX_MENU_NAME_LENGTH);
SSD1306_Puts(tempstr, &Font_7x10, 1);
SSD1306_UpdateScreen();
}

void textTooLongException(char* page_name, int line, int length) {
current_page = &error_non_specified;
clear_screen();
SSD1306_GotoXY (5,0);
SSD1306_Puts("ERROR", &Font_11x18, 1);
SSD1306_GotoXY (5,20);
char tempstr[20];
sprintf(tempstr, "page %s", page_name);
SSD1306_Puts(tempstr, &Font_7x10, 1);
SSD1306_GotoXY (5,31);
sprintf(tempstr, "line %d ", line);
SSD1306_Puts(tempstr, &Font_7x10, 1);
SSD1306_GotoXY (5,42);
SSD1306_Puts("is too long.", &Font_7x10, 1);
SSD1306_GotoXY (5,53);
sprintf(tempstr, "length %d > %d", length, MAX_STRING_LENGTH);
SSD1306_Puts(tempstr, &Font_7x10, 1);
SSD1306_UpdateScreen();
}

void unknownLineNumber(char* page_name, int line) {
current_page = &error_non_specified;
clear_screen();
SSD1306_GotoXY (5,0);
SSD1306_Puts("ERROR", &Font_11x18, 1);
SSD1306_GotoXY (5,20);
char tempstr[20];
sprintf(tempstr, "page %s", page_name);
SSD1306_Puts(tempstr, &Font_7x10, 1);
SSD1306_GotoXY (5,31);
sprintf(tempstr, "line %d ", line);
SSD1306_Puts(tempstr, &Font_7x10, 1);
SSD1306_GotoXY (5,42);
SSD1306_Puts("does not exist", &Font_7x10, 1);
SSD1306_GotoXY (5,53);
SSD1306_UpdateScreen();
}

///////////////////////////////////////////////////// PRIVATE FUNCTION IMPLEMENTATIONS
/**
* @brief actions after button press for menu page
Expand Down
5 changes: 2 additions & 3 deletions Core/Src/top_board/oled/menus/info_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@ struct page_struct sensor_menu;
* @note constraint for children of info menu: 20 < id < 30
*/
void info_menu_initChildren(page_struct *parent) {
general_info_init(parent);

pages_set_default_values(&communication_menu, parent);
communication_menu.id = 22;
strcpy(communication_menu.page_name, "Communication");
page_set_page_name("Communication", &communication_menu);
communication_menu.is_menu = true;
add_child_to_parent(&communication_menu);
time_page_init(&communication_menu);
Expand All @@ -21,7 +20,7 @@ void info_menu_initChildren(page_struct *parent) {

pages_set_default_values(&sensor_menu, parent);
sensor_menu.id = 23;
strcpy(sensor_menu.page_name, "Sensors etc.");
page_set_page_name("Sensors etc.", &sensor_menu);
sensor_menu.is_menu = true;
add_child_to_parent(&sensor_menu);
encoder_page_init(&sensor_menu);
Expand Down
8 changes: 4 additions & 4 deletions Core/Src/top_board/oled/menus/kicker_self_test_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,27 @@ struct page_struct no_charge;
void kicker_self_test_menu_initChildren(page_struct *parent) {
pages_set_default_values(&kick_menu, parent);
kick_menu.id = 131;
strcpy(kick_menu.page_name, "Test Kick");
page_set_page_name("Test Kick", &kick_menu);
kick_menu.is_menu = true;
add_child_to_parent(&kick_menu);
kicker_test_initChildren(&kick_menu);

pages_set_default_values(&chip_menu, parent);
chip_menu.id = 132;
strcpy(chip_menu.page_name, "Test Chip");
page_set_page_name("Test Chip", &chip_menu);
chip_menu.is_menu = true;
add_child_to_parent(&chip_menu);
chip_test_initChildren(&chip_menu);

pages_set_default_values(&no_charge, parent);
no_charge.id = 133;
strcpy(no_charge.page_name, "No Charging!");
page_set_page_name("No Charging!", &no_charge);
no_charge.is_test = BLOCKING_TEST;
add_child_to_parent(&no_charge);

pages_set_default_values(&charge, parent);
charge.id = 134;
strcpy(charge.page_name, "Charging!");
page_set_page_name("Charging!", &charge);
charge.is_test = BLOCKING_TEST;
add_child_to_parent(&charge);
}
Expand Down
6 changes: 3 additions & 3 deletions Core/Src/top_board/oled/menus/main_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,21 @@ struct page_struct drain_battery_menu;
void main_menu_initChildren(page_struct *parent) {
pages_set_default_values(&self_test_menu, parent);
self_test_menu.id = 1;
strcpy(self_test_menu.page_name, "Self Tests");
page_set_page_name("Self Tests", &self_test_menu);
self_test_menu.is_menu = true;
add_child_to_parent(&self_test_menu);
self_test_menu_initChildren(&self_test_menu);

pages_set_default_values(&info_menu, parent);
info_menu.id = 2;
strcpy(info_menu.page_name, "Info Menu");
page_set_page_name("Info Menu", &info_menu);
info_menu.is_menu = true;
add_child_to_parent(&info_menu);
info_menu_initChildren(&info_menu);

pages_set_default_values(&drain_battery_menu, parent);
drain_battery_menu.id = 3;
strcpy(drain_battery_menu.page_name, "Drain battery");
page_set_page_name("Drain Battery", &drain_battery_menu);
drain_battery_menu.is_menu = true;
add_child_to_parent(&drain_battery_menu);
drain_battery_initChildren(&drain_battery_menu);
Expand Down
10 changes: 5 additions & 5 deletions Core/Src/top_board/oled/menus/self_test_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ struct page_struct self_test_system_menu;
void self_test_menu_initChildren(page_struct *parent) {
pages_set_default_values(&self_test_system_menu, parent);
self_test_system_menu.id = 15;
strcpy(self_test_system_menu.page_name, "System tests");
page_set_page_name("System tests", &self_test_system_menu);
self_test_system_menu.is_menu = true;
add_child_to_parent(&self_test_system_menu);
system_test_init(&self_test_system_menu);


pages_set_default_values(&self_test_top_menu, parent);
self_test_top_menu.id = 11;
strcpy(self_test_top_menu.page_name, "Top board");
page_set_page_name("Top board", &self_test_top_menu);
self_test_top_menu.is_menu = true;
add_child_to_parent(&self_test_top_menu);
buzzer_test_init(&self_test_top_menu);
Expand All @@ -32,21 +32,21 @@ void self_test_menu_initChildren(page_struct *parent) {

pages_set_default_values(&self_test_power_menu, parent);
self_test_power_menu.id = 12;
strcpy(self_test_power_menu.page_name, "Power board");
page_set_page_name("Power board", &self_test_power_menu);
self_test_power_menu.is_menu = true;
add_child_to_parent(&self_test_power_menu);

pages_set_default_values(&self_test_kicker_menu, parent);
self_test_kicker_menu.id = 13;
strcpy(self_test_kicker_menu.page_name, "Kicker board");
page_set_page_name("Kicker board", &self_test_kicker_menu);
self_test_kicker_menu.is_menu = true;
add_child_to_parent(&self_test_kicker_menu);
kicker_self_test_menu_initChildren(&self_test_kicker_menu);


pages_set_default_values(&self_test_dribbler_menu, parent);
self_test_dribbler_menu.id = 14;
strcpy(self_test_dribbler_menu.page_name, "Dribler board");
page_set_page_name("Dribbler board", &self_test_dribbler_menu);
self_test_dribbler_menu.is_menu = true;
add_child_to_parent(&self_test_dribbler_menu);
dribbler_test_InitChildren(&self_test_dribbler_menu);
Expand Down
32 changes: 32 additions & 0 deletions Core/Src/top_board/oled/pages.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,38 @@ void pages_set_default_values(page_struct *page, page_struct *parent) {
page -> parent = parent;
}

void page_set_page_name(char* name, page_struct *page) {
if (strlen(name) > MAX_MENU_NAME_LENGTH) {
pageNameTooLongException(name);
} else {
strcpy(page->page_name, name);
}
}

void page_put_text_in_line(page_struct *page, char* text, int lineNum) {
if (strlen(text) > MAX_STRING_LENGTH) {
textTooLongException(page->page_name, lineNum, strlen(text));
} else {
switch (lineNum) {
case 0:
strcpy(page->line0, text);
break;
case 1:
strcpy(page->line1, text);
break;
case 2:
strcpy(page->line2, text);
break;
case 3:
strcpy(page->line3, text);
break;
default:
unknownLineNumber(page->page_name, lineNum);
break;
}
}
}

/**
* @brief add page as child to it's parent
*/
Expand Down
Loading