tft geeft maar 3 karakters weer van de waardes

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

tft geeft maar 3 karakters weer van de waardes

Berichtdoor tijne » 20 Okt 2016, 22:14

beste,

ik weet niet hoe ik het goed kan omschrijven.

ik heb op mijn tft div. omschrijvingen waar de waardes achter worden gezet, echter geeft hij van de waardes maar 3 karakters weer. nou heb ik vooral aan en uit dus dat is geen probleem maar storing kan ik hem niet laten weer geven want dan krijg ik "sto".

van mijn temperatuur krijg ik ook alleen maar de eerste 3 karakters "60." en ik zou eigenlijk "60.54"willen hebben.

ik heb me rot gezocht maar ik kan het niet vinden, ik hoop dat jullie me verder op weg kunnen helpen.
Code: Alles selecteren

const int ven1 = 22; // de pin voor ven1
const int ven2 = 23; // de pin voor ven2
const int ven3 = 24; // de pin voor ven3
const int pomp = 25;
const int Kachel = 26; // de pin voor Kachel
const int Reset = 2;
const int keteltemp = 3;
const int stroming = 7;
const int termostaat = 11;
const int termostaataanled = 12;
const int tempWater = A0;
const int storing = 5;
const int storingstroming = 49;
const int storingketeltemp = 48;
const int storingtempwater = 47;


#include <OneWire.h>
#include <TFT.h> 
#include <SPI.h>

#define cs   10
#define dc   9
#define rst  8
OneWire  ds(6);

TFT TFTscreen = TFT(cs, dc, rst);


char sensorPrintout[4];

String sensortext = ("aan het is kut maar ik probeer ook maar wat");



void setup() {

  TFTscreen.begin();

  pinMode(ven1, OUTPUT);
  pinMode(ven2, OUTPUT);
  pinMode(ven3, OUTPUT);
  pinMode(Kachel, OUTPUT);
  pinMode(pomp, OUTPUT);
  pinMode(termostaataanled, OUTPUT);
  pinMode(storing, OUTPUT);
  pinMode(storingstroming, OUTPUT);
  pinMode(storingketeltemp, OUTPUT);
  pinMode(storingtempwater, OUTPUT);
  pinMode(keteltemp, INPUT);
  pinMode(Reset, INPUT);
  pinMode(stroming, INPUT);
  pinMode(termostaat, INPUT);
   
  Serial.begin(9600);
 

  digitalWrite(Kachel, HIGH);
  digitalWrite(ven1, HIGH);
  digitalWrite(ven2, HIGH);
  digitalWrite(ven3, HIGH);
  digitalWrite(pomp, HIGH);
  digitalWrite(termostaataanled, LOW);
  digitalWrite(storing, LOW);
  digitalWrite(storingstroming, HIGH);
  digitalWrite(storingketeltemp, HIGH);
  digitalWrite(storingtempwater, HIGH);
 
  }
 
void loop() {

   byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
 
  if ( !ds.search(addr)) {
    return;
  }
  for( i = 0; i < 8; i++) {
   }

  if (OneWire::crc8(addr, 7) != addr[7]) { 
      return;
  }
  switch (addr[0]) {
       type_s = 0;
      break;
    case 0x22:
       return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);     
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);       
  for ( i = 0; i < 9; i++) {           
    data[i] = ds.read();
    }
   Serial.println();

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3;
    if (data[7] == 0x10) {
         raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
   }
  celsius = (float)raw / 16.0;
 
    TFTscreen.stroke(255, 255, 255);

  if (digitalRead (5)) {TFTscreen.background(255, 0, 0);}
 else {TFTscreen.background(0, 0, 0); }
    sensortext.toCharArray(sensorPrintout, 4);


  TFTscreen.setTextSize(1);
  TFTscreen.text("Temp:\n ", 0, 5);
  TFTscreen.setTextSize(1);
  TFTscreen.text("Pomp:\n ", 0, 25);
  TFTscreen.setTextSize(1);
  TFTscreen.text("Ven1:\n ", 0, 45);
  TFTscreen.setTextSize(1);
  TFTscreen.text("Ven2:\n ", 0, 65);
  TFTscreen.setTextSize(1);
  TFTscreen.text("Ven3:\n ", 0, 85);
   

  TFTscreen.setTextSize(1);
  TFTscreen.text("Kachel:\n ", 75, 5);
  TFTscreen.setTextSize(1);
  TFTscreen.text("K Max:\n ", 75, 25);
  TFTscreen.setTextSize(1);
  TFTscreen.text("Termos:\n ", 75, 45);
  TFTscreen.setTextSize(1);
  TFTscreen.text("Stroming:\n ", 75, 65);
  TFTscreen.setTextSize(1);
  TFTscreen.text("Max temp:\n ", 75, 85);
  TFTscreen.setTextSize(1);

 String sensorVal = String(celsius);
    sensorVal.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 50, 5);
 
 
 if  (digitalRead (25)) { sensortext = ("uit");}                                                                   
 else {sensortext = ("aan") ;}
     sensortext.toCharArray(sensorPrintout, 4);
     TFTscreen.text(sensorPrintout, 50, 25);
     
 if  (digitalRead (22)) { sensortext = ("uit");}
  else {sensortext = ("aan") ;}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 50, 45);


 if  (digitalRead (23)) { sensortext = ("uit");}
  else {sensortext = ("aan") ;}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 50, 65);

 if  (digitalRead (24)) { sensortext = ("uit");}
  else {sensortext = ("aan") ;}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 50, 85);
   
//storing

  if (digitalRead (49)) { sensortext = ("");}      //stroming
    else {sensortext = ("10");}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 80, 100);

   if (digitalRead (48)) { sensortext = ("");}     //ketel temp
    else {sensortext = ("20");}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 80, 110);

   if (digitalRead (47)) { sensortext = ("");}    //temp water
    else {sensortext = ("30");}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 80, 120);

//storing


  if  (digitalRead (26)) { sensortext = ("uit");}
  else {sensortext = ("aan") ;}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 135, 5);

   
 if  (digitalRead (3)) { sensortext = ("uit");}
  else {sensortext = ("aan") ;}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 135, 25);

 if  (digitalRead (11)) { sensortext = ("aan");}
  else {sensortext = ("uit") ;}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 135, 45);

 if  (digitalRead (7)) { sensortext = ("OK");}
  else {sensortext = ("NOK") ;}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 135, 65);

  if (celsius > 105) {String (water);
  if (water = 1) { sensortext = ("aan");}}
else {sensortext = ("uit") ;}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 135, 85);

   
     
 
 

   int toetsWaarde = digitalRead(Reset);
   int toetsWaarde1 = digitalRead(stroming);
   int toetsWaarde2 = digitalRead(termostaat);
   int toetsWaarde3 = digitalRead(keteltemp);

 
 
  if (celsius > 30.00) {
    digitalWrite(ven1, LOW);
  }
  if (celsius < 25.00) {
    digitalWrite(ven1, HIGH);
  }
 
  if (celsius > 45.00) {
    digitalWrite(ven2,LOW);
  }
  if (celsius < 40.00) {
    digitalWrite(ven2, HIGH); 
  }

  if (celsius > 70.00) {
    digitalWrite(ven3,LOW);
  }
  if (celsius < 60.00) {
    digitalWrite(ven3, HIGH);
  }

//storing
  if (celsius > 105){
    digitalWrite(storing, HIGH);
    digitalWrite(storingtempwater, LOW);
  }

  if (toetsWaarde1 == LOW && digitalRead(25) == LOW){
    digitalWrite(storing, HIGH);
    digitalWrite(storingstroming, LOW);   
  }
  if (toetsWaarde3 == LOW){
  digitalWrite(storing, HIGH);
  digitalWrite(storingketeltemp, LOW);
 }
 
//storing
//reset
  if (toetsWaarde == HIGH){
    digitalWrite(storing, LOW);
    digitalWrite(storingtempwater, HIGH);
    digitalWrite(storingstroming, HIGH);
    digitalWrite(storingketeltemp, HIGH);
  }
//reset

  if(toetsWaarde2 == HIGH){
    digitalWrite(pomp, LOW);
  }
 
   {
  delay(1500);

 
  if(toetsWaarde2 == HIGH && toetsWaarde3 == HIGH && toetsWaarde1 == HIGH){
    digitalWrite(Kachel, LOW);
  }
  else{
    digitalWrite(Kachel, HIGH);
  }
  if(toetsWaarde2 == HIGH){
    digitalWrite(termostaataanled, HIGH);
  }
  else{
    digitalWrite(termostaataanled, LOW);
  }
  if(toetsWaarde2 == LOW && tempWater <= 29){
    digitalWrite(pomp, HIGH);
  }
   if (celsius > 105){
    digitalWrite(Kachel, HIGH);
  }
 
  if(celsius < 10){
    digitalWrite(pomp, LOW);
  }     
    Serial.print("tempWater: ");
        Serial.println(celsius);   
        Serial.print("Kachel: ");
        Serial.println(digitalRead(26));
        Serial.print("ven1: ");
        Serial.println(digitalRead(22));
        Serial.print("ven2: ");
        Serial.println(digitalRead(23));
        Serial.print("ven3: ");
        Serial.println(digitalRead (24));
        Serial.print("pomp: ");
        Serial.println(digitalRead (25));
        Serial.print("termostaat: ");
        Serial.println(digitalRead (11) );
        Serial.print("tempwater1: ");
        Serial.println(float (celsius > 105));
 
}


alvast bedankt.

gr martijn

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: tft geeft maar 3 karakters weer van de waardes

Berichtdoor Koepel » 21 Okt 2016, 00:43

Kun je aangeven waar het mis gaat ?
Ik zie nergens dat je het woord "storing" naar het scherm stuurt.
Je sensorPrintout is maar 4 byte. Dat zijn 3 tekens en een zero-terminator.
Kijk eens naar dtostrf(), dat zou mijn voorkeur hebben.

De digitalRead() geeft HIGH of LOW terug, dus dit kan beter:
Code: Alles selecteren
if  (digitalRead (23)) {

Bijvoorbeeld zo:
Code: Alles selecteren
if  (digitalRead (23) == HIGH) {


Heb je gedacht aan de DallasTemperature library ? Dat is een extra laag bovenop de OneWire library, om het gemakkelijker te maken.

Door de tekst wat meer open te schrijven, en meer consequent inspringen, is het volgens mij beter leesbaar.
Bijvoorbeeld dit:
Code: Alles selecteren
  if (digitalRead (49)) { sensortext = ("");}      //stroming
    else {sensortext = ("10");}
    sensortext.toCharArray(sensorPrintout, 4);
    TFTscreen.text(sensorPrintout, 80, 100);

Zie er op deze manier beter uit:
Code: Alles selecteren
  // stroming
  if (digitalRead (49) == HIGH) {
    sensortext = ("");
  } else {
    sensortext = ("10");
  }
 
  sensortext.toCharArray(sensorPrintout, 4);
  TFTscreen.text(sensorPrintout, 80, 100);

Waarom gebruik je daar een String object, als je toch al met tekst werkt. Bijvoorbeeld met een globale buffer of een pointer of met een directe aanroep van de funktie:
Code: Alles selecteren
  // stroming
  if (digitalRead (49) == HIGH) {
    TFTscreen.text("", 80, 100);
  } else {
    TFTscreen.text("10", 80, 100);
  }

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: tft geeft maar 3 karakters weer van de waardes

Berichtdoor tijne » 21 Okt 2016, 21:15

dank je wel voor je reactie!!!!!!!!

het is gelukt kwa weer gave. hellemaal top.

dat me sketch netter en beter kan dat geloof ik graag maar ben eerlijk gezegt al heel erg blij dat het nu werkt. dit is me eerste arduino en ik heb hem nu een week in huis en heb hiervoor nog nooid geprogrameerd. in de toekomst zal ik zeker er op gaan letten dat alles korte en netter word maar voor nu ben ik er even blij mee.
maar HEEL erg bedankt voor de verbeter punten.

gr martijn

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 23 gasten