Reduce stack size for OBP task from 25kB to 10kB, add custom page keel position, change formatter
This commit is contained in:
parent
d43974ac1a
commit
51f8bfc0ee
|
@ -143,10 +143,10 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||||
//########################################################
|
//########################################################
|
||||||
else if (value->getFormat() == "formatFixed0"){
|
else if (value->getFormat() == "formatFixed0"){
|
||||||
if(usesimudata == false) {
|
if(usesimudata == false) {
|
||||||
snprintf(buffer,bsize,"%.0f",value->value);
|
snprintf(buffer,bsize,"%3.0f",value->value);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
snprintf(buffer,bsize,"%.0f", 8.0 + float(random(0, 10)) / 10.0);
|
snprintf(buffer,bsize,"%3.0f", 8.0 + float(random(0, 10)) / 10.0);
|
||||||
}
|
}
|
||||||
result.unit = "";
|
result.unit = "";
|
||||||
}
|
}
|
||||||
|
@ -233,10 +233,10 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if(speed < 10){
|
if(speed < 10){
|
||||||
snprintf(buffer,bsize,"%2.1f",speed);
|
snprintf(buffer,bsize,"%3.2f",speed);
|
||||||
}
|
}
|
||||||
if(speed >= 10 && speed < 100){
|
if(speed >= 10 && speed < 100){
|
||||||
snprintf(buffer,bsize,"%2.1f",speed);
|
snprintf(buffer,bsize,"%3.1f",speed);
|
||||||
}
|
}
|
||||||
if(speed >= 100){
|
if(speed >= 100){
|
||||||
snprintf(buffer,bsize,"%3.0f",speed);
|
snprintf(buffer,bsize,"%3.0f",speed);
|
||||||
|
@ -261,10 +261,10 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||||
rotation = 99;
|
rotation = 99;
|
||||||
}
|
}
|
||||||
if(rotation > -10 && rotation < 10){
|
if(rotation > -10 && rotation < 10){
|
||||||
snprintf(buffer,bsize,"%1.1f",rotation);
|
snprintf(buffer,bsize,"%3.2f",rotation);
|
||||||
}
|
}
|
||||||
if(rotation <= -10 || rotation >= 10){
|
if(rotation <= -10 || rotation >= 10){
|
||||||
snprintf(buffer,bsize,"%2.0f",rotation);
|
snprintf(buffer,bsize,"%3.0f",rotation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//########################################################
|
//########################################################
|
||||||
|
@ -281,10 +281,10 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||||
dop = 99.9;
|
dop = 99.9;
|
||||||
}
|
}
|
||||||
if(dop < 10){
|
if(dop < 10){
|
||||||
snprintf(buffer,bsize,"%2.1f",dop);
|
snprintf(buffer,bsize,"%3.2f",dop);
|
||||||
}
|
}
|
||||||
if(dop >= 10 && dop < 100){
|
if(dop >= 10 && dop < 100){
|
||||||
snprintf(buffer,bsize,"%2.1f",dop);
|
snprintf(buffer,bsize,"%3.1f",dop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//########################################################
|
//########################################################
|
||||||
|
@ -348,7 +348,7 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||||
result.unit = "m";
|
result.unit = "m";
|
||||||
}
|
}
|
||||||
if(depth < 10){
|
if(depth < 10){
|
||||||
snprintf(buffer,bsize,"%2.1f",depth);
|
snprintf(buffer,bsize,"%3.2f",depth);
|
||||||
}
|
}
|
||||||
if(depth >= 10 && depth < 100){
|
if(depth >= 10 && depth < 100){
|
||||||
snprintf(buffer,bsize,"%3.1f",depth);
|
snprintf(buffer,bsize,"%3.1f",depth);
|
||||||
|
@ -378,7 +378,7 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||||
result.unit = "K";
|
result.unit = "K";
|
||||||
}
|
}
|
||||||
if(temp < 10){
|
if(temp < 10){
|
||||||
snprintf(buffer,bsize,"%2.1f",temp);
|
snprintf(buffer,bsize,"%3.2f",temp);
|
||||||
}
|
}
|
||||||
if(temp >= 10 && temp < 100){
|
if(temp >= 10 && temp < 100){
|
||||||
snprintf(buffer,bsize,"%3.1f",temp);
|
snprintf(buffer,bsize,"%3.1f",temp);
|
||||||
|
@ -408,7 +408,7 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||||
result.unit = "m";
|
result.unit = "m";
|
||||||
}
|
}
|
||||||
if(distance < 10){
|
if(distance < 10){
|
||||||
snprintf(buffer,bsize,"%2.1f",distance);
|
snprintf(buffer,bsize,"%3.2f",distance);
|
||||||
}
|
}
|
||||||
if(distance >= 10 && distance < 100){
|
if(distance >= 10 && distance < 100){
|
||||||
snprintf(buffer,bsize,"%3.1f",distance);
|
snprintf(buffer,bsize,"%3.1f",distance);
|
||||||
|
@ -419,7 +419,7 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if(value->value < 10){
|
if(value->value < 10){
|
||||||
snprintf(buffer,bsize,"%2.1f",value->value);
|
snprintf(buffer,bsize,"%3.2f",value->value);
|
||||||
}
|
}
|
||||||
if(value->value >= 10 && value->value < 100){
|
if(value->value >= 10 && value->value < 100){
|
||||||
snprintf(buffer,bsize,"%3.1f",value->value);
|
snprintf(buffer,bsize,"%3.1f",value->value);
|
||||||
|
|
|
@ -40,7 +40,13 @@ public:
|
||||||
|
|
||||||
// Get boat values for Keel position
|
// Get boat values for Keel position
|
||||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list
|
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list
|
||||||
value1 = commonData.data.rotationAngle; // Raw value without unit convertion
|
if(simulation == false){
|
||||||
|
value1 = commonData.data.rotationAngle; // Raw value without unit convertion
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
value1 = (170 + float(random(0, 40)) / 10.0) * 2 * PI / 360; // Simulation data in radiant
|
||||||
|
}
|
||||||
|
|
||||||
bool valid1 = commonData.data.validRotAngle; // Valid information
|
bool valid1 = commonData.data.validRotAngle; // Valid information
|
||||||
String unit1 = "Deg"; // Unit of value
|
String unit1 = "Deg"; // Unit of value
|
||||||
if(valid1 == true){
|
if(valid1 == true){
|
||||||
|
@ -144,28 +150,21 @@ public:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print label
|
// Angle limits to +/-45° (Attention: 180° offset!)
|
||||||
display.setTextColor(textcolor);
|
if(value1 < (3 * PI / 4)){
|
||||||
display.setFont(&Ubuntu_Bold16pt7b);
|
value1 = 3 * PI / 4;
|
||||||
display.setCursor(100, 70);
|
|
||||||
display.print("Keel Position"); // Label
|
|
||||||
|
|
||||||
// Print Unit of keel position
|
|
||||||
display.setFont(&Ubuntu_Bold12pt7b);
|
|
||||||
display.setCursor(175, 110);
|
|
||||||
display.print(unit1); // Unit
|
|
||||||
/*
|
|
||||||
// Angle limits to +/-45°
|
|
||||||
if(value1 < (-PI / 4)){
|
|
||||||
value1 = -PI / 4;
|
|
||||||
}
|
}
|
||||||
if(value1 > (PI / 4)){
|
if(value1 > (5 * PI / 4)){
|
||||||
value1 = PI / 4;
|
value1 = 5 * PI / 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(holdvalues == true && valid1 == false){
|
||||||
|
value1 = value1old;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate keel position
|
// Calculate keel position
|
||||||
value1 = (value1 * 2) + PI;
|
value1 = (value1 * 2) + PI;
|
||||||
*/
|
|
||||||
// Draw keel position pointer
|
// Draw keel position pointer
|
||||||
float startwidth = 8; // Start width of pointer
|
float startwidth = 8; // Start width of pointer
|
||||||
|
|
||||||
|
@ -197,10 +196,21 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Center circle
|
// Center circle
|
||||||
display.fillCircle(200, 150, startwidth + 22, bgcolor);
|
display.fillCircle(200, 140, startwidth + 22, bgcolor);
|
||||||
display.fillCircle(200, 150, startwidth + 20, pixelcolor);
|
display.fillCircle(200, 140, startwidth + 20, pixelcolor); // Boat circle
|
||||||
display.fillRect(200 - 30, 150 - 30, 2 * 30, 30, bgcolor); // Delete half top circle
|
display.fillRect(200 - 30, 140 - 30, 2 * 30, 30, bgcolor); // Delete half top of boat circle
|
||||||
|
display.fillRect(150, 150, 100, 4, pixelcolor); // Water line
|
||||||
|
|
||||||
|
// Print label
|
||||||
|
display.setTextColor(textcolor);
|
||||||
|
display.setFont(&Ubuntu_Bold16pt7b);
|
||||||
|
display.setCursor(100, 70);
|
||||||
|
display.print("Keel Position"); // Label
|
||||||
|
|
||||||
|
// Print Unit of keel position
|
||||||
|
display.setFont(&Ubuntu_Bold12pt7b);
|
||||||
|
display.setCursor(175, 110);
|
||||||
|
display.print(unit1); // Unit
|
||||||
|
|
||||||
//*******************************************************************************************
|
//*******************************************************************************************
|
||||||
// Key Layout
|
// Key Layout
|
||||||
|
|
|
@ -564,9 +564,11 @@ void OBP60Task(GwApi *api){
|
||||||
long starttime7 = millis(); // Rotation sensor update all 100ms
|
long starttime7 = millis(); // Rotation sensor update all 100ms
|
||||||
|
|
||||||
while (true){
|
while (true){
|
||||||
delay(10); // Fixed the problem with NMEA0183 and GPS sentences
|
delay(100); // Fix the problem with NMEA0183 and GPS sentences
|
||||||
Timer1.update(); // Update for Timer1
|
Timer1.update(); // Update for Timer1
|
||||||
Timer2.update(); // Update for Timer2
|
Timer2.update(); // Update for Timer2
|
||||||
|
LOG_DEBUG(GwLog::LOG,"Loop");
|
||||||
|
|
||||||
if(millis() > starttime0 + 100){
|
if(millis() > starttime0 + 100){
|
||||||
starttime0 = millis();
|
starttime0 = millis();
|
||||||
|
|
||||||
|
@ -679,7 +681,7 @@ void OBP60Task(GwApi *api){
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send data from environment sensor all 1s
|
// Send data from environment sensor all 1s
|
||||||
if(millis() > starttime6 + 1000){
|
if(millis() > starttime6 + 2000){
|
||||||
starttime6 = millis();
|
starttime6 = millis();
|
||||||
unsigned char TempSource = 2; // Inside temperature
|
unsigned char TempSource = 2; // Inside temperature
|
||||||
unsigned char PressureSource = 0; // Atmospheric pressure
|
unsigned char PressureSource = 0; // Atmospheric pressure
|
||||||
|
@ -754,8 +756,9 @@ void OBP60Task(GwApi *api){
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send rotation angle all 1000ms
|
// Send rotation angle all 1000ms
|
||||||
if(millis() > starttime7 + 1000){
|
if(millis() > starttime7 + 500){
|
||||||
starttime7 = millis();
|
starttime7 = millis();
|
||||||
|
LOG_DEBUG(GwLog::LOG,"Rotation sensor");
|
||||||
if(String(rotsensor) == "AS5600" && AS5600_ready == true && as5600.detectMagnet() == 1){
|
if(String(rotsensor) == "AS5600" && AS5600_ready == true && as5600.detectMagnet() == 1){
|
||||||
rotationangle = as5600.getRawAngle() * 0.087; // 0...4095 segments = 0.087 degree
|
rotationangle = as5600.getRawAngle() * 0.087; // 0...4095 segments = 0.087 degree
|
||||||
// Offset correction
|
// Offset correction
|
||||||
|
@ -830,7 +833,6 @@ void OBP60Task(GwApi *api){
|
||||||
currentPage->displayPage(commonData,pages[pageNumber].parameters);
|
currentPage->displayPage(commonData,pages[pageNumber].parameters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
|
|
|
@ -20,7 +20,7 @@ DECLARE_INITFUNCTION(OBP60Init);
|
||||||
|
|
||||||
// OBP60 Task
|
// OBP60 Task
|
||||||
void OBP60Task(GwApi *param);
|
void OBP60Task(GwApi *param);
|
||||||
DECLARE_USERTASK_PARAM(OBP60Task, 25000) // Need 25k RAM as stack size
|
DECLARE_USERTASK_PARAM(OBP60Task, 10000) // Need 10k RAM as stack size
|
||||||
DECLARE_CAPABILITY(obp60,true);
|
DECLARE_CAPABILITY(obp60,true);
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue