Nextion get number time out

Hardware die niet past in bovenstaande onderwerpen
Berichten: 15
Geregistreerd: 25 Feb 2017, 15:16

Nextion get number time out

Berichtdoor bmweetje3 » 20 Apr 2021, 14:47

Hallo,

Inmiddels al een tijdje bezig met Arduino Mega en Nextion om een besturing te bouwen voor een zwembad. Al veel dingen werkend maar 1 ding krijg ik niet goed.
In het Nextion scherm is pagina 2 de pagina waar alle setpoints in staan die de Arduino moet gebruiken. Zolang deze pagina geopend is gaat het fout maar ga ik naar een andere pagina krijg ik op alle waarden op pagina 2 een get number time out. Ga ik weer naar pagina 2 gaat het weer goed.
De numbers en pagina zijn ingesteld als global, de sketch plaats ik als ik weer bij mijn laptop kan maar misschien is er iemand die de oplossing zo al weet.

Advertisement

Berichten: 15
Geregistreerd: 25 Feb 2017, 15:16

Re: Nextion get number time out

Berichtdoor bmweetje3 » 20 Apr 2021, 16:24

hierbij de code, nog niet helemaal af en maar wordt nog aan gewerkt. Alle tips zijn welkom :)

Code: Alles selecteren

//sketch voor de Controllino Maxi Automation, er wordt geen gebruik gemaakt van de Controllino Libary. De pinnr. zijn van de Mega 2560.
// datum 19-04-2021

#include <PWM.h>
#include <Wire.h>
#include <OneWire.h>
#include <Nextion.h>                            //serial2 RX2 pin17, TX2 pin16
#include <DallasTemperature.h>
#include <millisDelay.h>
#include <NewPing.h>
//#include <NexProgressBar.h>

#define ANALOGPUMPSPEED 12                       // Pompsnelheid 0-10V
#define ANALOGROLLDECKSPEED 13                   // Rolldecksnelheid 0-10V
#define RELAISPOMPS0 22                          //  Relay 0, filterpomp freq, regelaar start
#define KLEPBIJVULLEN 23                         // Relay 1, Festo klep voor automatisch water bijvullen
#define ZONNECOLLECTOR  24                       // Relay 2,  aansturing 3weg kogelkraan zonnecollector
#define KOGELKRAANOVERLOOP 25                    // Relay 3, kogelkraan gaat dicht tijdens rolldeck open, gaat open tijdens rolldeck dicht zodat bij stijgen water dit weg kan
#define ONTLUCHTEN  26                           // Relay 4, filter ontluchten via klep
#define WARMTEPOMPIN A5                          // pinnr. A5 ingang input geeft aan of warmtepomp aan (1) staat of uit (0)
#define ROLLDECK_OPEN A1                          // Analog In A1 rolldeck open ingang voor juiste pompsnelheid en status
#define ROLLDECK_DICHT A2                         // Analog In A2 rolldeck dicht ingang voor juiste pompsnelheid en status
#define FLOWMETER_ANALOG A0                      // Analog In A0  arduino, analoge ingang drukmeting. controle op (juiste) flow en indicatie filter spoelen.
#define KOGELKRAANCOLLECTOR_OPEN A9              // controle of kogelkraan open is
#define KOGELKRAANCOLLECTOR_DICHT A10            // controle of kogelkraan dicht is
#define ALARMMELDING 27                          // Controllino Relay 5, led voor signalering als er een alarm actief is. Kan ook digital out zijn?
//#define LEDPIN                                 // controle programma loopt, zichtbaar op display?
#define ALARMDOSEERUNIT A6                       // alarm melding doseer unit
#define OVERLOOPKLEP_DICHT A3                     // contact eindschakelaar dat kogelkraan overloop gesloten is
#define OVERLOOPKLEP_OPEN A4                      // Contact eindschakelaar dat overloop open is
#define NIVOZWEMBAD_LAAG A7                       //laag nivo, inschakelen bijvullen als rolldeck dicht is
#define NIVOZWEMBAD_HOOG A8                       //hoog nivo, stoppen bijvullen bij gesloten rolldeck
#define SCHOONSPUITEN_ROLLDECK 30                 // Relay 8, button in service menu, rolldeck openen en schoon spuiten
#define OPSTART_DELAY 5                          // opstart vertraging als de installatie opstart om de juiste druk op de drukmeter te verkrijgen in sec.
#define SETPOINT 30.5                            //  instelling gewenste temperatuur zwembad water in graden celcius. gaat naar display instelling
#define ON HIGH
#define OFF LOW
#define MIN_DRUK A0                              // druk instelling, bij afwijking stopt de pomp, ADC, 0V = 0ADC, 5V=1023ADC

//niveaumeter
#define MAX_DISTANCE 65
#define MIN_DISTANCE 25
#define GREEN 1024
#define RED 63488
#define niveauTriggerPin 2              //aangepast van 2 naar 10 voor de controllino
#define NiveauEchoPin 3              //aangepast van 3 naar 11 voor de controllino
                   
#define TEST 31


