Forum: Mikrocontroller und Digitale Elektronik ili9341 bitmap refresh - lösungssvorschläge?


von peter (Gast)


Lesenswert?

Hallo,

auf meinem display wird ein fahrzeug als bitmap dargestellt, dass alle 
möglichen türzustände abbilden soll.
die nachrichten kommen zyklisch per canoe.

im moment habe ich das problem, dass dieses bild jedes mal refresht 
werden muss,sobald eine neue nachricht reinkommt. es wird als das 
fahrzeug gezeichnet und anschließend lege ich dunkle rechtecke über die 
türen, die irrelevant sind.
vielleicht hat hier jemand einen interessanten lösungsansatz bei dem das 
fahrzeug erhalten bleibt und nicht jedes mal neu gezeichnet werden muss.

das ist mein code:

uint8_t can_receive ()
{
  CANMessage msg;
  msg = can_get_data();

  struct tuerstatus tmp_tueren = 
{false,false,false,false,alle_tueren.bild_gemalt}; //aktueller status

  if (msg.data[0]==0x01)
    tmp_tueren.tuer_vl=true;
  if (msg.data[1]==0x01)
    tmp_tueren.tuer_vr=true;
  if (msg.data[2]==0x01)
    tmp_tueren.tuer_hl=true;
  if (msg.data[3]==0x01)
    tmp_tueren.tuer_hr=true;

  if 
((tmp_tueren.tuer_vl!=alle_tueren.tuer_vl)||(tmp_tueren.tuer_vr!=alle_tu 
eren.tuer_vr)
  ||(tmp_tueren.tuer_hl!=alle_tueren.tuer_hl)||(tmp_tueren.tuer_hr!=alle_t 
ueren.tuer_hr))
  {
    tmp_tueren.bild_gemalt=false;
  }


  if (!tmp_tueren.bild_gemalt)//!tmp_tueren.bild_gemalt
  {


    myGLCD.drawBitmap(65,90,115,180,tuer_alle_offen);
    if (!tmp_tueren.tuer_vl)
      rect_VL();
    if (!tmp_tueren.tuer_vr)
      rect_VR();
    if (!tmp_tueren.tuer_hl)
      rect_HL();
    if (!tmp_tueren.tuer_hr)
      rect_HR();

    tmp_tueren.bild_gemalt = true;
    //alle_tueren = tmp_tueren;

    alle_tueren.tuer_vl = tmp_tueren.tuer_vl;
    alle_tueren.tuer_vr = tmp_tueren.tuer_vr;
    alle_tueren.tuer_hl = tmp_tueren.tuer_hl;
    alle_tueren.tuer_hr = tmp_tueren.tuer_hr;
    alle_tueren.bild_gemalt = tmp_tueren.bild_gemalt;

  }
 };

von Jens W. (jensw)


Lesenswert?

Na ganz einfach.
Du setzt auch dein Fahrzeug aus kleinen Bereichen zusammen. Du kannst 
das so aufteilen in alle Bereiche, die sich ändern können.
Um das gesamte Fahrzeug zu zeichnen musst du am Anfang halt einmal alle 
Teile rendern.

Gruß, Jens

von Arduinoquäler (Gast)


Lesenswert?

peter schrieb:
> vielleicht hat hier jemand einen interessanten lösungsansatz bei dem das
> fahrzeug erhalten bleibt und nicht jedes mal neu gezeichnet werden muss.

Wenn du deine Display-Ansteuerung schnell genug gemacht hättest
wäre das alles kein Problem. Dann würde auch sonst das Display
mehr "Spass machen".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.