Projektvorstellung Womo-Monitor

komischerweise kriege ich plötzlich eine Fehlermeldung wegen der Schriftart, obwohl ich daran nichts geändert habe

Womo_Monitor_Forum:69:27: error: conflicting declaration 'uint8_t UbuntuBold []'
 extern uint8_t UbuntuBold[];
                           ^
C:\Users\rolik\Documents\Arduino\Womo_monitor_Forum\UbuntuBold.c:17:14: note: previous declaration as 'const uint8_t UbuntuBold [9124]'
 fontdatatype UbuntuBold[9124] PROGMEM={
              ^~~~~~~~~~
In file included from C:\Users\rolik\Documents\Arduino\Womo_monitor_Forum\Womo_Monitor_Forum.ino:190:0:
C:\Users\rolik\Documents\Arduino\Womo_monitor_Forum\solar.h:3:51: warning: initializer-string for array of chars is too long [-fpermissive]
 constexpr char solRegler[][solReg] = {"160", "200"};
                                                   ^
C:\Users\rolik\Documents\Arduino\Womo_monitor_Forum\solar.h:3:51: warning: initializer-string for array of chars is too long [-fpermissive]
In file included from C:\Users\rolik\Documents\Arduino\Womo_monitor_Forum\Womo_Monitor_Forum.ino:220:0:
C:\Users\rolik\Documents\Arduino\Womo_monitor_Forum\buttons.h:119:1: warning: invalid conversion from 'const uint8_t* {aka const unsigned char*}' to 'uint8_t* {aka unsigned char*}' [-fpermissive]
 };
 ^

Das kann sein, da ich ja mitten im basteln war...
Und wenn Du meinen und Deinen mischt, wird das auch nix, da ja mehrere Tabs betroffen sind.
Nimms als gegegeben. Ich bau weiter dran, vielleicht bekomme ich das noch zeitlich unter; dann gibts den nachher noch....

Nur keinen Stress

Ich verstehe das so, daß der letzte Wert die Checksumme auf 0 ergänzt.

void setup()
{
  Serial.begin(115200);
  delay(500);
  Serial.println("Start ...");
  uint16_t checksumme = 0;
  uint8_t message[] = { 0x0d, 0x0a, 0x50, 0x49, 0x44, 0x09, 0x30, 0x78, 0x32, 0x30, 0x33, 0x0d, 0x0a, 0x56, 0x09, 0x32, 0x36, 0x32, 0x30, 0x31, 0x0d, 0x0a, 0x49, 0x09, 0x30, 0x0d, 0x0a, 0x50, 0x09, 0x30, 0x0d, 0x0a, 0x43, 0x45, 0x09, 0x30, 0x0d, 0x0a, 0x53, 0x4f, 0x43, 0x09, 0x31, 0x30, 0x30, 0x30, 0x0d, 0x0a, 0x54, 0x54, 0x47, 0x09, 0x2d, 0x31, 0x0d, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x09, 0x4f, 0x46, 0x46, 0x0d, 0x0a, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x09, 0x4f, 0x46, 0x46, 0x0d, 0x0a, 0x41, 0x52, 0x09, 0x30, 0x0d, 0x0a, 0x42, 0x4d, 0x56, 0x09, 0x37, 0x30, 0x30, 0x0d, 0x0a, 0x46, 0x57, 0x09, 0x30, 0x33, 0x30, 0x37, 0x0d, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x09, 0xd8 };
  for (uint16_t i = 0; i < sizeof(message); i++)
  {
    checksumme = (checksumme + message[i]) & 255; /* Take modulo 256 in account */
  }
  Serial.print("Checksumme: ");
  Serial.println(checksumme);
}

void loop() {}

Hilft das?

1 Like

:man_facepalming:
und ich schreibs noch.... :man_shrugging:

DANKE!

Ha. Falle.
Ich kann die nicht als Datensatztrenner UND message-Inhalt zur Berechnung nehmen.
Bekomm ich aber hin.
Ich fang mit gesetzter Checksumme an und \r\n werden dann beim trennen "überlaufen".

Bei jedem Trenner 0x0d + 0x0a = 0x17 addieren.

Ich würde checksum damit initial setzen und dann die message drauf addieren und den Trenner nur als solchen verwenden.
Im Moment seh ich erstmal zu, wie groß die Felder werden können.
Das wird wieder so ein Wochenendding- und ich wollte das nicht. Ganz bestimmt.

