display state machine working

This commit is contained in:
Wolfgang Hottgenroth 2017-05-29 13:49:52 +02:00
parent a407f01559
commit 209e1bd1c5
3 changed files with 221 additions and 142 deletions

View File

@ -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() {

View File

@ -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)
{ {

View File

@ -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);