waarde komt niet op LCD - router hoogte regeling

Hoi, ik ben nieuw op het forum, en ook redelijk nieuw op gebied van de arduino, maar het lijkt me fascinerend, en ben lerende :slight_smile:
Ik ben een (hout) router tafel aan het maken - nabouwen van de site: Commande numérique pour montée/descente d'outil - Page 7

Er is ook een bijhorende UNO code. Na het bouwen van de schakeling en het laden van de code werkt alles, behalve dat er geen waardes op het scherm (posities) worden weergegeven, slechts enkel een vraagteken op die plaats. Ik heb met mijn beperkte kennis van het programmeren geprobeerd de fout te achterhalen, maar het lukt me niet, en de maker krijg ik niet te pakken… zijn er hier knappe koppen die er een oog op willen werpen ?
Ik heb de code nog in een Mega geladen, maar met hetzelfde resultaat, ook wanneer ik de code simuleer in Proteus.
een foto van het display en de code zijn bijgevoegd.

alvast bedankt !

benji791-benjiz-router-lift-73b6cc6.zip (866 KB)

Het lijkt me dat je data lijnen tussen je lcd en de arduino niet juist zijn verbonden.

ik heb het voor de veiligheid even nagezien. de datalijnen zijn juist aangesloten. Ik kan ook in alle menu's en instellingen, en daar wordt alles juist weergegeven, het is pas als ik in het RUN menu kom dat de positiewaarden door een vraagteken worden vervangen...

Opde foto lijkt het alsof er "garbage" op het scherm staat. Maar goed ik heb geen cnc en als het menu werkt...
Dan zou ik in de code zoeken naar ? en kijken wanneer die op het scherm getoverd wordt.
? komt niet zo vaak voor in C/C++ code en je zoekt een string representatie.
Eens je het stukje code gevonden hebt zou je je een idee moeten vormen van wat er fout is.

Er komt geen vraagteken in een opdracht voor in de code, enkel in tekst ,in de menu's, die wordt weergeven op het display. Maar dit zette me aan het zoeken in google: het blijkt dat er een vraagteken gezet wordt op het scherm wanneer er geen floating point kan worden weergegeven. Ik vond een tekst in het engels :

Since Arduino has such limited amount of space for code, they took the float support out of sprintf. You'll have to convert the float to a string first before you go to sprintf.

ik vind wel sprintf commandos in de code, maar ik zou niet niet weten hoe ze aan te passen :frowning:

Om zeker te zijn dat dit het probleem is kan je misschien best eerst testen door je float naar int te casten.
Stel dat de code in mm werkt kan je eerst *100 doen zodat je display in 100ste van een mm werkt.

Je kan een float eerst omzetten in een char array door dtostrf().

Ik zie dat je sprintf gebruikt om floating point nummers te printen. Dat wordt standaard niet ondersteund op Arduinos. Je moet ergens een file modificeren om dat te laten werken; op dit moment geen idee welke.

Misschien dat dat is waar je probleem vandaan komt?

Je kunt een kleine test-sketch schrijven om te testen of dat de oorzaak van je probleem is. Iets in de geest van

// lcd gerelateerd
...
...

void setup()
{
  // lcd initialiseren
  ...
  ...

  // een float variabele  
  float x = 3.14;

  // buffer om tekst in op te slaan
  char buffer[64];

  // print
  sprintf(buffer,"%6.2f", x);
  lcd.print(buffer);
}

void loop()
{
}

OK, net even getest met een Uno en de seriele poort

void setup()
{
  Serial.begin(57600);
  float x = 3.14;
  char buffer[64];
  sprintf(buffer, "'%6.2f'", x);
  Serial.println(buffer);
}

void loop()
{
}

Resultaat:

'     ?'

Dus je moet even ( :smiley: ) de file vinden die aangepast moet worden of je kunt dtostrf() gebruiken. Voor dat laatste zul je wel alle regels moeten vinden in je programma die gebruikt worden om een floating point variabele te printen en je hebt een extra karakter buffer nodig.

// Edit
Slimme oplossing (alternatief voor dtostrf): How to sprintf a float with Arduino - Yet Another Arduino Blog. Voorbeeld is voor twee decimalen (vermenigvuldigen met 100 en modulo 100), voor drie decimalen vermenigvuldigen met 1000 en module 1000 gebruiken.