This code displays the current information about the motors and sensors.
#ifndef WORLDSTATE_H #define WORLDSTATE_H void initializeLog(); void worldState(bool updateLog, int heading, float power, float motor1ratio, float motor2ratio, float motor3ratio, float motor4ratio); void closeLog(); #endif // WORLDSTATE_H
// Required FEH libraries #include <FEHRPS.h> #include <FEHIO.h> #include <FEHLCD.h> #include <FEHUtility.h> #include <FEHBattery.h> #include <FEHSD.h> // Required custom libraries #include "constants.h" #include "worldstate.h" /* This function initializes the SD card for logging. It closes any open logs, opens a new log, and prints a log header. * From past experiences, it is best to try to close all previous logs in case any are still open. * Last modified: 3/14/2016 JKL */ void initializeLog(){ // Must close any remaining log files left over to prevent any SD card issues for (int x = 0; x<=100; x++) { LCD.WriteRC("Closing Log:", 7, 3); LCD.WriteRC(x, 7, 16); SD.CloseLog(); } SD.OpenLog(); SD.Printf("Title: %s - Version: %f\n", TITLE, VERSION); SD.Printf("Course: %c - Red: %d - White: %d - Blue: %d\n", RPS.CurrentRegionLetter(), RPS.RedSwitchDirection(), RPS.WhiteSwitchDirection(), RPS.BlueSwitchDirection() ); SD.Printf("Time\tRPSTime\tBatVolt\tMS1\tMS2\tMS3\tMS4\tMS5\tMS6\tMS7\tMS8\tCDSCell\tMot1\tMot2\tMot3\tMot4\tH.\tRPS_H\tRPS_X\tRPS_Y"); } // end initializeLog function /* This function closes the SD log. This allows for the FEHSD.h library to be isolated in this program. * Last Modified: 3/14/2016 JKL */ void closeLog() { SD.CloseLog(); } // end closeLog function /* This function prints the world state to the Proteus LCD and, if requested, to a log file * Inputs: - bool updateLog - true writes the world state to the log file / false does not * - The rest of the arguments are what is written to the log file * Last Modified: 3/14/2016 JKL */ void worldState(bool updateLog, int heading, float power, float motor1ratio, float motor2ratio, float motor3ratio, float motor4ratio) { LCD.Clear(BLACK); LCD.DrawRectangle(2*12+1, 4*17+1, 22*12-1, 6*16-1); // LCD.WriteRC("* *", 5, 2); // LCD.WriteRC("* *", 6, 2); // LCD.WriteRC("* *", 7, 2); // LCD.WriteRC("* *", 8, 2); LCD.SetFontColor(WHITE); LCD.WriteRC(TimeNow(), 13, 5); LCD.WriteRC(RPS.Time(), 13, 15); if (updateLog) SD.Printf("\n%f\t%f\t", TimeNow(), RPS.Time()); if (updateLog) SD.Printf("%f\t", Battery.Voltage()); LCD.WriteRC( (int) microswitch1.Value(), 0, 2); LCD.WriteRC( (int) microswitch2.Value(), 0, 23); LCD.WriteRC( (int) microswitch3.Value(), 2, 25); LCD.WriteRC( (int) microswitch4.Value(), 11, 25); LCD.WriteRC( (int) microswitch5.Value(), 13, 23); LCD.WriteRC( (int) microswitch6.Value(), 13, 2); LCD.WriteRC( (int) microswitch7.Value(), 11, 0); LCD.WriteRC( (int) microswitch8.Value(), 2, 0); if (updateLog) SD.Printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t", (int) microswitch1.Value(), (int) microswitch2.Value(), (int) microswitch3.Value(), (int) microswitch4.Value(), (int) microswitch5.Value(), (int) microswitch6.Value(), (int) microswitch7.Value(), (int) microswitch8.Value()); if (0.0 < cdscell.Value() && cdscell.Value() < 0.8) LCD.SetFontColor(RED); if (1.0 < cdscell.Value() && cdscell.Value() < 1.8) LCD.SetFontColor(BLUE); LCD.WriteRC( cdscell.Value(), 0, 11); if (updateLog) SD.Printf("%f\t", cdscell.Value()); LCD.SetFontColor(WHITE); LCD.WriteRC("Mot1", 2, 2); LCD.WriteRC(power * motor1ratio, 3, 2); LCD.WriteRC("Mot2", 2, 20); LCD.WriteRC(power * motor2ratio, 3, 18); LCD.WriteRC("Mot3", 11, 20); LCD.WriteRC(power * motor3ratio, 10, 18); LCD.WriteRC("Mot4", 11, 2); LCD.WriteRC(power * motor4ratio, 10, 2); if (updateLog) SD.Printf("%f\t%f\t%f\t%f\t", power * motor1ratio, power * motor2ratio, power * motor3ratio, power * motor4ratio); LCD.WriteRC("H:", 2, 10); LCD.WriteRC(heading, 2, 12); if (updateLog) SD.Printf("%d\t", heading); LCD.WriteRC("B:", 11, 9); LCD.WriteRC(RPS.Heading(), 11, 11); LCD.WriteRC("X:", 12, 4); LCD.WriteRC(RPS.X(), 12, 6); LCD.WriteRC("Y:", 12, 14); LCD.WriteRC(RPS.Y(), 12, 16); if (updateLog) SD.Printf("%f\t%f\t%f\t", RPS.Heading(), RPS.X(), RPS.Y()); } // end worldState function
Here is a picture that shows how to information was displayed onto the Proteus LCD screen.