State machine
Dependencies: mbed Adafruit_GFX BioroboticsMotorControl MODSERIAL BioroboticsEMGFilter
Screen.h
- Committer:
- brass_phoenix
- Date:
- 2018-10-31
- Revision:
- 15:f65b4566193e
- Parent:
- 6:bfc6e68774f5
- Child:
- 17:1fe276ff17db
File content as of revision 15:f65b4566193e:
#pragma once #include "mbed.h" #include <string> // Uncomment this in the adafruit config.h to turn off the builtin splash //#define NO_SPLASH_ADAFRUIT // Uncomment this in the adafruit config.h to enable all functionality //#define GFX_WANT_ABSTRACTS #include "Adafruit_SSD1306.h" class Screen { private: I2C i2c; Adafruit_SSD1306_I2c oled; public: // The screen we use doesn't have a reset pin, but it needs one anyway. // Use a pin we don't use. Screen(PinName sda, PinName scl, PinName reset): i2c(sda, scl), oled(i2c, reset) { // according to the spec the max bitrate for the SSD1308 is 400 kbit/s i2c.frequency(400000); clear_display(); } void clear_display() { oled.clearDisplay(); display(); } void display() { // Apparently the display only updates every 2 "display" calls. // This is a bug in the library. oled.display(); oled.display(); } // State names can be a maximum of 17 characters long. void display_state_name(string name) { // Clear a previous title. oled.setTextCursor(0, 0); oled.printf(" "); oled.setTextCursor(0, 0); oled.printf("- "); oled.printf(name.c_str()); oled.printf(" -\r\n"); display(); } // Returns a direct handle to the screen. // Be carefull while using the handle. Adafruit_SSD1306_I2c* get_screen_handle() { return &oled; } void display_up_down_arrow(bool is_up) { int size = 40; int x_start = oled.width() - size; int x_end = x_start + size; int y_start = oled.height() - size; int y_end = y_start + size; oled.fillRect(x_start, y_start, size, size, BLACK); oled.fillTriangle(x_start, y_start, x_end, y_start, x_start + size/2, y_end, WHITE); display(); } void display_left_right_arrow(bool is_right) { int size = 40; int x_start = oled.width() - (size * 2); int x_end = x_start + size; int y_start = oled.height() - size; int y_end = y_start + size; oled.fillRect(x_start, y_start, size, size, BLACK); oled.fillTriangle(x_start, y_start, x_end, y_start, x_start + size/2, y_end, WHITE); display(); } };