Changeset - 9030f018bc25
[Not reviewed]
default
0 5 0
Ethan Zonca (ethanzonca) - 7 years ago 2017-06-27 20:58:55
e@ethanzonca.com
Work on minor graphics stuff, fix temp sensor type setting issue
5 files changed with 77 insertions and 57 deletions:
0 comments (0 inline, 0 general)
inc/display.h
Show inline comments
 
@@ -8,6 +8,7 @@
 
#endif
 

	
 
void display_startup_screen(void);
 
void display_1hz(void);
 
void display_process(void);
 

	
 
#endif
lib/ssd1306/ssd1306.c
Show inline comments
 
@@ -208,25 +208,30 @@ static const char fontData[][5] =
 
    {0x00,0x00,0x7F,0x00,0x00},         //   ( 92)  | - 0x007C Vertical Line
 
    {0x00,0x41,0x36,0x08,0x00},         //   ( 93)  } - 0x007D Right Curly Bracket
 
    {0x02,0x01,0x02,0x04,0x02},         //   ( 94)  ~ - 0x007E Tilde
 
    {0x08,0x14,0x2A,0x14,0x22},         //   ( 95) << - 0x00AB Left-Pointing Double Angle Quotation Mark
 
	{0x08,0x14,0x2A,0x14,0x22},         //   ( 95) << - 0x00AB Left-Pointing Double Angle Quotation Mark
 
    {0x00,0x02,0x05,0x02,0x00},         //   ( 96)    - 0x00B0 Degree Sign
 
//    {0x44,0x44,0x5F,0x44,0x44},         //   ( 97) +- - 0x00B1 Plus-Minus Sign
 
//    {0x7E,0x20,0x20,0x10,0x3E},         //   ( 98)  u - 0x00B5 Micro Sign
 
//    {0x22,0x14,0x2A,0x14,0x08},         //   ( 99) >> - 0x00BB Right-Pointing Double Angle Quotation Mark
 
//    {0x30,0x48,0x45,0x40,0x20},         //   (100)  ? - 0x00BF Inverted Question Mark
 
//    {0x22,0x14,0x08,0x14,0x22},         //   (101)  x - 0x00D7 Multiplcation Sign
 
//    {0x08,0x08,0x2A,0x08,0x08},         //   (102)  + - 0x00F7 Division Sign
 
//    {0x18,0x14,0x08,0x14,0x0C},         //   (103)    - 0x221E Infinity
 
//    {0x44,0x4A,0x4A,0x51,0x51},         //   (104)  < - 0x2264 Less-Than or Equal to
 
//    {0x51,0x51,0x4A,0x4A,0x44},         //   (105)  > - 0x2265 Greater-Than or Equal to
 
//    {0x54,0x14,0x64,0x08,0x70},         //   (106)  .: - RF Symbol
 
//    {0x70,0x7C,0x72,0x7C,0x70},         //   (107)  ^ - Lock symbol
 
//    {0x70,0x5C,0x52,0x54,0x70},         //   (108)  / - Unlock symbol
 
//    {0x0C,0x1E,0x3C,0x1E,0x0C},         //   (109)  <3 - Heart Symbol
 
