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