enum state {
  OPSTARTEN,
  ZWEMBAD_WARM,
  ZONNECOLLECTOR_AAN,
  ZONNECOLLECTOR_UIT,
  ZONNECOLLECTOR_AAN_WACHTEN,
  GEEN_FLOW,
};

enum state status = OPSTARTEN;
enum state previousStatus = OPSTARTEN;
uint32_t t_Delay=OPSTART_DELAY;
uint32_t deltaT;
uint32_t loopcount = 0;


NexText tStatus = NexText(0, 11, "tStatus");
NexNumber nTaanvoer = NexNumber(1, 7, "nTaanvoer");
NexNumber nTretour = NexNumber(1, 8, "nTretour");
NexNumber nTcollector = NexNumber(1, 9, "nTcollector");
NexNumber nTdelta = NexNumber (1, 10, "nTdelta");
//NexNumber nTaanvoer = NexNumber(0, 4, "nTaanvoer");


//buttons op page3
NexDSButton bPomp = NexDSButton(3, 7, "bPomp");                           // pomp  hand bediening
NexDSButton bBackWash = NexDSButton(3, 8, "bBackWash");                   //backwash start
NexDSButton bRollDeckSp = NexDSButton(3, 14,"bRollDeckSp");               //rolldeck schoonspuiten tijdens oprollen met spuitkoppen, Relay 8 pin30 en toerental instellen.
NexDSButton bDeckReinigen = NexDSButton(3, 22, "bDeckReinigen");          //rolldeck reinigen, draait langzaam met intervallen zodat de lamellen gepoetst kunnen worden
NexDSButton bCollector = NexDSButton (3, 6, "bCollector");                // collector handmatig inschakelen
NexDSButton bOntLuchten = NexDSButton(3, 5,"bOntLuchten");                // filter handmatig ontluchten
NexDSButton bOverLoop = NexDSButton(3, 25,"bOverLoop");                   //overloop kogelkraan handmatig open suren
NexSlider hFilterPomp = NexSlider(3, 20, "hFilterPomp");                  //pomp handmatig snelheid instellen, waarde slider 0-10
NexProgressBar pChloorLevel = NexProgressBar(1,17,"jChloorNivo");
//waarde slider 0-10
NexNumber sliderValue = NexNumber(3, 20, "slider");
NexButton AliveLed = NexButton(0,14,"test");
//setpoints page2
NexNumber PompOpstart = NexNumber(2,24,"PompOpstart");         //opstart snelheid draait de pomp een hoog rpm om de pomp aan te zuigen en te vullen, na tijdafloop snelheid naar continue
NexNumber PompDuur = NexNumber(2,26,"PompDuur");               //tijdsduur van de opstart zodat de pomp aanzuigt
NexNumber SetPointWater = NexNumber(2,15,"SetPointWater");     //gewenste watertemperatuur
NexNumber DeltaTRetour = NexNumber(2,16,"DeltaTRetour");       //verschiltemperatuur tussen aanvoer en retour waarbij de collector weer uit gaat
NexNumber Continue = NexNumber(2,17,"Continue");               //pompsnelheid normaal
NexNumber Collector = NexNumber(2,18,"Collector");             //pompsnelheid als collector opwarmt
NexNumber deltaTColl = NexNumber(2,30,"DeltaTColl");           //verschil collector en aanvoer waarbij de collector gaat opwarmen
NexNumber WachttijdCo = NexNumber(2,31,"WachttijdCo");         //tijdsduur dat er na start collector een temperatuurverhoging is
NexNumber WarmtePomp = NexNumber(2,19,"WarmtePomp");           //pompsnelheid als de warmtepomp gaat opwarmen
NexNumber Backwash = NexNumber(2,20,"Backwash");               //pompsnelheid tijdens backwash
NexNumber RolldeckOpen = NexNumber(2,38,"RolldeckOpen");       //pompsnelheid tijdens rolldeck openen
NexNumber deckSluiten = NexNumber(2,48,"DeckSluiten");         //pompsnelheid tijdens rolldeck sluiten   
NexNumber OpstartVertra = NexNumber(2,41,"OpstartVertra");     //tijdens opstart systeem vertraging op meet gegevens, nog nodig????
NexNumber BijVulTijd = NexNumber(2,54,"BijVulTijd");           //Maximale bij vul tijd water

//setpoints page4
NexNumber DeckStartRpm = NexNumber(4,16,"DeckStartRpm");     //opstartsnelheid voor juiste richting lamellen in het water
NexNumber DeckNormaalRpm = NexNumber(4,6,"DeckNormaalRpm");   //normale snelheid na opstart snelheid
NexNumber DeckStartDuur = NexNumber(4,2,"DeckStartDuur");     //tijdsduur dat opstartsnelheid duurt
NexNumber RollDeckOpen = NexNumber(4,23,"RollDeckOpen");      //snelheid openen rolldeck 
//NexNumber DeckSluiten = NexNumber(4,26,"DeckSluiten");        //snelheid sluiten rolldeck                                       
NexNumber DeckRpmInterva = NexNumber(4,4,"DeckRpmInterva");  //snelheid tijdens draaien onderhoud interval
NexNumber DraaiTijd = NexNumber(4,10,"DraaiTijd");            //tijdsduur draaien tussen interval onderhoud
NexNumber StopTijd = NexNumber(4,13,"StopTijd");              //tijdsduur stop tussen interval onderhoud


// NewPing setup of pins and maximum distance.
NewPing sonar = NewPing(niveauTriggerPin, NiveauEchoPin, MAX_DISTANCE);

millisDelay loopDelay;
millisDelay maxBijvulTijd;

// Register a button object to the touch event list. 
NexTouch *nex_listen_list[] = {
  &bPomp,               //pomp start
  &bBackWash,           //backwash start
  &bCollector,         //collector aanzetten
  &bOntLuchten,
  &bRollDeckSp,
  &bDeckReinigen,
  &Continue,
  &Collector,
  &WarmtePomp,
  &hFilterPomp,
  &WachttijdCo,
  &deltaTColl,
  &DeltaTRetour,
  &bOverLoop,
  &deckSluiten,
  &RolldeckOpen,
  NULL
};
DeviceAddress aanvoerWater1 = { 0x28, 0xFF, 0x8C, 0xD3, 0x61, 0x15, 0x03, 0xD4 };      // 0x28, 0xFF, 0xCB, 0xC7, 0x61, 0x15, 0x03, 0x5A      //reserve sensors,  0x28, 0xFF, 0x8C, 0xD3, 0x61, 0x15, 0x03, 0xD4
DeviceAddress retourWater2 =  { 0x28, 0xFF, 0xFF, 0xC5, 0x61, 0x15, 0x03, 0xC6 };      // 0x28, 0xFF, 0x45, 0xF1, 0x61, 0x15, 0x03, 0x72      //reserve sensors,  0x28, 0xFF, 0xFF, 0xC5, 0x61, 0x15, 0x03, 0xC6
DeviceAddress zonneCollector3 = { 0x28, 0x88, 0x98, 0x79, 0x97, 0x12, 0x03, 0x2A};     // 0x28, 0xFF, 0x35, 0xAC, 0x61, 0x15, 0x01, 0xE6      //reserve sensors,  0x28, 0x88, 0x98, 0x79, 0x97, 0x12, 0x03, 0x2A

int oneWire_Pin = 10;                              //DS18S20 sensors Controllino X2 Digital in 2
int secondeTeller = 0;
int minutenTeller = 0;
int urenTeller = 0;



//Temperature chip i/o
OneWire ds(oneWire_Pin);                        // on digital pin 10, Controllino X2 Digital in 2
                                                // Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&ds);

void bPompPopCallback(void *ptr) {             //bPump
  static uint32_t dual_state=0;
 
  NexDSButton* button;
  button = (NexDSButton*)ptr;
  button->getValue(&dual_state);
  if(dual_state == 1) {
    digitalWrite(RELAISPOMPS0, ON);     
    Serial.println("Pump aan");
  }
  else {
    digitalWrite(RELAISPOMPS0, OFF);
    Serial.println("Pump uit"); 
  }
}

void bBackWashPushCallback(void *ptr) {     //bBackWash
  static uint32_t dual_state=0;
  NexDSButton* button;
  button = (NexDSButton*)ptr;
  button->getValue(&dual_state);
  if(dual_state == 1) {
    digitalWrite(TEST, ON);
    Serial.println("backwash aan");
  }
  else {
    digitalWrite(TEST, OFF);
    Serial.println("backwash uit");
  }


}

void bDeckReinigenPushCallback(void *ptr) {             //bDeckReinigen
  static uint32_t dual_state=0;
 
  NexDSButton* button;
  button = (NexDSButton*)ptr;
  button->getValue(&dual_state);
  if(dual_state == 1) {
    digitalWrite(TEST, ON);     
    Serial.println("DeckReinigen aan");
  }
  else {
    digitalWrite(TEST, OFF);
    Serial.println("DeckReinigen uit"); 
  }
}
void bRollDeckSpPushCallback(void *ptr) {             //bRollDeckSp tijdens oprollen rolldeck schoonspuiten met spuitkoppen
  static uint32_t dual_state=0;
 
  NexDSButton* button;
  button = (NexDSButton*)ptr;
  button->getValue(&dual_state);
  if(dual_state == 1) {
    digitalWrite(TEST, ON);     
    Serial.println("RollDeck spuiten aan");
  }
  else {
    digitalWrite(TEST, OFF);
    Serial.println("RollDeck spuiten uit"); 
  }
}

void bCollectorPushCallback(void *ptr) {     //bCollector   
  static uint32_t dual_state=0;
  NexDSButton* button;
  button = (NexDSButton*)ptr;
  button->getValue(&dual_state);
  if(dual_state == 1) {
    digitalWrite(TEST, ON);
    Serial.println("kogelkraan collector aan"); 
  }   
  else {
    digitalWrite(TEST, OFF); 
    Serial.println("kogelkraan collector uit");
  }
}


void bOntLuchtenPushCallback(void *ptr) {     //bOntLuchten
  static uint32_t dual_state=0;
  NexDSButton* button;
  button = (NexDSButton*)ptr;
  button->getValue(&dual_state);
  if(dual_state == 1) {
    digitalWrite(TEST, ON);
    Serial.println("ontluchten aan"); 
  }   
  else {
    digitalWrite(TEST, OFF); 
    Serial.println("ontluchten uit");
  }
}

