Clock with 1 minutes sub tiles an jumping minute pointer

This commit is contained in:
norbert-walter 2022-04-13 16:39:09 +02:00
parent fce5c3a937
commit 0196ff8ecd
2 changed files with 109 additions and 8 deletions

View File

@ -34,6 +34,9 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
static const int bsize = 30; static const int bsize = 30;
char buffer[bsize+1]; char buffer[bsize+1];
buffer[0]=0; buffer[0]=0;
//########################################################
// Formats for several boat data
//######################################################## //########################################################
if (value->getFormat() == "formatDate"){ if (value->getFormat() == "formatDate"){
@ -383,7 +386,98 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
} }
} }
//######################################################## //########################################################
else if (value->getFormat() == "formatXdrD"){ // Special XDR formats
// Refer XDR formats in GwXDRMappings.cpp line 40
//########################################################
else if (value->getFormat() == "formatXdr:P:P"){
double pressure = 0;
if(usesimudata == false) {
pressure = value->value;
pressure = pressure / 1000.0; // Unit conversion form Pa to kPa
}
else{
pressure = 96 + float(random(0, 20)) / 10.0;
}
if(pressure <= 99.9){
snprintf(buffer,bsize,"%3.1f",pressure);
}
else{
snprintf(buffer,bsize,"%3.0f",pressure);
}
result.unit = "kPa";
}
//########################################################
else if (value->getFormat() == "formatXdr:P:B"){
double pressure = 0;
if(usesimudata == false) {
pressure = value->value;
pressure = pressure / 100.0; // Unit conversion form Pa to mBar
}
else{
pressure = 968 + float(random(0, 10));
}
snprintf(buffer,bsize,"%4.0f",pressure);
result.unit = "mBar";
}
//########################################################
else if (value->getFormat() == "formatXdr:U:V"){
double voltage = 0;
if(usesimudata == false) {
voltage = value->value;
}
else{
voltage = 12 + float(random(0, 30)) / 10.0;
}
if(voltage < 10){
snprintf(buffer,bsize,"%3.2f",voltage);
}
else{
snprintf(buffer,bsize,"%3.1f",voltage);
}
result.unit = "V";
}
//########################################################
else if (value->getFormat() == "formatXdr:I:A"){
double current = 0;
if(usesimudata == false) {
current = value->value;
}
else{
current = 8.2 + float(random(0, 50)) / 10.0;
}
if(current < 10){
snprintf(buffer,bsize,"%3.2f",current);
}
if(current >= 10 && current < 100){
snprintf(buffer,bsize,"%3.1f",current);
}
if(current >= 100){
snprintf(buffer,bsize,"%3.0f",current);
}
result.unit = "A";
}
//########################################################
else if (value->getFormat() == "formatXdr:C:K"){
double temperature = 0;
if(usesimudata == false) {
temperature = value->value;
}
else{
temperature = 21.8 + float(random(0, 50)) / 10.0;
}
if(temperature < 10){
snprintf(buffer,bsize,"%3.2f",temperature);
}
if(temperature >= 10 && temperature < 100){
snprintf(buffer,bsize,"%3.1f",temperature);
}
if(temperature >= 100){
snprintf(buffer,bsize,"%3.0f",temperature);
}
result.unit = "K";
}
//########################################################
else if (value->getFormat() == "formatXdr:A:D"){
double angle = 0; double angle = 0;
if(usesimudata == false) { if(usesimudata == false) {
angle = value->value; angle = value->value;
@ -401,6 +495,8 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
result.unit = "Deg"; result.unit = "Deg";
} }
//######################################################## //########################################################
// Default format
//########################################################
else{ else{
if(value->value < 10){ if(value->value < 10){
snprintf(buffer,bsize,"%3.2f",value->value); snprintf(buffer,bsize,"%3.2f",value->value);

View File

@ -168,7 +168,7 @@ public:
display.fillCircle(200, 150, rInstrument + 10, pixelcolor); // Outer circle display.fillCircle(200, 150, rInstrument + 10, pixelcolor); // Outer circle
display.fillCircle(200, 150, rInstrument + 7, bgcolor); // Outer circle display.fillCircle(200, 150, rInstrument + 7, bgcolor); // Outer circle
for(int i=0; i<360; i=i+10) for(int i=0; i<360; i=i+1)
{ {
// Scaling values // Scaling values
float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots
@ -202,11 +202,15 @@ public:
} }
// Draw sub scale with dots // Draw sub scale with dots
float x1c = 200 + rInstrument*sin(i/180.0*pi); float sinx = 0;
float y1c = 150 - rInstrument*cos(i/180.0*pi); float cosx = 0;
display.fillCircle((int)x1c, (int)y1c, 2, pixelcolor); if(i % 6 == 0){
float sinx=sin(i/180.0*pi); float x1c = 200 + rInstrument*sin(i/180.0*pi);
float cosx=cos(i/180.0*pi); float y1c = 150 - rInstrument*cos(i/180.0*pi);
display.fillCircle((int)x1c, (int)y1c, 2, pixelcolor);
sinx=sin(i/180.0*pi);
cosx=cos(i/180.0*pi);
}
// Draw sub scale with lines (two triangles) // Draw sub scale with lines (two triangles)
if(i % 30 == 0){ if(i % 30 == 0){
@ -245,7 +249,8 @@ public:
if (value1 < 0) {value1 = value1 + 86400;} if (value1 < 0) {value1 = value1 + 86400;}
hour = (value1 / 3600.0); hour = (value1 / 3600.0);
if(hour > 12) hour = hour - 12.0; if(hour > 12) hour = hour - 12.0;
minute = (hour - int(hour)) * 3600.0 / 60.0; // minute = (hour - int(hour)) * 3600.0 / 60.0; // Analog minute pointer smoth moving
minute = int((hour - int(hour)) * 3600.0 / 60.0); // Jumping minute pointer from minute to minute
LOG_DEBUG(GwLog::DEBUG,"... PageClock, value1: %f hour: %f minute:%f", value1, hour, minute); LOG_DEBUG(GwLog::DEBUG,"... PageClock, value1: %f hour: %f minute:%f", value1, hour, minute);
// Draw hour pointer // Draw hour pointer