display state machine working
This commit is contained in:
parent
a407f01559
commit
209e1bd1c5
@ -22,18 +22,94 @@
|
|||||||
|
|
||||||
#include "oled.h"
|
#include "oled.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
IDLE = 0,
|
||||||
|
STARTED = 1,
|
||||||
|
RUNNING = 2,
|
||||||
|
OVERRUN = 3
|
||||||
|
} tTimerState;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t toggle;
|
||||||
|
uint8_t setModeTemperature;
|
||||||
|
uint8_t setModeTime;
|
||||||
|
tTimerState timerState;
|
||||||
|
uint32_t targetTemperature;
|
||||||
|
uint32_t currentTemperature;
|
||||||
|
uint32_t targetTime;
|
||||||
|
uint32_t currentTime;
|
||||||
|
uint32_t overrunTime;
|
||||||
|
} tDisplay;
|
||||||
|
|
||||||
|
|
||||||
|
tDisplay display = {
|
||||||
|
.toggle = 0, .setModeTemperature = 0, .setModeTime = 0,
|
||||||
|
.timerState = IDLE,
|
||||||
|
.targetTemperature = 80, .currentTemperature = 75,
|
||||||
|
.targetTime = 180, .currentTime = 175,
|
||||||
|
.overrunTime = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void updateDisplay(void *handle) {
|
||||||
|
tDisplay *lDisplay = (tDisplay*) handle;
|
||||||
|
lDisplay->toggle ^= 0x01;
|
||||||
|
char buf[32];
|
||||||
|
|
||||||
|
sprintf(buf, "ThermometerTeaTimer");
|
||||||
|
LED_P6x8Str(0, 0, buf);
|
||||||
|
|
||||||
|
if (lDisplay->setModeTemperature && lDisplay->toggle) {
|
||||||
|
sprintf(buf, " %3d'C", lDisplay->currentTemperature);
|
||||||
|
} else {
|
||||||
|
sprintf(buf, "%3d'C %3d'C", lDisplay->targetTemperature, lDisplay->currentTemperature);
|
||||||
|
}
|
||||||
|
LED_P8x16Str(0, 2, buf);
|
||||||
|
|
||||||
|
if (lDisplay->setModeTime && lDisplay->toggle) {
|
||||||
|
sprintf(buf, " %3ds", lDisplay->currentTime);
|
||||||
|
} else {
|
||||||
|
sprintf(buf, "%3ds %3ds", lDisplay->targetTime, lDisplay->currentTime);
|
||||||
|
}
|
||||||
|
LED_P8x16Str(0, 4, buf);
|
||||||
|
|
||||||
|
sprintf(buf, " %5ds", lDisplay->overrunTime);
|
||||||
|
LED_P8x16Str(0, 6, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void secondTick(void *handle) {
|
||||||
|
tDisplay *lDisplay = (tDisplay*) handle;
|
||||||
|
|
||||||
|
switch (lDisplay->timerState) {
|
||||||
|
case STARTED:
|
||||||
|
lDisplay->currentTime = lDisplay->targetTime;
|
||||||
|
lDisplay->timerState = RUNNING;
|
||||||
|
break;
|
||||||
|
case RUNNING:
|
||||||
|
lDisplay->currentTime -= 1;
|
||||||
|
if (lDisplay->currentTime == 0) {
|
||||||
|
lDisplay->timerState = OVERRUN;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OVERRUN:
|
||||||
|
lDisplay->overrunTime += 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void blink(void *handle) {
|
void blink(void *handle) {
|
||||||
static uint32_t i = 0;
|
|
||||||
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
|
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
|
||||||
LED_PrintValueI(0, 1, i);
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_setup_1() {
|
void my_setup_1() {
|
||||||
schInit();
|
schInit();
|
||||||
schAdd(blink, NULL, 0, 100);
|
schAdd(blink, NULL, 0, 100);
|
||||||
|
schAdd(updateDisplay, &display, 0, 250);
|
||||||
|
schAdd(secondTick, &display, 0, 1000);
|
||||||
|
|
||||||
|
display.timerState = STARTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_loop() {
|
void my_loop() {
|
||||||
|
274
my_src/oled.c
274
my_src/oled.c
@ -356,142 +356,144 @@ void LED_PrintBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned ch
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LED_PrintValueC(unsigned char x, unsigned char y, char data)
|
//void LED_PrintValueC(unsigned char x, unsigned char y, char data)
|
||||||
{
|
//{
|
||||||
unsigned char i,j,k;
|
// unsigned char i,j,k;
|
||||||
if(data < 0)
|
// if(data < 0)
|
||||||
{
|
// {
|
||||||
LED_P6x8Char(x,y,'-');
|
// LED_P6x8Char(x,y,'-');
|
||||||
data = - data;
|
// data = - data;
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
LED_P6x8Char(x,y,'+');
|
// LED_P6x8Char(x,y,'+');
|
||||||
}
|
// }
|
||||||
i = data/100;
|
// i = data/100;
|
||||||
j = (data%100)/10;
|
// j = (data%100)/10;
|
||||||
k = data%10;
|
// k = data%10;
|
||||||
LED_P6x8Char(x+6,y,i+48);
|
// LED_P6x8Char(x+6,y,i+48);
|
||||||
LED_P6x8Char(x+12,y,j+48);
|
// LED_P6x8Char(x+12,y,j+48);
|
||||||
LED_P6x8Char(x+18,y,k+48);
|
// LED_P6x8Char(x+18,y,k+48);
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
void LED_PrintValueI(unsigned char x, unsigned char y, int data)
|
//void LED_PrintValueI(unsigned char x, unsigned char y, int data)
|
||||||
{
|
//{
|
||||||
unsigned char i,j,k,l,m;
|
// unsigned char i,j,k,l,m;
|
||||||
if(data < 0)
|
// if(data < 0)
|
||||||
{
|
// {
|
||||||
LED_P6x8Char(x,y,'-');
|
// LED_P6x8Char(x,y,'-');
|
||||||
data = - data;
|
// data = - data;
|
||||||
}
|
// }
|
||||||
else
|
//// else
|
||||||
{
|
//// {
|
||||||
LED_P6x8Char(x,y,'+');
|
//// LED_P6x8Char(x,y,'+');
|
||||||
}
|
//// }
|
||||||
|
//
|
||||||
l = data/10000;
|
// l = data/10000;
|
||||||
m= (data%10000)/1000;
|
// m= (data%10000)/1000;
|
||||||
i = (data%1000)/100;
|
// i = (data%1000)/100;
|
||||||
j = (data%100)/10;
|
// j = (data%100)/10;
|
||||||
k = data%10;
|
// k = data%10;
|
||||||
LED_P6x8Char(x+6,y,l+48);
|
//
|
||||||
LED_P6x8Char(x+12,y,m+48);
|
// unsigned char c;
|
||||||
LED_P6x8Char(x+18,y,i+48);
|
// c = (l == 0) ? ' ' : (l + 48); LED_P6x8Char(x+6,y,c);
|
||||||
LED_P6x8Char(x+24,y,j+48);
|
// c = (m == 0 && l == 0) ? ' ' : (m + 48); LED_P6x8Char(x+12,y,c);
|
||||||
LED_P6x8Char(x+30,y,k+48);
|
// c = (i == 0 && m == 0 && l == 0) ? ' ' : (i + 48); LED_P6x8Char(x+18,y,c);
|
||||||
}
|
// c = (j == 0 && i == 0 && m == 0 && l == 0) ? ' ' : (j + 48); LED_P6x8Char(x+24,y,c);
|
||||||
|
// LED_P6x8Char(x+30,y,k+48);
|
||||||
void LED_PrintValueFP(unsigned char x, unsigned char y, unsigned int data, unsigned char num)
|
//}
|
||||||
{
|
//
|
||||||
unsigned char m,i,j,k;
|
//void LED_PrintValueFP(unsigned char x, unsigned char y, unsigned int data, unsigned char num)
|
||||||
LED_P6x8Char(x, y, '.');
|
//{
|
||||||
m= data/1000;
|
// unsigned char m,i,j,k;
|
||||||
i = (data%1000)/100;
|
// LED_P6x8Char(x, y, '.');
|
||||||
j = (data%100)/10;
|
// m= data/1000;
|
||||||
k = data%10;
|
// i = (data%1000)/100;
|
||||||
switch(num)
|
// j = (data%100)/10;
|
||||||
{
|
// k = data%10;
|
||||||
case 1: LED_P6x8Char(x+6,y,k+48);
|
// switch(num)
|
||||||
break;
|
// {
|
||||||
case 2: LED_P6x8Char(x+6,y,j+48);
|
// case 1: LED_P6x8Char(x+6,y,k+48);
|
||||||
LED_P6x8Char(x+12,y,k+48);
|
// break;
|
||||||
break;
|
// case 2: LED_P6x8Char(x+6,y,j+48);
|
||||||
case 3: LED_P6x8Char(x+6,y,i+48);
|
// LED_P6x8Char(x+12,y,k+48);
|
||||||
LED_P6x8Char(x+12,y,j+48);
|
// break;
|
||||||
LED_P6x8Char(x+18,y,k+48);
|
// case 3: LED_P6x8Char(x+6,y,i+48);
|
||||||
break;
|
// LED_P6x8Char(x+12,y,j+48);
|
||||||
case 4: LED_P6x8Char(x+6,y,m+48);
|
// LED_P6x8Char(x+18,y,k+48);
|
||||||
LED_P6x8Char(x+12,y,i+48);
|
// break;
|
||||||
LED_P6x8Char(x+18,y,j+48);
|
// case 4: LED_P6x8Char(x+6,y,m+48);
|
||||||
LED_P6x8Char(x+24,y,k+48);
|
// LED_P6x8Char(x+12,y,i+48);
|
||||||
break;
|
// LED_P6x8Char(x+18,y,j+48);
|
||||||
}
|
// LED_P6x8Char(x+24,y,k+48);
|
||||||
}
|
// break;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
void LED_PrintValueF(unsigned char x, unsigned char y, float data, unsigned char num)
|
//
|
||||||
{
|
//
|
||||||
unsigned char l,m,i,j,k;
|
//void LED_PrintValueF(unsigned char x, unsigned char y, float data, unsigned char num)
|
||||||
unsigned char databiti = 6;
|
//{
|
||||||
unsigned int tempdataui = 0;
|
// unsigned char l,m,i,j,k;
|
||||||
int tempdataii = (int)data;
|
// unsigned char databiti = 6;
|
||||||
long int tempdatalp = (long int)((data - (int)data)*10000);
|
// unsigned int tempdataui = 0;
|
||||||
|
// int tempdataii = (int)data;
|
||||||
|
// long int tempdatalp = (long int)((data - (int)data)*10000);
|
||||||
if(data < 0.0000001) LED_P6x8Char(x, y,'-');
|
//
|
||||||
else LED_P6x8Char(x, y,'+');
|
//
|
||||||
if(tempdataii < 0)tempdataii = - tempdataii;
|
// if(data < 0.0000001) LED_P6x8Char(x, y,'-');
|
||||||
tempdataui = tempdataii;
|
// else LED_P6x8Char(x, y,'+');
|
||||||
l = tempdataui/10000;
|
// if(tempdataii < 0)tempdataii = - tempdataii;
|
||||||
m= (tempdataui%10000)/1000;
|
// tempdataui = tempdataii;
|
||||||
i = (tempdataui%1000)/100;
|
// l = tempdataui/10000;
|
||||||
j = (tempdataui%100)/10;
|
// m= (tempdataui%10000)/1000;
|
||||||
k = tempdataui%10;
|
// i = (tempdataui%1000)/100;
|
||||||
if (l != 0)
|
// j = (tempdataui%100)/10;
|
||||||
{
|
// k = tempdataui%10;
|
||||||
LED_P6x8Char(x+6,y,l+48);
|
// if (l != 0)
|
||||||
LED_P6x8Char(x+12,y,m+48);
|
// {
|
||||||
LED_P6x8Char(x+18,y,i+48);
|
// LED_P6x8Char(x+6,y,l+48);
|
||||||
LED_P6x8Char(x+24,y,j+48);
|
// LED_P6x8Char(x+12,y,m+48);
|
||||||
LED_P6x8Char(x+30,y,k+48);
|
// LED_P6x8Char(x+18,y,i+48);
|
||||||
}
|
// LED_P6x8Char(x+24,y,j+48);
|
||||||
else if(m != 0)
|
// LED_P6x8Char(x+30,y,k+48);
|
||||||
{
|
// }
|
||||||
databiti = 5;
|
// else if(m != 0)
|
||||||
LED_P6x8Char(x+6,y,m+48);
|
// {
|
||||||
LED_P6x8Char(x+12,y,i+48);
|
// databiti = 5;
|
||||||
LED_P6x8Char(x+18,y,j+48);
|
// LED_P6x8Char(x+6,y,m+48);
|
||||||
LED_P6x8Char(x+24,y,k+48);
|
// LED_P6x8Char(x+12,y,i+48);
|
||||||
}
|
// LED_P6x8Char(x+18,y,j+48);
|
||||||
else if(i != 0)
|
// LED_P6x8Char(x+24,y,k+48);
|
||||||
{
|
// }
|
||||||
databiti = 4;
|
// else if(i != 0)
|
||||||
LED_P6x8Char(x+6,y,i+48);
|
// {
|
||||||
LED_P6x8Char(x+12,y,j+48);
|
// databiti = 4;
|
||||||
LED_P6x8Char(x+18,y,k+48);
|
// LED_P6x8Char(x+6,y,i+48);
|
||||||
}
|
// LED_P6x8Char(x+12,y,j+48);
|
||||||
else if(j != 0)
|
// LED_P6x8Char(x+18,y,k+48);
|
||||||
{
|
// }
|
||||||
databiti = 3;
|
// else if(j != 0)
|
||||||
LED_P6x8Char(x+6,y,j+48);
|
// {
|
||||||
LED_P6x8Char(x+12,y,k+48);
|
// databiti = 3;
|
||||||
}
|
// LED_P6x8Char(x+6,y,j+48);
|
||||||
else
|
// LED_P6x8Char(x+12,y,k+48);
|
||||||
{
|
// }
|
||||||
databiti = 2;
|
// else
|
||||||
LED_P6x8Char(x+6,y,k+48);
|
// {
|
||||||
}
|
// databiti = 2;
|
||||||
if(tempdatalp < 0)tempdatalp = - tempdatalp;
|
// LED_P6x8Char(x+6,y,k+48);
|
||||||
switch(num)
|
// }
|
||||||
{
|
// if(tempdatalp < 0)tempdatalp = - tempdatalp;
|
||||||
case 0: break;
|
// switch(num)
|
||||||
case 1: LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp / 1000),num);break;
|
// {
|
||||||
case 2: LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp / 100),num);break;
|
// case 0: break;
|
||||||
case 3: LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp / 10),num);break;
|
// case 1: LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp / 1000),num);break;
|
||||||
case 4: LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp),num);break;
|
// case 2: LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp / 100),num);break;
|
||||||
}
|
// case 3: LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp / 10),num);break;
|
||||||
}
|
// case 4: LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp),num);break;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
void LED_Cursor(unsigned char cursor_column, unsigned char cursor_row)
|
void LED_Cursor(unsigned char cursor_column, unsigned char cursor_row)
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
* Adapted from Arduino to STM32 HAL by wollud1969
|
* Adapted from Arduino to STM32 HAL by wollud1969
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void LED_Init(void);
|
||||||
|
|
||||||
void LED_CLS(void);
|
void LED_CLS(void);
|
||||||
void LED_Set_Pos(unsigned char x,unsigned char y);//Set the coordinate
|
void LED_Set_Pos(unsigned char x,unsigned char y);//Set the coordinate
|
||||||
@ -25,9 +26,9 @@ void LED_P8x16Str(unsigned char x,unsigned char y,char ch[]);
|
|||||||
|
|
||||||
void LED_PrintBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char bmp[]);
|
void LED_PrintBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char bmp[]);
|
||||||
void LED_Fill(unsigned char dat);
|
void LED_Fill(unsigned char dat);
|
||||||
void LED_PrintValueC(unsigned char x, unsigned char y,char data);
|
//void LED_PrintValueC(unsigned char x, unsigned char y,char data);
|
||||||
void LED_PrintValueI(unsigned char x, unsigned char y, int data);
|
//void LED_PrintValueI(unsigned char x, unsigned char y, int data);
|
||||||
void LED_PrintValueF(unsigned char x, unsigned char y, float data, unsigned char num);
|
//void LED_PrintValueF(unsigned char x, unsigned char y, float data, unsigned char num);
|
||||||
void LED_PrintEdge(void);
|
void LED_PrintEdge(void);
|
||||||
void LED_Cursor(unsigned char cursor_column, unsigned char cursor_row);
|
void LED_Cursor(unsigned char cursor_column, unsigned char cursor_row);
|
||||||
void LED_PrintLine(void);
|
void LED_PrintLine(void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user