void bOverLoopPushCallback(void *ptr) {             //bOverLoop
  static uint32_t dual_state=0;
 
  NexDSButton* button;
  button = (NexDSButton*)ptr;
  button->getValue(&dual_state);
  if(dual_state == 1) {
    digitalWrite(TEST, ON);     
    Serial.println("kogelkraan overloop aan");
  }
  else {
    digitalWrite(TEST, OFF);
    Serial.println("kogelkraan overloop uit"); 
  }
}





void hPumpSliderPushCallback(void *ptr)     //hPumpSlider
{
    uint32_t number = 0;
    int analogOut;

   
    hFilterPomp.getValue(&number);
    Serial.print("Slidervalue is ");
    Serial.print(number);
    if (number > 0)
      digitalWrite(RELAISPOMPS0,ON);
    else
      digitalWrite(RELAISPOMPS0,OFF);
     
    analogOut = map(number, 0, 10, 0, 255);
   
    Serial.print("Analogout 0-10V  is ");
    Serial.print(analogOut);
    analogWrite(ANALOGPUMPSPEED, analogOut);
    Serial.println("Analog out:");
    Serial.println(analogOut);
   
}

void setup(void)

{
  pinMode(ANALOGPUMPSPEED, OUTPUT);
  pinMode(ANALOGROLLDECKSPEED, OUTPUT);
  pinMode(RELAISPOMPS0,OUTPUT);
  pinMode(KLEPBIJVULLEN, OUTPUT);
  pinMode(ZONNECOLLECTOR,OUTPUT);
  pinMode(KOGELKRAANOVERLOOP, OUTPUT);
  pinMode(ONTLUCHTEN, OUTPUT);
  pinMode(SCHOONSPUITEN_ROLLDECK, OUTPUT);                                               
  pinMode(WARMTEPOMPIN,INPUT);                     
  pinMode(ROLLDECK_OPEN,INPUT);
  pinMode(ROLLDECK_DICHT,INPUT);
  pinMode(FLOWMETER_ANALOG,INPUT);
  pinMode(KOGELKRAANCOLLECTOR_OPEN,INPUT);
  pinMode(KOGELKRAANCOLLECTOR_DICHT,INPUT);
  pinMode(ALARMMELDING, OUTPUT);
  //pinMode(LEDPIN,OUTPUT);
  pinMode(ALARMDOSEERUNIT, INPUT);
  pinMode(ROLLDECK_DICHT, INPUT);
  pinMode(ROLLDECK_OPEN, INPUT);
  pinMode(OVERLOOPKLEP_DICHT, INPUT);
  pinMode(OVERLOOPKLEP_OPEN, INPUT);
  pinMode(NIVOZWEMBAD_LAAG, INPUT);
  pinMode(NIVOZWEMBAD_HOOG, INPUT);
  digitalWrite(ZONNECOLLECTOR,OFF);               
  digitalWrite(KLEPBIJVULLEN,OFF);
  digitalWrite(RELAISPOMPS0,ON);   
  digitalWrite(ONTLUCHTEN,OFF);
  digitalWrite(SCHOONSPUITEN_ROLLDECK,OFF);
  //digitalWrite(LEDPIN,OFF);
  digitalWrite(ZONNECOLLECTOR,OFF);                 
  digitalWrite(KOGELKRAANOVERLOOP,OFF);
   

    pinMode(TEST,OUTPUT);
 
  Serial.begin(9600);
                                                  // You might need to change NexConfig.h file in your ITEADLIB_Arduino_Nextion folder
                                                  // Set the baudrate which is for debug and communicate with Nextion screen
  nexInit();

  bPomp.attachPop(bPompPopCallback, &bPomp);                        //  bPomp.attachPush(bPompPushCallback, &bPomp);
  bBackWash.attachPush(bBackWashPushCallback, &bBackWash);   
  bRollDeckSp.attachPush(bRollDeckSpPushCallback, &bRollDeckSp);         
  bDeckReinigen.attachPush(bDeckReinigenPushCallback, &bDeckReinigen);
  bCollector.attachPush(bCollectorPushCallback, &bCollector);
  bOntLuchten.attachPush(bOntLuchtenPushCallback, &bOntLuchten);   
  bOverLoop.attachPush(bOverLoopPushCallback, &bOverLoop);               
  hFilterPomp.attachPush(hPumpSliderPushCallback);

 
  sensors.begin();
  sensors.setResolution(aanvoerWater1, 10);
  sensors.setResolution(retourWater2, 10);
  sensors.setResolution(zonneCollector3, 10);   
  Serial.println("opstarten");
  loopDelay.start(1000);  // start a 1000mS delay
 }

int adc2druk(int adc) {
  float druk;
  float a = 2.397;
  druk = (float)adc * a;
  return round(druk);
}

void collector_aan(void) {
  uint32_t valueHz;
  int output;
  Collector.getValue(&valueHz);
  output=map(valueHz,0,50,0,255);
  analogWrite(ANALOGPUMPSPEED,output);
  Serial.print("Collector aan op ");
  Serial.print(valueHz);
  Serial.print("hz\n");
}

