Arduino Temp. printen op TFT

Hallo allen,

Ik zit met een probleem. Ik probeer de uitlezing van mijn thermokoppel met behulp van een arduino MEGA op een TFT schermpje te krijgen van 3,2".

Ik kan van alles printen op het scherm, maar ik krijg het niet voor elkaar om een input signaal om te zetten in een leesbaar iets voor het scherm.

Ik blijf van ook de foutmelding krijgen bij compilen: 'myGLCD does not name a type'.

Ik weet niet wat er fout is aan de code en vraag dan ook jullie hulp.

Hieronder heb ik de code geplakt die ik geschreven heb.

#include <memorysaver.h>
#include <UTFT.h>
#include <max6675.h>

int ktcSO = 2; // Thermokoppel
int ktcCS = 3; // Thermokoppel
int ktcCLK = 4; // Thermokoppel
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

int dispx, dispy, text_y_center, swapxy;
int buf[478];
int x, x2;
int y, y2;
int r;
int Celsius;
int Farenheit;
char Celsius_C(2);

UTFT myGLCD (ILI9481,38,39,40,41);
extern uint8_t SmallFont[];

void setup()
{
pinMode(5, OUTPUT);

// Setup the LCD
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
dispx = myGLCD.getDisplayXSize();
dispy = myGLCD.getDisplayYSize();
text_y_center = (dispy / 2) - 6;
}

void loop()
{
digitalWrite(5, HIGH);
}
myGLCD.clrScr();

{
myGLCD.setColor(0, 0, 255);
}
myGLCD.setBackColor(100, 100, 0);
myGLCD.setColor(0,255,255);
myGLCD.setFont(SmallFont);
myGLCD.print ("zwarte tekst/links", LEFT, 1);

Celsius_c = Serial.read(2);
Celsius = ktc.readCelsius();
Celsius_c = char(Celsius);
myGLCD.print("Deg C = ");
myGLCD.print(Celsius_c);
delay(500);
}

BVZ

Golden Member

Gebruik aub de [ code] en [ /code] tags, want zo is er lastig doorheen te komen.

Dat gezegd hebbende:

c code:

void loop()
{ 
digitalWrite(5, HIGH);
}

Je loop is wel erg snel afgelopen, de rest daaronder staat in het luchtledige.

net onder je loop staat
myGLCD.clrScr();
als dit een functieomschrijving is, moet je { zetten ipv die ;

en alle code erna staat dus ook fout, bijkomend heb je 1 } teveel staan.
je moet je code oproepen in de setup of loop, maar niet zomaar erbuiten.

ik denk dus dat je dit wou zetten

c code:



void loop()
{ 
digitalWrite(5, HIGH);
myGLCD.clrScr()
myGLCD.setColor(0, 0, 255);
myGLCD.setBackColor(100, 100, 0);
myGLCD.setColor(0,255,255);
myGLCD.setFont(SmallFont);
myGLCD.print ("zwarte tekst/links", LEFT, 1);

Celsius_c = Serial.read(2);
Celsius = ktc.readCelsius();
Celsius_c = char(Celsius);
myGLCD.print("Deg C = "); 
myGLCD.print(Celsius_c);
delay(500);
}

[Bericht gewijzigd door fcapri op 12 februari 2017 20:45:56 (46%)]

ik hou van werken ..., ik kan er uren naar kijken

bedankt voor de correcties. maar het gaat eigenlijk specifiek om dit gedeelte:

code:


Celsius_c = Serial.read(2);
Celsius = ktc.readCelsius();
Celsius_c = char(Celsius);
myGLCD.print("Deg C = "); 
myGLCD.print(Celsius_c);

dit had ik eerst geprogrammeerd als:

code:


     myGLCD.print("Deg C = "); 
      myGLCD.print(ktc.readCelsius());

Ik denk dat het een fout opleverd omdat het geen simpele tekst is en de functie het niet ondersteund ofzo.

zou dat kunnen?

ik moet er wel bij zeggen dat met de functie Serial.print wel uit te lezen is met de computer.

BVZ

Golden Member

Zoals de code is die je neergezet hebt kan het niet werken en krijg je de gekste foutmeldingen.

Dat eerst oplossen, dan foutzoeken. (Als die er dan nog zijn....)

Hint, zet eens // voor deze regel:

c code:

myGLCD.print(Celsius_c);

zo dus:

c code:

// myGLCD.print(Celsius_c);

en zorg dan dat de rest wel compileert.

Daarna, en niet eerder, haal je die // weg en compileer je nog eens.

EDIT: En Celsius_c is niet gelijk aan Celsius_C (!)

dit compileert wel, maar klopt niet:

code:

char Celsius_C(2);
Mijn thuis is waar mijn Weller staat

Dit compileerd hij wel goed, maar het uitlezen gaat nog niet echt goed. krijg geen leesbare tekens.

code:


#include <memorysaver.h>
#include <UTFT.h>
#include <max6675.h>

  int ktcSO = 2;  // Thermokoppel
  int ktcCS = 3;  // Thermokoppel
  int ktcCLK = 4; // Thermokoppel
  MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
  
  int dispx, dispy, text_y_center, swapxy;
  int buf[478];
  int x, x2;
  int y, y2;
  int r;
    UTFT myGLCD (ILI9481,38,39,40,41);
  extern uint8_t SmallFont[];
  extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

void setup() 
{
    pinMode(5, OUTPUT); digitalWrite(5, HIGH);
    pinMode(4, OUTPUT);
    pinMode(3, OUTPUT);
    pinMode(2, INPUT);
// Setup the LCD
    myGLCD.InitLCD();
    myGLCD.clrScr();
    myGLCD.setFont(SmallFont);
  dispx = myGLCD.getDisplayXSize();
  dispy = myGLCD.getDisplayYSize();
  text_y_center = (dispy / 2) - 6;
 

  
}

void loop()
{ 
  
  
  delay(1000);

 

  myGLCD.setBackColor(100, 100, 0);
  myGLCD.setColor(0,255,255);
  myGLCD.setFont(SmallFont);
  myGLCD.print ("Terrarium Display (zwarte tekst/links)", LEFT, 1);

 
  myGLCD.setBackColor(100, 100, 0);
  myGLCD.setColor(0,255,255);
  myGLCD.setFont(BigFont);
   int Celsius = ktc.readCelsius();
  myGLCD.print("Deg C= ", LEFT, 50); 
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.setColor(0,255,255);
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.print(Celsius, CENTER ,50);
 

   
   delay(100);
   }
BVZ

Golden Member

Op 12 februari 2017 22:15:35 schreef michak:
maar het uitlezen gaat nog niet echt goed. krijg geen leesbare tekens.

Wat gaat er niet goed aan? Zie je de tekst "Terrarium Display (zwarte tekst/links)" en "Deg C= " ook niet, of alleen de temperatuur als getal niet?

ik zie alleen de temperatuur weergave niet.
wel de simpele tekst.

dus of ik heb hardware matig een foutje gemaakt of het boardje van thermokoppel is stuk.

BVZ

Golden Member

En als je (bijna onderaan je code) deze regel:

c code:

myGLCD.print(Celsius, CENTER ,50);

verandert naar:

c code:

myGLCD.print("20", CENTER ,50);

Kun je dan wel die 20 aflezen?

EDIT: Hmmm, ik weet niet of dat strookt met: myGLCD.setFont(SevenSegNumFont);

Zet anders ook eens // voor myGLCD.setFont(SevenSegNumFont); en kijk wat hij dan doet met zowel

c code:

myGLCD.print(Celsius, CENTER ,50);

als

c code:

myGLCD.print("20", CENTER ,50);

Als ik een tekst neerzet ipv Celsius, doet hij het gewoon.
ongeacht of ik font sevensegnum weg haal of niet is puur lettertype

BVZ

Golden Member

Dan moet je je even verdiepen in de functie myGLCD.print()

Ik ken die library niet, maar wellicht zou dit

c code:

myGLCD.print(Celsius);

al wel werken.

Wellicht zijn die 'CENTER' en '50' alleen van toepassing op strings (char arrays) en niet op numerieke waarden.

Doe eens string Celsius = string(ktc.readCelsius());

Ofzo ?, je moet volgens mij een string aan de functie voeren, geen int.

Ja... en toen ?

Als ik dat weglaat, krijg ik een fout melding :

exit status 1
no matching function for call to 'UTFT::print(char&)'

als ik het erbij zet, en ik gebruik SmallFont, ipv SevenSegNumFont krijg ik wel iets in beeld, bijgevoegd is een foto.

rare streepjes in het midden. er gebeurd wel wat want de streepjes veranderen af en toe van positie maar anders dan dat geen tekst.

BVZ

Golden Member

no matching function for call to 'UTFT::print(char&)'

Hij verwacht dus een string en kan iets anders niet handelen.

Probeer eens:

c code:

myGLCD.printNumI(Celsius, CENTER ,50);

holy crap....that did the trick.
Ik zie nu een waarde, alleen nu is het nog een waarde zonder komma. Nu nog kijken of het een waarde met komma kan worden

BVZ

Golden Member

Dan moet je

c code:

myGLCD.printNumF(Celsius, CENTER ,50);

gebruiken.

De I is dan een F geworden, geen Integer, maar Float.

Moet je wel zorgen dat Celsius ook een float is. Of gewoon rechtstreeks in plaats van 'Celsius' weer ktc.readCelsius() invoegen.