mapid/MAPID-CP/MAPID-CP.ino

237 lines
4.3 KiB
C++

/**
* MAPID/CP
*
* Malte's Arduino-Powered Info Display Control Program
*/
#include <serLCD.h>
#include <SerialCommand.h>
#include <avr/pgmspace.h>
#include "boards.h"
#include "config.h"
#include "readme.h"
#ifndef README_PROGMEM
#pragma warning "README_PROGMEM not set. The command README will not work."
#endif
SerialCommand SCmd;
serLCD lcd(PIN_LCD);
int line;
void setup() {
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, LOW);
Serial.begin(TTY_SPEED);
while (!Serial);
Serial.print("Booting...");
// Generic
SCmd.addCommand("VER", showVersion);
SCmd.addCommand("GETTY", showGetty);
SCmd.addCommand("HELP", help);
// LED
SCmd.addCommand("ON", ledOn);
SCmd.addCommand("OFF", ledOff);
// LCD
SCmd.addCommand("LCDON", lcdOn);
SCmd.addCommand("LCDOFF", lcdOff);
SCmd.addCommand("ECHO", lcdEcho);
SCmd.addCommand("CLS", lcdClear);
SCmd.addCommand("LINE", lcdLine);
// Show README
SCmd.addCommand("README", showReadMe);
SCmd.setDefaultHandler(commandNotFound);
Serial.println("Ready.");
Serial.print("Running ");
Serial.print(OS_NAME);
Serial.print(" v");
Serial.println(OS_VERSION);
Serial.println("Connected to TTY");
Serial.println("[INFO] Commands are all uppercase!");
line = 1;
lcd.clear();
lcd.selectLine(line);
lcd.print("Welcome to");
lcd.selectLine(2);
lcd.print(OS_NAME);
lcd.print(" v");
lcd.print(OS_VERSION);
// Show prompt
Serial.println();
Serial.print(TTY_PROMPT);
}
void loop() {
SCmd.readSerial();
}
void commandNotFound(const char *cmd) {
Serial.println("");
//Serial.println("[ERROR @ TTY:IN] COMMAND NOT FOUND!");
Serial.println("[ERROR] COMMAND NOT FOUND!");
// Show prompt again
Serial.print(TTY_PROMPT);
}
void lcdEcho() {
Serial.println("");
char *text;
//lcd.clear();
Serial.print(" [INFO] Writing text to LCD: ");
for (int i=0; i<16; i++) {
// Loop repeats once per token
//text = text = SCmd.next();
text = SCmd.next();
if (text == NULL)
break;
// Since tokens don't include SPACE, print it to debug OUTPUT
if (i > 0)
Serial.print(" ");
Serial.print(text);
if (i > 0)
lcd.print(" ");
lcd.print(text);
}
// Show prompt again
Serial.println();
Serial.print(TTY_PROMPT);
}
void lcdLine() {
Serial.println("");
line = atoi(SCmd.next());
Serial.print(" [INFO] Select line ");
Serial.print(line);
Serial.println("");
lcd.selectLine(line);
// Show prompt again
Serial.print(TTY_PROMPT);
}
void lcdClear() {
Serial.println("");
lcd.clear();
// Show prompt again
Serial.println();
Serial.print(TTY_PROMPT);
}
void showVersion() {
Serial.println("");
Serial.print(OS_NAME);
Serial.print(" v");
Serial.println(OS_VERSION);
Serial.print("Hardware: Arduino ");
Serial.println(BOARD);
Serial.print(TTY_PROMPT);
}
void showGetty() {
Serial.println("");
lcd.clear();
lcd.selectLine(1);
lcd.print("Welcome to");
lcd.selectLine(2);
lcd.print(OS_NAME);
lcd.print(" v");
lcd.print(OS_VERSION);
// Show prompt again
Serial.print(TTY_PROMPT);
}
void showReadMe() {
#ifdef README_PROGMEM
Serial.print(readme);
#else
Serial.println("Option README_PROGMEM not set in config.h!");
#endif
}
void help() {
Serial.println();
Serial.println("Commands:");
Serial.println(" VER");
Serial.println(" GETTY");
Serial.println(" HELP");
Serial.println(" ON");
Serial.println(" OFF");
Serial.println(" LCDON");
Serial.println(" LCDOFF");
Serial.println(" ECHO Text");
Serial.println(" CLS");
Serial.println(" LINE i");
#ifdef README_PROGMEM
Serial.println(" README");
#endif
// Show prompt again
Serial.println();
Serial.print(TTY_PROMPT);
}
void ledOn() {
Serial.println("");
Serial.println("Turning LED to *ON*");
//lcd.println("LED on");
digitalWrite(PIN_LED, HIGH);
// Show prompt again
Serial.print(TTY_PROMPT);
}
void ledOff() {
Serial.println("");
Serial.println("Turning LED to *OFF*");
//lcd.println("LED off");
digitalWrite(PIN_LED, LOW);
// Show prompt again
Serial.print(TTY_PROMPT);
}
void lcdOn() {
Serial.println("");
// Turn display on
Serial.println("Turning LCD screen to *ON*");
lcd.display();
lcd.setBrightness(30);
// Show prompt again
Serial.print(TTY_PROMPT);
}
void lcdOff() {
Serial.println("");
// Turn display on
Serial.println("Turning LCD screen to *OFF*");
lcd.noDisplay();
lcd.setBrightness(1);
// Show prompt again
Serial.print(TTY_PROMPT);
}