void collector_uit(void) {
   uint32_t valueHz;
  int output;
  Continue.getValue(&valueHz);
  output=map(valueHz,0,50,0,255);
  analogWrite(ANALOGPUMPSPEED,output);
  Serial.print("Collector uit op ");
  Serial.print(valueHz);
  Serial.print("hz\n");
}

void blinkLed(void) {
 static int led_status = 0;
 
  if (led_status == 0) {
    AliveLed.Set_font_color_pco(RED);           // Schakel LED in
  led_status = 1;
  } else {                       
    AliveLed.Set_font_color_pco(GREEN);           // schakel LED uit
   led_status = 0;
  }
}

void handleSomeIO(void) {
  if (digitalRead(ALARMDOSEERUNIT) == HIGH)
    digitalWrite(ALARMMELDING,HIGH);
  else
    digitalWrite(ALARMMELDING,LOW);
}

void handleBijvullen(void) {
  static bool bijvullen = false;
  static bool alarm = false;
  if (alarm == true) {
    return; //do nothing until alarm is cleared.
  }
  if (digitalRead(ROLLDECK_DICHT) == LOW) {
    digitalWrite(KLEPBIJVULLEN,LOW); //als rolluik open, dan NIET bijvullen
    bijvullen = false;
  }
  else { //rolluik is dicht
    if (digitalRead(NIVOZWEMBAD_LAAG) == HIGH)
    {
      digitalWrite(KLEPBIJVULLEN,HIGH);
      if (bijvullen == false) {
        maxBijvulTijd.start(30*60*1000);
        bijvullen = true;
      }
      else
      {
        if(maxBijvulTijd.justFinished()) {
          alarm = true;
          digitalWrite(KLEPBIJVULLEN,LOW);
          bijvullen = false;
        }
      }
    }
  }
}



void handleChloorLevel(void) {
 int chloorLevel;
 int percentage;
  // Send ping, get distance in cm and print result (0 = outside set distance range):
  chloorLevel = sonar.ping_cm();
  percentage = map(chloorLevel,MIN_DISTANCE,MAX_DISTANCE,100,0);
  //Serial.print("Distance = ");Serial.print(chloorLevel); Serial.println(" cm\n");
  pChloorLevel.setValue(percentage);
  //Serial.print("percentage= "); Serial.print(percentage);  Serial.println("\n");
  if(percentage <= 25)
    pChloorLevel.Set_font_color_pco(RED);
  else
    pChloorLevel.Set_font_color_pco(GREEN);
}
void loop(void) {
 static float TAanvoerWater, TRetourWater, TCollector;
 float checktemp;
 int druk;
 int drukadc;

       
  /*
   * When a pop or push event occured every time,
   * the corresponding component[right page id and component id] in touch event list will be asked.
   */
  nexLoop(nex_listen_list);

 if(!loopDelay.justFinished()) {
  //do nothing
 }else {
  loopDelay.start(1000);  // start a 1000mS delay

//debug lines
 uint32_t valueHz;
  PompOpstart.getValue(&valueHz); Serial.print("pompopstart= "); Serial.print(valueHz); Serial.print("hz\n");                          // */
  SetPointWater.getValue(&valueHz); Serial.print("setpoint water= "); Serial.print(valueHz); Serial.print("hz\n");
  DeltaTRetour.getValue(&valueHz); Serial.print("delta t retour= "); Serial.print(valueHz); Serial.print("hz\n");
  Continue.getValue(&valueHz); Serial.print("pompcontinue= "); Serial.print(valueHz); Serial.print("hz\n");
  Collector.getValue(&valueHz); Serial.print("pompcollector= "); Serial.print(valueHz); Serial.print("hz\n");
  WarmtePomp.getValue(&valueHz); Serial.print("pomp warmtepomp= "); Serial.print(valueHz); Serial.print("hz\n");
  Backwash.getValue(&valueHz); Serial.print("pomp backwash= "); Serial.print(valueHz); Serial.print("hz\n");
  RolldeckOpen.getValue(&valueHz); Serial.print("pomp rolldek open= "); Serial.print(valueHz); Serial.print("hz\n");
  OpstartVertra.getValue(&valueHz); Serial.print("opstartvertraging= "); Serial.print(valueHz); Serial.print("hz\n");
  BijVulTijd.getValue(&valueHz); Serial.print("water bijvullen= "); Serial.print(valueHz); Serial.print("hz\n");
  deltaTColl.getValue(&valueHz); Serial.print("delta t coll= "); Serial.print(valueHz); Serial.print("hz\n");
  deckSluiten.getValue(&valueHz); Serial.print("pomp rolldek sluiten= "); Serial.print(valueHz); Serial.print("hz\n");
  Serial.print("\n\n\n\n");
 
  handleChloorLevel();
  blinkLed();
  handleSomeIO();
  handleBijvullen();
 sensors.requestTemperatures();
 checktemp = getTemp(aanvoerWater1);
  if (checktemp > 1)                          //gewijzigd van 0 naar 1, proef om de meetvout in sensor op te heffen 21-05-2018
    TAanvoerWater = checktemp;
 
  checktemp = getTemp(retourWater2);
  if (checktemp > 1)                          //gewijzigd van 0 naar 1, proef om de meetvout in sensor op te heffen 21-05-2018
    TRetourWater = checktemp;
 
  checktemp = getTemp(zonneCollector3);
  if (checktemp > 1)                          //gewijzigd van 0 naar 1, proef om de meetvout in sensor op te heffen 21-05-2018
    TCollector = checktemp;

  drukadc = analogRead(FLOWMETER_ANALOG);
  druk = adc2druk(drukadc);
  nTaanvoer.setValue(TAanvoerWater);

  nTretour.setValue(TRetourWater);
  nTcollector.setValue(TCollector);
  if (TRetourWater >= TAanvoerWater)
      nTdelta.setValue(TRetourWater - TAanvoerWater);
 
  if (status != GEEN_FLOW){
      switch(status){
          case OPSTARTEN:
              tStatus.setText("Opstarten");
          break;
          case ZWEMBAD_WARM:
              tStatus.setText("Zwembad warm");
          break;
          case ZONNECOLLECTOR_AAN:
              tStatus.setText("Zon.Col. aan");
          break;
          case ZONNECOLLECTOR_UIT:
              tStatus.setText("Circuleren");
          break;
          default:
              char strStatus[25];
              dtostrf(status, 25, 25, strStatus);
              tStatus.setText(strStatus);
          break;
      }
  } else {
    tStatus.setText("Geen flow");
  }
 

  //start state diagram
  switch (status) {
  case OPSTARTEN:
    if (t_Delay>0) {
      t_Delay-=1;
    }
    else {
        status = ZWEMBAD_WARM;
    }
  break;
 
  case ZWEMBAD_WARM:
    if(TAanvoerWater < SETPOINT) {
      deltaTColl.getValue(&deltaT);                 //xxx
      if (TCollector > (TAanvoerWater + deltaT)) {
         collector_aan();
         WachttijdCo.getValue(&t_Delay);            //xxx
         status = ZONNECOLLECTOR_AAN_WACHTEN;
      } else
        status = ZONNECOLLECTOR_UIT;
    }
  break;
  case ZONNECOLLECTOR_AAN:
    deltaTColl.getValue(&deltaT);           //xxx
    if (TAanvoerWater > SETPOINT) {
      collector_uit();
      status = ZWEMBAD_WARM;
    } else if ((TRetourWater + deltaT) < TAanvoerWater) {
        collector_uit();
        status = ZONNECOLLECTOR_UIT;
    }
  break;
  case ZONNECOLLECTOR_UIT:
    deltaTColl.getValue(&deltaT);       //xxx
    if (TAanvoerWater > SETPOINT)
      status = ZWEMBAD_WARM;
    else if (TCollector > (TAanvoerWater + deltaT)) {
      collector_aan();
      WachttijdCo.getValue(&t_Delay);        //xxx
      status = ZONNECOLLECTOR_AAN_WACHTEN;
    }
    else {
      uint32_t valueHz;
      int output;
      //check of warmtepomp aan staat, dan pompsnelheid verhogen
      if (digitalRead(WARMTEPOMPIN) == HIGH) {
        WarmtePomp.getValue(&valueHz);          //xxx           
      } else {
        Continue.getValue(&valueHz);               
      }
      output=map(valueHz,0,50,0,255);
      analogWrite(ANALOGPUMPSPEED,output);
    }
  break;
  case ZONNECOLLECTOR_AAN_WACHTEN:
    if(t_Delay > 0)
      t_Delay -=1;
     else
      status = ZONNECOLLECTOR_AAN;
  break;
  case GEEN_FLOW:
    digitalWrite(RELAISPOMPS0,LOW);
    digitalWrite(ALARMMELDING,HIGH);
  break;
  default:
  break;
  }
 }
}



float getTemp(DeviceAddress deviceAddress){
  //returns the temperature from one DS18S20 in DEG Celsius

  return sensors.getTempC(deviceAddress);
 
}

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Nextion get number time out

Berichtdoor shooter » 20 Apr 2021, 18:06

Je hebt het over pagina 1 en 2 etc, maar is oeilijk te volgen in je listing waar wat gebeurt, dus maak een nette lijst van teksten, dat kan in een array hoor.
verder zie ik een hoop define regels, zet daar pin voor dan weet je dat het een hardware adres is.
paul deelen
shooter@home.nl

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Nextion get number time out

Berichtdoor ctunes » 20 Apr 2021, 21:33

Mens! Wat haal je jezelf op de hals?!
Geen programmeur kan hier wijs uit worden, zonder het zelf oorspronkelijk geprogrammeerd te hebben.

Punt 1:
Code: Alles selecteren
loopDelay.start(1000);  // start a 1000mS delay


Als je timers nodig hebt in loop(), gebruik dan ook een timer.

En geen rare constructies zoals dit:
Code: Alles selecteren
 if(!loopDelay.justFinished()) {
  //do nothing
 }else


Punt 2:
Code: Alles selecteren
 PompOpstart.getValue(&valueHz); Serial.print("pompopstart= "); Serial.print(valueHz); Serial.print("hz\n");                          // */