//    {0x18,0x22,0xFF,0x12,0x0C},         //   (110)  U - USB Symbol
 
    {0x44,0x44,0x5F,0x44,0x44},         //   ( 97) +- - 0x00B1 Plus-Minus Sign
 
    {0x7E,0x20,0x20,0x10,0x3E},         //   ( 98)  u - 0x00B5 Micro Sign
 
    {0x22,0x14,0x2A,0x14,0x08},         //   ( 99) >> - 0x00BB Right-Pointing Double Angle Quotation Mark
 
    {0x30,0x48,0x45,0x40,0x20},         //   (100)  ? - 0x00BF Inverted Question Mark
 
    {0x22,0x14,0x08,0x14,0x22},         //   (101)  x - 0x00D7 Multiplication Sign
 
    {0x08,0x08,0x2A,0x08,0x08},         //   (102)  + - 0x00F7 Division Sign
 
    {0x18,0x14,0x08,0x14,0x0C},         //   (103)    - 0x221E Infinity
 
    {0x44,0x4A,0x4A,0x51,0x51},         //   (104)  < - 0x2264 Less-Than or Equal to
 
    {0x51,0x51,0x4A,0x4A,0x44},         //   (105)  > - 0x2265 Greater-Than or Equal to
 
    {0x54,0x14,0x64,0x08,0x70},         //   (106)  .: - RF Symbol
 
    {0x70,0x7C,0x72,0x7C,0x70},         //   (107)  ^ - Lock symbol
 
    {0x70,0x5C,0x52,0x54,0x70},         //   (108)  / - Unlock symbol
 
    {0x0C,0x1E,0x3C,0x1E,0x0C},         //   (109)  <3 - Heart Symbol
 
    {0x18,0x22,0xFF,0x12,0x0C},         //   (110)  U - USB Symbol
 
	{0x22,0x5d,0x22,0x00,0x00},			//   (111) ez updown
 
	{0x14,0x3e,0x14,0x00,0x00},         //   (112) ez updown short
 
};
 
/*
 
 
 
*/
 
 
// Set start page
 
static void setStartPage(unsigned char d)
 
