Display auf zwei Zeilen umgebaut
This commit is contained in:
parent
f17fe678a8
commit
04bf1cf86a
@ -41,13 +41,27 @@ namespace ElektronischeLast
|
||||
|
||||
void Display::run(void)
|
||||
{
|
||||
char *data;
|
||||
switch (this->current_state)
|
||||
{
|
||||
case StateIdle:
|
||||
if(this->new_data)
|
||||
if(this->active_line == ActiveLineNone)
|
||||
{
|
||||
this->new_data = false;
|
||||
this->current_state = StateWriteData;
|
||||
if(this->new_data1)
|
||||
{
|
||||
this->new_data1 = false;
|
||||
this->active_line = ActiveLine1;
|
||||
this->next_state = StateWriteData;
|
||||
set_cursor(Line1, 0U);
|
||||
}
|
||||
else if(this->new_data2)
|
||||
{
|
||||
this->new_data2 = false;
|
||||
this->active_line = ActiveLine2;
|
||||
this->next_state = StateWriteData;
|
||||
set_cursor(Line2, 0U);
|
||||
}
|
||||
this->pointer = 0U;
|
||||
}
|
||||
break;
|
||||
case StateDelay:
|
||||
@ -117,10 +131,20 @@ namespace ElektronischeLast
|
||||
this->next_state = StateIdle;
|
||||
break;
|
||||
case StateWriteData:
|
||||
write_data_4bit((std::uint8_t)this->string[this->pointer++]);
|
||||
if(this->string[this->pointer] == '\0')
|
||||
if(this->active_line == ActiveLine1)
|
||||
{
|
||||
data = this->line1;
|
||||
}
|
||||
else if(this->active_line == ActiveLine2)
|
||||
{
|
||||
data = this->line2;
|
||||
}
|
||||
|
||||
write_data_4bit((std::uint8_t)data[this->pointer++]);
|
||||
if(data[this->pointer] == '\0')
|
||||
{
|
||||
this->next_state = StateIdle;
|
||||
this->active_line = ActiveLineNone;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -175,11 +199,18 @@ namespace ElektronischeLast
|
||||
}
|
||||
}
|
||||
|
||||
void Display::print(const char* const string)
|
||||
void Display::print(Display::Line_t line, const char* const string)
|
||||
{
|
||||
strncpy(this->string, string, sizeof(this->string));
|
||||
this->pointer = 0U;
|
||||
this->new_data = true;
|
||||
if(line == Display::Line1)
|
||||
{
|
||||
strncpy(this->line1, string, sizeof(this->line1));
|
||||
this->new_data1 = true;
|
||||
}
|
||||
else if(line == Display::Line2)
|
||||
{
|
||||
strncpy(this->line2, string, sizeof(this->line2));
|
||||
this->new_data2 = true;
|
||||
}
|
||||
}
|
||||
|
||||
bool Display::ready_for_data(void)
|
||||
|
@ -114,16 +114,27 @@ namespace ElektronischeLast
|
||||
void set_backlight(bool on);
|
||||
void set_cursor(Line_t line, std::uint32_t position);
|
||||
void lcd_set_display(eDisplay_t display, eCursor_t cursor, eCursorBlink_t blink);
|
||||
void print(const char* const string);
|
||||
void print(Display::Line_t line, const char* const string);
|
||||
bool ready_for_data(void);
|
||||
void lcd_set_user_chars(Display::UserDefinedCharakter_t character, const uint8_t character_data[]);
|
||||
|
||||
private:
|
||||
typedef enum
|
||||
{
|
||||
ActiveLineNone,
|
||||
ActiveLine1,
|
||||
ActiveLine2,
|
||||
} ActiveLine_t;
|
||||
|
||||
State_t current_state;
|
||||
State_t next_state;
|
||||
std::uint32_t timer;
|
||||
char string[17];
|
||||
char line1[17];
|
||||
char line2[17];
|
||||
std::uint8_t pointer;
|
||||
bool new_data;
|
||||
ActiveLine_t active_line;
|
||||
bool new_data1;
|
||||
bool new_data2;
|
||||
bool timer_elapsed(void);
|
||||
void start_timer(std::uint32_t timeout);
|
||||
void lcd_cmd(uint8_t cmd);
|
||||
|
@ -133,7 +133,7 @@ int main (void)
|
||||
lcd.run();
|
||||
}
|
||||
lcd.lcd_set_display(Display::eDispalyOn, Display::eCursorOff, Display::eCursorBlinkOff);
|
||||
lcd.print("Elektronische Last");
|
||||
lcd.print(Display::Line1, "Elektronische Last");
|
||||
|
||||
while(1)
|
||||
{
|
||||
@ -179,25 +179,29 @@ int main (void)
|
||||
|
||||
char data[17U];
|
||||
|
||||
lcd.set_cursor(Display::Line1, 0U);
|
||||
int32_t len = snprintf(data, sizeof(data) - 1, "U:%" PRIu32 ".%02" PRIu32 "V",
|
||||
int32_t len = snprintf(data, sizeof(data) - 1, "%2" PRIu32 ".%02" PRIu32 "V",
|
||||
spannung / 1000U, spannung % 1000U / 10U);
|
||||
std::memset(&data[len], (int)' ', 16U - len);
|
||||
snprintf(&data[10], sizeof(data) - 10, "T:%" PRIu32 "%cC", temperatur, 0x1);
|
||||
snprintf(&data[12], sizeof(data) - 12, "%2" PRIu32 "%cC", temperatur, 0x1);
|
||||
data[16] = '\0';
|
||||
lcd.print(data);
|
||||
#if 0
|
||||
lcd.set_cursor(Display::Line2, 0U);
|
||||
len = snprintf(data, sizeof(data) - 1, "I:%" PRIu32 ".%02" PRIu32 "A",
|
||||
strom / 1000U, strom % 1000U / 10U);
|
||||
lcd.print(Display::Line1, data);
|
||||
|
||||
if(strom < 1000UL)
|
||||
{
|
||||
len = snprintf(data, sizeof(data) - 1, "%3" PRIu32 "mA", strom);
|
||||
}
|
||||
else
|
||||
{
|
||||
len = snprintf(data, sizeof(data) - 1, "%" PRIu32 ".%02" PRIu32 "A",
|
||||
strom / 1000U, strom % 1000U / 10U);
|
||||
}
|
||||
std::memset(&data[len], (int)' ', 16U - len);
|
||||
snprintf(&data[10], sizeof(data) - 10, "S:%" PRIu32 "W", geschwindigkeit);
|
||||
snprintf(&data[9], sizeof(data) - 9, "%4" PRIu32 "RPM", geschwindigkeit);
|
||||
data[16] = '\0';
|
||||
lcd.print(data);
|
||||
#endif
|
||||
lcd.print(Display::Line2, data);
|
||||
}
|
||||
lcd.run();
|
||||
}
|
||||
lcd.run();
|
||||
break;
|
||||
}
|
||||
serial_cyclic();
|
||||
|
Loading…
x
Reference in New Issue
Block a user