add sensor serial command
This commit is contained in:
parent
71e9fd7d4f
commit
f5cfe91fcb
|
@ -70,7 +70,8 @@ bool control_buttonB=false;
|
||||||
|
|
||||||
|
|
||||||
unsigned long loopmillis;
|
unsigned long loopmillis;
|
||||||
unsigned long looptime_duration;
|
unsigned long looptime_duration_min;
|
||||||
|
unsigned long looptime_duration_max;
|
||||||
|
|
||||||
|
|
||||||
#define ADSREADPERIOD 3 //set slightly higher as actual read time to avoid unnecessary register query
|
#define ADSREADPERIOD 3 //set slightly higher as actual read time to avoid unnecessary register query
|
||||||
|
|
|
@ -318,7 +318,9 @@ void display_standingDisarmedDisplay(ESCSerialComm& escFront, ESCSerialComm& esc
|
||||||
display.setFont();
|
display.setFont();
|
||||||
display.setCursor(0,0);
|
display.setCursor(0,0);
|
||||||
|
|
||||||
if (datalogging) {
|
//Row1
|
||||||
|
|
||||||
|
if (getDatalogging()) {
|
||||||
display.print(getLogFilename());
|
display.print(getLogFilename());
|
||||||
}else{
|
}else{
|
||||||
display.print("LOG DISABLED");
|
display.print("LOG DISABLED");
|
||||||
|
@ -328,12 +330,15 @@ void display_standingDisarmedDisplay(ESCSerialComm& escFront, ESCSerialComm& esc
|
||||||
display.print(F("s"));
|
display.print(F("s"));
|
||||||
display.println();
|
display.println();
|
||||||
|
|
||||||
|
//Row2
|
||||||
|
|
||||||
display.print(F("ESC F="));
|
display.print(F("ESC F="));
|
||||||
display.print(escFront.getControllerConnected());
|
display.print(escFront.getControllerConnected());
|
||||||
display.print(F(" R="));
|
display.print(F(" R="));
|
||||||
display.print(escRear.getControllerConnected());
|
display.print(escRear.getControllerConnected());
|
||||||
display.println();
|
display.println();
|
||||||
|
|
||||||
|
//Row3
|
||||||
|
|
||||||
display.print("throttle=");
|
display.print("throttle=");
|
||||||
dtostrf(ads_throttle_A_raw,1,0,buf);
|
dtostrf(ads_throttle_A_raw,1,0,buf);
|
||||||
|
@ -343,6 +348,8 @@ void display_standingDisarmedDisplay(ESCSerialComm& escFront, ESCSerialComm& esc
|
||||||
display.print((String)buf);
|
display.print((String)buf);
|
||||||
display.println();
|
display.println();
|
||||||
|
|
||||||
|
//Row 4
|
||||||
|
|
||||||
display.print("brake=");
|
display.print("brake=");
|
||||||
dtostrf(ads_brake_raw,1,0,buf);
|
dtostrf(ads_brake_raw,1,0,buf);
|
||||||
display.print((String)buf);
|
display.print((String)buf);
|
||||||
|
|
|
@ -11,16 +11,21 @@ boolean sdcard_available=false;
|
||||||
boolean datalogging=true;
|
boolean datalogging=true;
|
||||||
String datalogging_filename="UNKNOWN.txt";
|
String datalogging_filename="UNKNOWN.txt";
|
||||||
|
|
||||||
|
#define LOGGINGINTERVAL 100
|
||||||
|
|
||||||
bool serialCommandEcho_Enabled=true;
|
bool serialCommandEcho_Enabled=true;
|
||||||
|
|
||||||
bool initLogging();
|
bool initLogging();
|
||||||
void loggingLoop(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm& escRear);
|
void loggingLoop(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm& escRear);
|
||||||
|
|
||||||
|
|
||||||
void writeLogComment(unsigned long time, String msg);
|
void writeLogComment(unsigned long time, String msg);
|
||||||
void printFileListing();
|
void printFileListing();
|
||||||
void printDirectory(File dir, int numTabs,String parent);
|
void printDirectory(File dir, int numTabs,String parent);
|
||||||
void printFile(String filename);
|
void printFile(String filename);
|
||||||
void removeFile(String filename);
|
void removeFile(String filename);
|
||||||
void serialCommandLoop();
|
void serialCommandLoop(unsigned long loopmillis, ESCSerialComm& escFront, ESCSerialComm& escRear);
|
||||||
|
float getBatteryVoltage(ESCSerialComm& escFront, ESCSerialComm& escRear);
|
||||||
|
|
||||||
|
|
||||||
bool initLogging() {
|
bool initLogging() {
|
||||||
|
@ -58,7 +63,7 @@ bool initLogging() {
|
||||||
Serial.print(datalogging_filename); Serial.println(" is free");
|
Serial.print(datalogging_filename); Serial.println(" is free");
|
||||||
display.print(datalogging_filename);
|
display.print(datalogging_filename);
|
||||||
if (!datalogging) { //datalogging is disabled during boot
|
if (!datalogging) { //datalogging is disabled during boot
|
||||||
display.print( "NO LOG");
|
display.print(" OFF");
|
||||||
}
|
}
|
||||||
display.println(); display.display();
|
display.println(); display.display();
|
||||||
|
|
||||||
|
@ -71,23 +76,23 @@ void loggingLoop(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm
|
||||||
|
|
||||||
static unsigned long last_datalogging_write=0;
|
static unsigned long last_datalogging_write=0;
|
||||||
static boolean logging_headerWritten=false;
|
static boolean logging_headerWritten=false;
|
||||||
if (datalogging && sdcard_available) {
|
|
||||||
#define LOGGINGINTERVAL 100
|
if (loopmillis-last_datalogging_write>LOGGINGINTERVAL)
|
||||||
if (loopmillis-last_datalogging_write>LOGGINGINTERVAL)
|
{
|
||||||
{
|
last_datalogging_write=loopmillis;
|
||||||
last_datalogging_write=loopmillis;
|
|
||||||
|
if (datalogging && sdcard_available) {
|
||||||
|
|
||||||
File dataFile = SD.open(datalogging_filename.c_str(), FILE_WRITE);
|
File dataFile = SD.open(datalogging_filename.c_str(), FILE_WRITE);
|
||||||
|
|
||||||
|
|
||||||
if (dataFile) { // if the file is available, write to it
|
if (dataFile) { // if the file is available, write to it
|
||||||
if (!logging_headerWritten) {
|
if (!logging_headerWritten) {
|
||||||
dataFile.print("time,cmd_FrontL,cmd_FrontR,cmd_RearL,cmd_RearR,");
|
dataFile.print("time,cmd_FrontL,cmd_FrontR,cmd_RearL,cmd_RearR,");
|
||||||
dataFile.print("current_FrontL,current_FrontR,current_RearL,current_RearR,");
|
dataFile.print("current_FrontL,current_FrontR,current_RearL,current_RearR,");
|
||||||
dataFile.print("rpm_FrontL,rpm_FrontR,rpm_RearL,rpm_RearR,");
|
dataFile.print("rpm_FrontL,rpm_FrontR,rpm_RearL,rpm_RearR,");
|
||||||
dataFile.print("temp_Front,temp_Rear,vbat_Front,vbat_Rear,");
|
dataFile.print("temp_ESCFront,temp_ESCRear,vbat_Front,vbat_Rear,");
|
||||||
dataFile.print("currentAll,throttle,brake,speed,trip_Front,trip_Rear,trip,currentConsumed_Front,currentConsumed_Rear,currentConsumed,watthoursConsumed,");
|
dataFile.print("currentAll,throttle,brake,speed,trip_Front,trip_Rear,trip,currentConsumed_Front,currentConsumed_Rear,currentConsumed,watthoursConsumed,");
|
||||||
dataFile.println("temp_ESCFront,temp_ESCRear,temp_Air,looptime_duration");
|
dataFile.println("temp_Front,temp_Rear,temp_Air,looptime_duration");
|
||||||
dataFile.print("#TIMESTAMP:"); dataFile.println(now());
|
dataFile.print("#TIMESTAMP:"); dataFile.println(now());
|
||||||
logging_headerWritten=true;
|
logging_headerWritten=true;
|
||||||
}
|
}
|
||||||
|
@ -122,8 +127,12 @@ void loggingLoop(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm
|
||||||
dataFile.print(temp_ESCFront,2); dataFile.print(",");
|
dataFile.print(temp_ESCFront,2); dataFile.print(",");
|
||||||
dataFile.print(temp_ESCRear,2); dataFile.print(",");
|
dataFile.print(temp_ESCRear,2); dataFile.print(",");
|
||||||
dataFile.print(temp_Air,2); dataFile.print(",");
|
dataFile.print(temp_Air,2); dataFile.print(",");
|
||||||
dataFile.print(looptime_duration); //dataFile.print(",");
|
dataFile.print(looptime_duration_min); dataFile.print(",");
|
||||||
looptime_duration=0; //reset
|
dataFile.print(looptime_duration_max); //dataFile.print(",");
|
||||||
|
looptime_duration_max=0; //reset
|
||||||
|
looptime_duration_min=1000; //reset
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dataFile.println("");
|
dataFile.println("");
|
||||||
dataFile.close();
|
dataFile.close();
|
||||||
|
@ -131,6 +140,10 @@ void loggingLoop(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm
|
||||||
error_sdfile_unavailable=true;
|
error_sdfile_unavailable=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
looptime_duration_max=0; //reset
|
||||||
|
looptime_duration_min=1000; //reset
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,6 +167,10 @@ String getLogFilename() {
|
||||||
return datalogging_filename;
|
return datalogging_filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool getDatalogging() {
|
||||||
|
return datalogging;
|
||||||
|
}
|
||||||
|
|
||||||
bool loadTripSD()
|
bool loadTripSD()
|
||||||
{
|
{
|
||||||
//stats.txt containt lines with driven distance or consume current.
|
//stats.txt containt lines with driven distance or consume current.
|
||||||
|
@ -222,13 +239,17 @@ void writeTrip(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm&
|
||||||
myFile.print("owh=");
|
myFile.print("owh=");
|
||||||
myFile.println(overallWatthoursConsumed);
|
myFile.println(overallWatthoursConsumed);
|
||||||
myFile.print("vlt=");
|
myFile.print("vlt=");
|
||||||
float _voltage=(escFront.getFeedback_batVoltage()+escRear.getFeedback_batVoltage())/2.0;
|
float _voltage=getBatteryVoltage(escFront, escRear);
|
||||||
myFile.println(_voltage,2);
|
myFile.println(_voltage,2);
|
||||||
myFile.close();
|
myFile.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float getBatteryVoltage(ESCSerialComm& escFront, ESCSerialComm& escRear) {
|
||||||
|
return (escFront.getFeedback_batVoltage()+escRear.getFeedback_batVoltage())/2.0;
|
||||||
|
}
|
||||||
|
|
||||||
void resetTrip() {
|
void resetTrip() {
|
||||||
if (datalogging && sdcard_available) {
|
if (datalogging && sdcard_available) {
|
||||||
File myFile = SD.open("stats.txt", FILE_WRITE);
|
File myFile = SD.open("stats.txt", FILE_WRITE);
|
||||||
|
@ -251,7 +272,7 @@ void resetTrip() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void serialCommandLoop() {
|
void serialCommandLoop(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm& escRear) {
|
||||||
#define MAX_MESSAGE_LENGTH 80
|
#define MAX_MESSAGE_LENGTH 80
|
||||||
|
|
||||||
uint8_t timeoutcounter=MAX_MESSAGE_LENGTH;
|
uint8_t timeoutcounter=MAX_MESSAGE_LENGTH;
|
||||||
|
@ -299,15 +320,46 @@ void serialCommandLoop() {
|
||||||
}else if(smessage.equals("ls")) {
|
}else if(smessage.equals("ls")) {
|
||||||
printFileListing();
|
printFileListing();
|
||||||
}else if(smessage.startsWith("cat")) {
|
}else if(smessage.startsWith("cat")) {
|
||||||
printFile(smessage.substring(4));
|
String _filename=smessage.substring(4);
|
||||||
|
if (_filename.length()<3){ //if no filename given, use current log file
|
||||||
|
_filename=getLogFilename();
|
||||||
|
}
|
||||||
|
printFile(_filename);
|
||||||
}else if(smessage.startsWith("rm")) {
|
}else if(smessage.startsWith("rm")) {
|
||||||
removeFile(smessage.substring(3));
|
removeFile(smessage.substring(3));
|
||||||
}else if(smessage.equals("log off")) {
|
}else if(smessage.equals("log off")) {
|
||||||
|
writeLogComment(loopmillis, "Datalogging disabled by serial command");
|
||||||
datalogging=false;
|
datalogging=false;
|
||||||
Serial.print("Log disabled: "); Serial.println(datalogging_filename);
|
Serial.print("Log disabled: "); Serial.println(datalogging_filename);
|
||||||
}else if(smessage.equals("log on")) {
|
}else if(smessage.equals("log on")) {
|
||||||
datalogging=true;
|
datalogging=true;
|
||||||
|
writeLogComment(loopmillis, "Datalogging enabled by serial command");
|
||||||
Serial.print("Log enabled: "); Serial.println(datalogging_filename);
|
Serial.print("Log enabled: "); Serial.println(datalogging_filename);
|
||||||
|
}else if(smessage.equals("show stats")) {
|
||||||
|
Serial.print("overallTrip="); Serial.println(overallTrip);
|
||||||
|
Serial.print("overallCurrentConsumed="); Serial.println(overallCurrentConsumed);
|
||||||
|
Serial.print("overallWatthoursConsumed="); Serial.println(overallWatthoursConsumed);
|
||||||
|
Serial.print("voltage="); Serial.println(getBatteryVoltage(escFront,escRear));
|
||||||
|
}else if(smessage.equals("show sensors")) {
|
||||||
|
Serial.print("loopmillis(s) \t"); Serial.println(loopmillis/1000.0,3);
|
||||||
|
Serial.print("temp_ESCFront \t"); Serial.println(escFront.getFeedback_boardTemp());
|
||||||
|
Serial.print("temp_ESCRear \t"); Serial.println(escRear.getFeedback_boardTemp());
|
||||||
|
Serial.print("vbat_Front \t"); Serial.println(escFront.getFeedback_batVoltage());
|
||||||
|
Serial.print("vbat_Rear \t"); Serial.println(escRear.getFeedback_batVoltage());
|
||||||
|
Serial.print("throttle \t"); Serial.println(throttle_pos);
|
||||||
|
Serial.print("brake \t"); Serial.println(brake_pos);
|
||||||
|
Serial.print("trip_Front \t"); Serial.println(escFront.getTrip());
|
||||||
|
Serial.print("trip_Rear \t"); Serial.println(escRear.getTrip());
|
||||||
|
Serial.print("trip \t"); Serial.println(trip);
|
||||||
|
Serial.print("currentConsumed_Front \t"); Serial.println(escFront.getCurrentConsumed(),3);
|
||||||
|
Serial.print("currentConsumed_Rear \t"); Serial.println(escRear.getCurrentConsumed(),3);
|
||||||
|
Serial.print("currentConsumed \t"); Serial.println(currentConsumed,3);
|
||||||
|
Serial.print("watthoursConsumed \t"); Serial.println(watthoursConsumed,3);
|
||||||
|
Serial.print("temp_Front \t"); Serial.println(temp_ESCFront,3);
|
||||||
|
Serial.print("temp_Rear \t"); Serial.println(temp_ESCRear,3);
|
||||||
|
Serial.print("temp_Air \t"); Serial.println(temp_Air,3);
|
||||||
|
Serial.print("looptime_duration_min \t"); Serial.println(looptime_duration_min);
|
||||||
|
Serial.print("looptime_duration_max \t"); Serial.println(looptime_duration_max);
|
||||||
}
|
}
|
||||||
|
|
||||||
message_pos = 0;
|
message_pos = 0;
|
||||||
|
|
|
@ -16,8 +16,9 @@
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "temperature.h"
|
#include "temperature.h"
|
||||||
|
|
||||||
//#include "comms.h"
|
|
||||||
String getLogFilename();
|
String getLogFilename();
|
||||||
|
bool getDatalogging();
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "logging.h"
|
#include "logging.h"
|
||||||
|
|
||||||
|
@ -161,7 +162,6 @@ void setup()
|
||||||
|
|
||||||
|
|
||||||
writeLogComment(millis(), "Setup Finished");
|
writeLogComment(millis(), "Setup Finished");
|
||||||
led_simpeProgress(15,true);
|
|
||||||
|
|
||||||
led_simpleProgressWait(); //wait longer if any errors were displayed with led_simpeProgress()
|
led_simpleProgressWait(); //wait longer if any errors were displayed with led_simpeProgress()
|
||||||
|
|
||||||
|
@ -178,46 +178,6 @@ void loop() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
// ____ Debugging pending serial byted for feedback
|
|
||||||
static int s2availmax=0;
|
|
||||||
int _a2=Serial2.available();
|
|
||||||
if (_a2>s2availmax) {
|
|
||||||
s2availmax=_a2;
|
|
||||||
//Serial.print("new s2availmax"); Serial.println(s2availmax);
|
|
||||||
String _text="Serial2 Bytes Available Max=";
|
|
||||||
_text+=s2availmax;
|
|
||||||
writeLogComment(Serial1,loopmillis, _text);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int s3availmax=0;
|
|
||||||
int _a3=Serial3.available();
|
|
||||||
if (_a3>s3availmax) {
|
|
||||||
s3availmax=_a3;
|
|
||||||
//Serial.print("new s3availmax"); Serial.println(s3availmax);
|
|
||||||
String _text="Serial3 Bytes Available Max=";
|
|
||||||
_text+=s3availmax;
|
|
||||||
writeLogComment(Serial1,loopmillis, _text);
|
|
||||||
}
|
|
||||||
// ----- End of debug
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool newData2=ReceiveSerial(SerialcomFront,FeedbackFront, NewFeedbackFront, Serial2);
|
|
||||||
bool newData3=ReceiveSerial(SerialcomRear,FeedbackRear, NewFeedbackRear, Serial3);
|
|
||||||
//Max (40) or 22 available/pending bytes
|
|
||||||
|
|
||||||
if (newData2) {
|
|
||||||
updateMotorparams(motorparamsFront,FeedbackFront,loopmillis);
|
|
||||||
}
|
|
||||||
if (newData3) {
|
|
||||||
updateMotorparams(motorparamsRear,FeedbackRear,loopmillis);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (ADS.isConnected() && (loopmillis - last_adsread > ADSREADPERIOD) ) { //read teensy adc and filter
|
if (ADS.isConnected() && (loopmillis - last_adsread > ADSREADPERIOD) ) { //read teensy adc and filter
|
||||||
last_adsread=loopmillis;
|
last_adsread=loopmillis;
|
||||||
|
@ -364,10 +324,11 @@ void loop() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
serialCommandLoop();
|
serialCommandLoop(loopmillis,escFront,escRear);
|
||||||
|
|
||||||
|
|
||||||
looptime_duration=max(looptime_duration,millis()-loopmillis);
|
looptime_duration_min=min(looptime_duration_min,millis()-loopmillis);
|
||||||
|
looptime_duration_max=max(looptime_duration_max,millis()-loopmillis);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue