Hulp met E-paper display programmeren

Ik ben momenteel bezig met een projectje. Helaas ben ik echter een beetje aan het vastlopen met het programmeren van een E-paper display. Het betreft een 4.2 inch kleuren display van E-paper. Hier de link naar de library: GitHub - waveshare/e-Paper .

Nu heb ik het volgende geprogrammeerd:

#include <SPI.h>
#include <mcp_can.h>

#include "epd4in2b_V2.h"
#include "imagedata.h"
#include "epdpaint.h"

#define COLORED     0
#define UNCOLORED   1

Epd epd;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  
  if (epd.Init() != 0) {
    Serial.print("e-Paper init failed");
    return;
  }
}

void loop() 
{
  Serial.print("begin loop");
  unsigned char image [1500];
  Paint paint(image, 400, 28);
  Epd epd;
  
  epd.ClearFrame();
  
  int minvolt = 147;
  String een = String(minvolt) + "milliVolts";
  char const *voltmin = een.c_str();

  int maxvolt = 245;
  String twee = String(maxvolt) + "milliVolts";
  char const *voltmax = twee.c_str();

  int gemvolt = 197;
  String drie = String(gemvolt) + "milliVolts";
  char const *voltgem = drie.c_str();
  
  paint.Clear(UNCOLORED);
  paint.DrawStringAt(7, 0, voltmin, &Font16, COLORED);
  epd.SetPartialWindowBlack(paint.GetImage(), 0, 60, paint.GetWidth(), paint.GetHeight());

  paint.Clear(UNCOLORED);
  paint.DrawStringAt(7, 0, voltmax, &Font16, COLORED);
  epd.SetPartialWindowBlack(paint.GetImage(), 0, 100, paint.GetWidth(), paint.GetHeight());

  paint.Clear(UNCOLORED);
  paint.DrawStringAt(7, 0, voltgem, &Font16, COLORED);
  epd.SetPartialWindowBlack(paint.GetImage(), 0, 140, paint.GetWidth(), paint.GetHeight());

  epd.DisplayFrame();
 
  epd.Sleep();  

  delay(1000);
}

De output op het scherm is nu leeg.

Als ik de code nu aanpas om alleen de waardes zonder eenheden te versturen worden deze wel netjes weergegeven op het scherm.

Zou iemand weten hoe dit is op te lossen? Bij voorbaat alvast heel erg bedankt.

Je sketch is niet hetzelfde als het voorbeeld van de fabrikant: https://github.com/waveshare/e-Paper/blob/master/Arduino/epd4in2b_V2/epd4in2b_V2.ino.
Werkt dat voorbeeld ?

Er is een array van 1500 byte. Dat wordt erg krap in een Arduino Uno. Het dynamisch geheugen (SRAM) zou vol kunnen zitten.

Dit is een erg specifieke vraag, misschien had je dit beter in het Engelstalige deel kunnen vragen.

De voorbeeldcode van de fabrikant werkt zonder enige problemen.

Zodra ik eenheden ga toevoegen wordt de tekst niet meer op het schermpje gezet. Ik begin steeds meer te denken dat dit inderdaad te veel zou kunnen zijn voor het SRAM. Dat het schermpje een langere reeks simpelweg niet trekt

Ik ken het display en de library verder niet, dus ik kan er weinig over zeggen.
Het lijkt me het beste om een Arduino met meer geheugen te proberen.

Is dit je display ? https://www.waveshare.com/wiki/4.2inch_e-Paper_Module.
Dan is misschien een ESP32 iets.

Ja dat is mijn display inderdaad.

Een ESP32 of een Arduino met meer geheugen lijkt me inderdaad de beste manier om dit op te lossen. In ieder geval bedankt voor het advies!

je hebt drie teksten millivolts staan zet die onder 1 string dat spaart al.

3 Strings is al 18 bytes verspilde ruimte zonder dat je er iets inzet. Zoals @shooter al aangaf, gebruik er een, print het, hergebruik die ene, print het en herhaal voor de laatste.

Maar ik denk niet dat dat zoden aan de dijk zet; het probleem zit in het image array. Als je dat array globaal maakt, gebruikt je sketch

Sketch uses 9952 bytes (32%) of program storage space. Maximum is 30720 bytes.
Global variables use 1852 bytes (90%) of dynamic memory, leaving 196 bytes for local variables. Maximum is 2048 bytes.
Low memory available, stability problems may occur.

Het image array lokaal maken in loop() is struisvogel gedoe :slight_smile:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.