Dann lass es und geniess das schöne wochenende...der nächste Regen kommt bestimmt, und ich habs nicht eilig. Ausser dein Ehrgeiz hält dich davon ab zu geniessen

Mach Dir mal keine Sorgen...
Aber Du weisst doch selbst, das Du in Deinem solar-Tab Mist gemacht hast...

    } else if (label200 == "H23") {
      float temp = val200.toInt();
      temp = temp / 1000;
      H23200 = val200.toInt();
    } else if (label200 == "HSDS") {
      float temp = val200.toInt();
      temp = temp / 100;
      HSDS200 = val200.toInt();

:stuck_out_tongue_winking_eye:

reine Unwissenheit über die Möglichkeiten...Spannend wird es dann, wenn ich probiere nachzuvollziehen was du da programmierst

jaja...aber erstaunlicherweise ist da immer etwas schlüssiges angezeigt worden

Das geht ganz schnell. Das haben andere vor Dir auch geschafft.
Ich kommentiere eigentlich recht gut, was da passieren soll.
Und meisstens passiert das dann auch genau da. :rofl:

Da ich morgen auf ner Veranstaltung bin und nur in der Bahn jeweils Zeit finde, wird das vermutlich am Sonntag fertig werden.
Ich muss mich durch Deine Anzeige durchwühlen, weil ich die Umrechnerei erst machen will, wenn die Werte gebraucht werden und bis dahin bleiben die roh in den Variablen...
Du glaubst garnicht, was das an Platz und Ausführungszeit spart.

ich bin gespannt ob es dann noch mehr neustarts gibt wenns dann noch schneller läuft :joy:
was mir noch auffällt: der läuft jetzt endlos durch, und stoppt nicht nach 3 umläufen
Hab jetzt auch verstanden warum....glaube ich....wenn PID nicht mehr ankommt probiert er es noch dreimal und stoppt dann

Die Idee hinter meinem Schnipsel ist erst dreimal PID abzuwarten und dann mit dem 4ten eigentlich die Laufzeit zu messen, die gebraucht wird, bis PID das 5.te mal ankommt. Danach in Endlosschleife mit sich selbst beschäftigen while(1)
(Vom Handy - Schreibfehler inbegriffen)

Ich habe das Projekt jetzt parallel noch auf einen MEGA mit 5" Display umgeschrieben (anderer Touch Treiber -> GSL1680). Da hat es Null Neustarts in 24 Stunden. Allerdings hängen da auch keine Sensoren dran. (Dafür habe ich da das Problem, dass der Touchscreen immer mal wieder irgendwo drückt. Aber das ist dann ein Thema für später). Bin Mal gespannt, ob wir das 7" Display auch noch zum stabilen Laufen kriegen.

Noch etwas anderes: Hat jemand von Euch eine Idee, wie ich prüfen kann, ob eine Zahl ein Integer oder ein Float ist?

edit:

ist es so einfach??

int i;
float f=13.000;
void setup() {
    Serial.begin(9600);
i=f;  
}

void loop() {
  if (i==f)
  {
    Serial.println("ist Integer");
    Serial.println(i);
  }
  if (i!=f)
  {
    Serial.println("ist float");
    Serial.println(f);
  }
}

Hallo,

das funktioniert mit Type Traits. Du musst dabei den Datentyp prüfen und nicht den Wert der Variablen.

wie funktioniert das? ich hab Stundenlang gesucht und nichts gefunden.

Hallo,

der avr-gcc Toolchain fehlt die cpp STL, dass muss man nachbauen. Ein paar Dinge hatte ich einmal gemacht. Du musst aber deine Toolchain auf C++17 umstellen. Lege dir eine platform.local.txt an dort wo die platform.txt liegt.
Inhalt

compiler.cpp.flags=-c -g -Os {compiler.warning_flags} -std=gnu++17 -fno-exceptions -fpermissive -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto
compiler.cpp.extra_flags=-fno-sized-deallocation -Wall -Wextra

TypeTraits.zip (5,1 KB)
Schau dir die Beispiele an, dann kommste bestimmt dahinter.

Danke, das schaue ich mir heute Abend mal an.
Was ist denn "falsch" daran, die Werte zu vergleichen? Es geht hier nicht um hochkomplexe Berechnungen. Ich möchte nur in einer Funktion feststellen, ob es eine integer zahl (prozente) oder ein float (Messwert mit 2 Dezimalstellen) ist.