void ActionMenuItem::Render(LCD& lcd, byte cols, byte rows) const { lcd.setCursor(0, 0); Pad(lcd, cols, lcd.print(m_label)); lcd.setCursor(0, 1); Pad(lcd, cols, lcd.print(m_prompt)); }
void ConfigMenuItem::Render(LCD& lcd, byte cols, byte rows) const { size_t size = 0; long value = m_value->Get(); // render label lcd.setCursor(0, 0); size = lcd.print(m_label); Pad(lcd, cols, size); // render value lcd.setCursor(2, 1); size = m_value->PrintValue(lcd); Pad(lcd, cols - 4, size); // render navigation lcd.setCursor(0, 1); if (value > m_value->GetMin()) { lcd.print(ARROW_LEFT); } else { lcd.print(F(" ")); } lcd.print(F(" ")); lcd.setCursor(cols - 2, 1); lcd.print(F(" ")); if (value < m_value->GetMax()) { lcd.print(ARROW_RIGHT); } else { lcd.print(F(" ")); } }
void InfoIdleScreen::Render(LCD& lcd, byte cols, byte rows) const { lcd.setCursor(0, 0); if (m_sequence->IsRunning()) { int _chars = 0; _chars += lcd.print(F("Shot ")); _chars += lcd.print(m_sequence->GetShotsFired()); _chars += lcd.print(F("/")); _chars += lcd.print(m_sequence->GetShotsTotal()); Pad(lcd, cols, _chars); _chars = 0; lcd.setCursor(0, 1); _chars += lcd.print(F("Rem. ")); long _secondsRemaining = m_sequence->GetSecondsRemaining(); _chars += PrintTime(_secondsRemaining, lcd); Pad(lcd, cols, _chars); } else { Pad(lcd, cols, lcd.print(F("Idle"))); lcd.setCursor(0, 1); Pad(lcd, cols, 0); } }
int main(void) { POWEROFF(); delayU(100); POWERUP(); lcd.setLineOne("Welcome to"); lcd.setLineTwo("TowerBuilder"); sei(); //Enable global interrupt while(1) { //Send 1 character to LCD if LCD is ready if(lcd.ready()) lcd.print(); //Task scheduler if(taskDone == FALSE) { switch(taskNumber++) { case 0: button.readButtons(); menu(); break; case 1: adc.convertPOT(); break; case 2: sensor.readSensors(); break; case 3: first(); break; case 4: break; case 5: break; case 6: break; default: taskNumber = 0; break; } taskDone = TRUE; //Update servo's channel after each task finished while(updateChannel == FALSE); servo.servoPWM(); updateChannel = FALSE; } } }
void MenuItem::Pad(LCD& lcd, byte cols, size_t written) const { while (written < cols) { written += lcd.print(F(" ")); } }