{
 
@@ -316,9 +321,9 @@ void ssd1306_drawlogo()
 
 
 
// Print a single character
 
void ssd1306_drawchar(char ascii, unsigned char row, unsigned char xPos)
 
void ssd1306_drawchar(unsigned char ascii, unsigned char row, unsigned char xPos)
 
{
 
    const char *srcPointer = (char*)-1;
 
    const unsigned char *srcPointer = (char*)-1;
 
 
    srcPointer = &fontData[(ascii-32)][0];
 
 
@@ -335,7 +340,7 @@ void ssd1306_drawchar(char ascii, unsign
 
 
 
// Print a single large character
 
void ssd1306_drawcharbig(char ascii, unsigned char row, unsigned char xPos)
 
void ssd1306_drawcharbig(unsigned char ascii, unsigned char row, unsigned char xPos)
 
{
 
    const char *srcPointer = (char*)-1;
 
 
@@ -399,11 +404,11 @@ void ssd1306_drawcharbig(char ascii, uns
 
 
 
// Print a string to the display
 
void ssd1306_drawstring(const char *dataPtr, unsigned char row, unsigned char xPos)
 
void ssd1306_drawstring(const unsigned char *dataPtr, unsigned char row, unsigned char xPos)
 
{
 
    char *srcPointer;
 
    unsigned char *srcPointer;
 
 
    srcPointer = (char*)dataPtr;
 
    srcPointer = (unsigned char*)dataPtr;
 
    ssd1306_drawchar(' ',row,xPos); // NBSP must be written first before the string start
 
 
    while(1)
 
@@ -417,7 +422,7 @@ void ssd1306_drawstring(const char *data
 
 
 
// Print a string to the display, big font
 
void ssd1306_drawstringbig(const char *dataPtr, unsigned char row, unsigned char xPos)
 
void ssd1306_drawstringbig(const unsigned char *dataPtr, unsigned char row, unsigned char xPos)
 
{
 
    char *srcPointer;
 
lib/ssd1306/ssd1306.h
Show inline comments
 
@@ -34,10 +34,10 @@
 
SPI_HandleTypeDef* spi_get();
 
 
void ssd1306_init(void);
 
void ssd1306_drawchar(char ascii, unsigned char row, unsigned char xPos);
 
void ssd1306_drawcharbig(char ascii, unsigned char row, unsigned char xPos);
 
void ssd1306_drawstring(const char *dataPtr, unsigned char row, unsigned char xPos);
 
void ssd1306_drawstringbig(const char *dataPtr, unsigned char row, unsigned char xPos);
 
void ssd1306_drawchar(unsigned char ascii, unsigned char row, unsigned char xPos);
 
void ssd1306_drawcharbig(unsigned char ascii, unsigned char row, unsigned char xPos);
 
void ssd1306_drawstring(const unsigned char *dataPtr, unsigned char row, unsigned char xPos);
 
void ssd1306_drawstringbig(const unsigned char *dataPtr, unsigned char row, unsigned char xPos);
 
void ssd1306_drawlogo();
 
void ssd1306_clearscreen();
 
src/display.c
Show inline comments
 
@@ -36,7 +36,14 @@ static int16_t last_state = 123;
 
static uint8_t goto_mode = MODE_HEAT;
 
static uint8_t reset_mode = RESET_REBOOT;
 

	
 
static char* sensor_lookup[] = {"NTC", "K  ", "E  ", "N  ", "R  ", "S  ", "T  "};
 

	
 
static uint8_t toggle = 0;
 

	
 
void display_1hz(void)
 
{
 
	toggle = !toggle;
 
}
 

	
 
// Display state machine
 
void display_process(void)
 
@@ -64,15 +71,15 @@ void display_process(void)
 
        {
 
            // Write text to OLED
 
            // [ therm :: idle ]
 
            ssd1306_drawstring("therm :: idle ", 0, 40);
 
            ssd1306_drawstring("therm \x87 idle ", 0, 40);
 
            status->pid_enabled = 0;
 

	
 
            if(temp_changed || state_changed) {
 
                char tempstr[6];
 
//                itoa_fp(status->temp, status->temp_frac, tempstr);
 
                ssd1306_drawstring("Temp: ", 3, 40);
 
                ssd1306_drawstring("    ", 3, 72);
 
                ssd1306_drawstring(tempstr, 3, 72);
 
                char tempstr[16];
 
                snprintf(tempstr, 16, "Temp: %g", status->temp);
 
                ssd1306_drawstring("             ", 3, 40);
 

	
 
                ssd1306_drawstring(tempstr, 3, 40);
 
            }
 

	
 
            if (state_changed) {
 
@@ -83,26 +90,27 @@ void display_process(void)
 

	
 
                case MODE_HEAT:
 
                {
 
                    if(set->val.plant_type == PLANT_HEATER)
 
                        ssd1306_drawstring("-> heat     ", 1, 40);
 
                    else
 
                        ssd1306_drawstring("-> cool     ", 1, 40);
 
					if(set->val.plant_type == PLANT_HEATER)
 
						ssd1306_drawstring("\x83 heat      ", 1, 40);
 
					else
 
						ssd1306_drawstring("\x83 cool      ", 1, 40);
 

	
 
                } break;
 

	
 
                case MODE_SETUP:
 
                {
 
                    ssd1306_drawstring("-> setup    ", 1, 40);
 
                    ssd1306_drawstring("\x83 setup    ", 1, 40);
 
                } break;
 

	
 
                case MODE_RESET:
 
                {
 
                    ssd1306_drawstring("-> reset    ", 1, 40);
 
                    ssd1306_drawstring("\x83 reset    ", 1, 40);
 
                } break;
 

	
 
				#ifdef BOOTLOADER_SHORTCUT
 
                case MODE_BOOTLOADER:
 
                {
 
                    ssd1306_drawstring("-> dfu      ", 1, 40);
 
                    ssd1306_drawstring("\x83 dfu      ", 1, 40);
 
                }
 
				#endif
 
            }
 
@@ -157,8 +165,6 @@ void display_process(void)
 
            ssd1306_drawstring("Sensor Type", 0, 40);
 
            ssd1306_drawlogo();
 

	
 
            // change scope to global?
 
            char* sensor_lookup[] = {"NTC", "K  ", "E  ", "N  ", "R  ", "S  ", "T  "};
 
			ssd1306_drawstring(sensor_lookup[set->val.sensor_type], 1, 60);
 
            ssd1306_drawstring("Press to accept", 3, 40);
 

	
 
@@ -168,7 +174,10 @@ void display_process(void)
 
            }
 
            else
 
            {
 
            	user_input((uint16_t*)&set->val.hysteresis);
 
            	user_input((uint16_t*)&set->val.sensor_type);
 
                if(set->val.sensor_type > 6)
 
                	set->val.sensor_type = 6;
 

	
 
            }
 
            // Event Handler
 
            // N/A
 
@@ -502,7 +511,7 @@ void display_process(void)
 
                status->state = STATE_IDLE;
 
            }
 
            else {
 
                user_input((uint16_t*)&set->val.setpoint_brew);
 
                user_input_signed(&set->val.setpoint_brew);
 
            }
 

	
 
            // Event Handler
 
@@ -532,7 +541,7 @@ void display_process(void)
 
                status->state = STATE_IDLE;
 
            }
 
            else {
 
                user_input((uint16_t*)&set->val.setpoint_brew);
 
                user_input_signed(&set->val.setpoint_brew);
 
            }
 

	
 
            // Event Handler
 
@@ -690,20 +699,18 @@ static float setpoint_last = 10023.0;
 
// Draw current setpoint on display
 
static void draw_setpoint(therm_status_t* status) {
 
    // FIXME: need to do this when switching modes too
 
//    if(status->temp != temp_last || trigger_drawsetpoint) {
 
//        char tempstr[3];
 
//        itoa_fp(status->temp, status->temp_frac, tempstr);
 
//        ssd1306_drawstringbig("      ", 3, 0);
 
//        ssd1306_drawstringbig(tempstr, 3, 0);
 
//    }
 
    if(status->temp != temp_last || trigger_drawsetpoint) {
 
        char tempstr[8];
 
        snprintf(tempstr, 8, "%g     ", status->temp);
 
        ssd1306_drawstringbig(tempstr, 3, 0);
 
    }
 

	
 
    if(trigger_drawsetpoint) 
 
        ssd1306_drawstringbig(">", 3, 74);
 

	
 
    if(status->setpoint != setpoint_last || trigger_drawsetpoint) {
 
        char tempstr[3];
 
        itoa(status->setpoint, tempstr, 10);
 
        ssd1306_drawstringbig("   ", 3, 90);
 
        char tempstr[5];
 
        snprintf(tempstr, 5, "%g     ", status->setpoint);
 
        ssd1306_drawstringbig(tempstr, 3, 90);
 
    }
 

	
src/main.c
Show inline comments
 
@@ -49,23 +49,30 @@ int main(void)
 
	// Soft timers
 
    uint32_t last_pid = 0;
 
    uint32_t last_thermostat = 0;
 
    uint32_t last_1hz = 0;
 
 
	while (1)
 
	{
 
		float duty = 0.0;
 
 
		if(HAL_GetTick() - last_1hz > 750)
 
		{
 
			display_1hz();
 
			last_1hz = HAL_GetTick();
 
		}
 
 
        if(flash_getsettings()->val.control_mode == MODE_PID && (HAL_GetTick() - last_pid > PID_PERIOD))
 
        {
 
        	runtime_status()->temp = tempsense_readtemp();
 
        	duty = pid_process();
 
//        	runtime_status()->temp = tempsense_readtemp();
 
//        	duty = pid_process();
 
            last_pid = HAL_GetTick();
 
        }
 
 
        // Thermostatic control
 
        if(flash_getsettings()->val.control_mode == MODE_THERMOSTAT && HAL_GetTick() - last_thermostat > SSR_PERIOD)
 
        {
 
        	runtime_status()->temp = tempsense_readtemp();
 
        	duty = thermostat_process();
 
//        	runtime_status()->temp = tempsense_readtemp();
 
//        	duty = thermostat_process();
 
            last_thermostat = HAL_GetTick();
 
        }
 
0 comments (0 inline, 0 general)