// */


Sommige compilers gaan goed om met nested comments, sommige niet, en dat is dan ook weer versie afhankelijk.


Dat het programma überhaupt werkt is eerder toeval, en toeval valt niet de debuggen.

Ik denk dat je ergens een mismatch tussen "{}" hebt, maar zonder betere documentatie kan ik je niet verder helpen.

Probeer je code eens te "prettyfyen", en zie of er geen switch() in een onbedoelde if() is geslopen.

::

Daarnaast is dit weer een mooi voorbeeld waarbij (zogenaamde) "zinnige" variabelenamen niet tot leesbare code leiden.
(Enkel documentatie kan dat.)

Berichten: 15
Geregistreerd: 25 Feb 2017, 15:16

Re: Nextion get number time out

Berichtdoor bmweetje3 » 20 Apr 2021, 23:22

shooter schreef:Je hebt het over pagina 1 en 2 etc, maar is oeilijk te volgen in je listing waar wat gebeurt, dus maak een nette lijst van teksten, dat kan in een array hoor.
verder zie ik een hoop define regels, zet daar pin voor dan weet je dat het een hardware adres is.


Paul dankjewel voor je advies, zodra ik weer wat tijd heb ga ik hier aan verder met opschonen en aanpassen zoals je voor stelt. Ik ben geen programmeur maar dat moge duidelijk zijn, elke keer als iets werkt doe ik bijna een vreugdesprongetje 8-)
er zijn een aantal pagina`s op het Nextion scherm, pagina 1 is een status scherm waar wat info af te lezen is. Pagina 3 is een service pagina waar ik met dualstate buttons wat aan en uit kan zetten.
Op pagina 2 en 4 staan eigenlijk instellingen en setpoints waar de Arduino de ingestelde waarde moet ophalen. Dit werkt alleen als ik bijvoorbeeld pagina 2 op het scherm open heb. Zodra ik naar een ander scherm ga krijg ik de timeout meldingen. Het lijkt dan of de Arduino niet weet waar hij de info moet ophalen, mocht je hier nog een oplossing voor hebben hoor ik het graag. Ik ben hier niet dagelijks mee bezig.
Het Nextion scherm komt in de plaats van een standaard 4 regels scherm waarop het 5 jaar goed gedraait heeft. Alleen stonden toen de instellingen in de Arduino en draaide dit goed. Als ik dan wat aan wilde passen moest dit met de laptop aan de arduino. Nu met het Nextion scherm wil ik dit op het scherm doen.
Met het Nextionscherm zijn er meer mogelijkheden alleen het probleem met de timeout zorgt dat je dingen gaat proberen en dat zal hier en daar niet zo netjes zijn.
Het is ook nog niet helemaal zoals ik het wil, er zijn nog dingen die erbij gezet moeten worden maar nu loop ik tegen deze timeout aan wat ik eigenlijk eerst opgelost wil hebben.
als het niet mogelijk is wat ik wil hoor ik het graag. Een andere oplossing hoor ik ook graag, kan ik die richting op.

Berichten: 15
Geregistreerd: 25 Feb 2017, 15:16

Re: Nextion get number time out

Berichtdoor bmweetje3 » 21 Apr 2021, 02:08

ctunes schreef:Mens! Wat haal je jezelf op de hals?!
Geen programmeur kan hier wijs uit worden, zonder het zelf oorspronkelijk geprogrammeerd te hebben.

Punt 1:
Code: Alles selecteren
loopDelay.start(1000);  // start a 1000mS delay


Als je timers nodig hebt in loop(), gebruik dan ook een timer.

En geen rare constructies zoals dit:
Code: Alles selecteren
 if(!loopDelay.justFinished()) {
  //do nothing
 }else


Punt 2:
Code: Alles selecteren
 PompOpstart.getValue(&valueHz); Serial.print("pompopstart= "); Serial.print(valueHz); Serial.print("hz\n");                          // */


// */


Sommige compilers gaan goed om met nested comments, sommige niet, en dat is dan ook weer versie afhankelijk.


Dat het programma überhaupt werkt is eerder toeval, en toeval valt niet de debuggen.

Ik denk dat je ergens een mismatch tussen "{}" hebt, maar zonder betere documentatie kan ik je niet verder helpen.

Probeer je code eens te "prettyfyen", en zie of er geen switch() in een onbedoelde if() is geslopen.

::

Daarnaast is dit weer een mooi voorbeeld waarbij (zogenaamde) "zinnige" variabelenamen niet tot leesbare code leiden.
(Enkel documentatie kan dat.)



Stel nou dat ik de code er niet bij had gezet, zou je dan wel kunnen vertellen dat het kan wat ik graag zou willen? Of is dit iets wat niet gaat werken? ik ben niet dagelijks bezig met programmeren dus inderdaad het zal niet volgens de regels zijn.
Maar los van de code, is het mogelijk wat ik wil?
aan je opmerkingen begrijp ik dat je er veel vanaf weet. Zou je me dan een voorbeeldje kunnen geven hoe ik van bijvoorbeeld pagina 1 in het Nextion scherm een getal uit een number veld kan halen en dit door de arduino kan laten gebruiken.
en als ik dan deze waarde op de pagina verander dat de verandering door de Arduino gezien wordt. Het werkt zolang ik op dezelfde pagina blijf maar zodra ik naar het beginscherm ga krijg ik een timeout op de gevraagde waarde. Of is het beter om deze waarde op te slaan in de EEPROM van de Arduino en deze te overschrijven bij wijzigen in het Nextion scherm?

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Nextion get number time out

Berichtdoor shooter » 21 Apr 2021, 08:34

Het is inderdaad beter om alle waarden in een eeprom te zetten, al is het al voor het feit dat je dan met een laptop kunt wijzigen ipv dat je dat moet doen via een nextion.
Ik heb helaas geen nextion dus kan het niet proberen, maar een timeout krijg je omdat je iets gevraagd of open hebt staan terwijl je niet wacht op een ackowledge.
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 25 Feb 2017, 15:16

Re: Nextion get number time out

Berichtdoor bmweetje3 » 22 Apr 2021, 03:24

De waarden worden in de EEPROM van het Nextion scherm gezet. De keuze voor deze waarden in een instellingenscherm op een pagina van de Nextion is dat ik dan niet elke keer met de laptop hiervoor aan de slag moet.
Ook is het handig als andere van het gezin dan een instelling kunnen veranderen als ik niet thuis ben.
Op zich werkt het wel zolang ik de pagina open heb. Als ik een setpoint verander dan veranderd ook meteen de analoge 0-10V waarde die de frequentieregelaar aanstuurt. Zover werkt alles maar zodra ik naar een andere pagina ga dan gaat het fout. Een andere oplossing zou misschien zijn om de waarden in de EEPROM van de Arduino te zetten. Dus als ik iets wijzig op pagina 2 dat dit dan ook in de EEPROM van de Arduino wordt gewijzigd.
Zodra ik weer meer tijd heb om wat op de laptop te doen ga ik hier eens naar kijken. Ben nu alle in en uitgangen aan het bedraden en deze functies moeten ook nog in het programma.

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Nextion get number time out

Berichtdoor ctunes » 04 Mei 2021, 19:46

bmweetje3 schreef:De waarden worden in de EEPROM van het Nextion scherm gezet. De keuze voor deze waarden in een instellingenscherm op een pagina van de Nextion is dat ik dan niet elke keer met de laptop hiervoor aan de slag moet.
Ook is het handig als andere van het gezin dan een instelling kunnen veranderen als ik niet thuis ben.
Op zich werkt het wel zolang ik de pagina open heb. Als ik een setpoint verander dan veranderd ook meteen de analoge 0-10V waarde die de frequentieregelaar aanstuurt. Zover werkt alles maar zodra ik naar een andere pagina ga dan gaat het fout. Een andere oplossing zou misschien zijn om de waarden in de EEPROM van de Arduino te zetten. Dus als ik iets wijzig op pagina 2 dat dit dan ook in de EEPROM van de Arduino wordt gewijzigd.


Jij praat met de zaken voor je neus, en doet vervolgens net alsof wij kunnen zien wat jij aanwijst.

Helaas, Plato had ongelijk: Ik kan van de schaduwen die jij op de rotswand werpt niets zinnigs maken.

Wat U nodig heeft is een Zelf: teneinde U Uw Zelf duidelijk te maken wat U aan het doen bent trachten te zijn; daar kan geen andere Zelf bij helpen.

Berichten: 15
Geregistreerd: 25 Feb 2017, 15:16

Re: Nextion get number time out

Berichtdoor bmweetje3 » 25 Mei 2021, 22:03

ctunes schreef:
bmweetje3 schreef:De waarden worden in de EEPROM van het Nextion scherm gezet. De keuze voor deze waarden in een instellingenscherm op een pagina van de Nextion is dat ik dan niet elke keer met de laptop hiervoor aan de slag moet.
Ook is het handig als andere van het gezin dan een instelling kunnen veranderen als ik niet thuis ben.
Op zich werkt het wel zolang ik de pagina open heb. Als ik een setpoint verander dan veranderd ook meteen de analoge 0-10V waarde die de frequentieregelaar aanstuurt. Zover werkt alles maar zodra ik naar een andere pagina ga dan gaat het fout. Een andere oplossing zou misschien zijn om de waarden in de EEPROM van de Arduino te zetten. Dus als ik iets wijzig op pagina 2 dat dit dan ook in de EEPROM van de Arduino wordt gewijzigd.


Jij praat met de zaken voor je neus, en doet vervolgens net alsof wij kunnen zien wat jij aanwijst.

Helaas, Plato had ongelijk: Ik kan van de schaduwen die jij op de rotswand werpt niets zinnigs maken.

Wat U nodig heeft is een Zelf: teneinde U Uw Zelf duidelijk te maken wat U aan het doen bent trachten te zijn; daar kan geen andere Zelf bij helpen.



snap niet wat je hiermee allemaal bedoelt, ook niet echt behulpzaam moet ik zeggen. Als je niet wilt of kunt helpen zeg dan niks. Niet iedereen is een geboren programmeur zoals jij.

Volgende

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 13 gasten