Arduino code voor aansturing Nextion scherm

Arduino specifieke Software
Gebruikers-avatar
Berichten: 3
Geregistreerd: 10 Mrt 2020, 20:35
Woonplaats: Delft

Arduino code voor aansturing Nextion scherm

Berichtdoor Tom_Ende » 10 Mrt 2020, 21:07

Hallo allemaal,

Ik ben helemaal nieuw in Arduino land en al helemaal kwa programmeren.

Ik zoek iemand wie mij zou willen helpen ben bezig met een Geiger Counter Project de counter zelf werkt al de aansturings software vanuit arduino en nextion scherm in grote lijnen alleen wil ik wat specifieke dingen in de code zoals

stel de meting is normaal moet hij iets op het scherm tonen in het groen als de waarden licht verhoogd zijn in het orange en bij gevaarlijke waarden in het rood.

Wij kan en wil mij helpen zit al dagen hoofdpijn te krijgen omdat ik er zelf niet uitkom. Ik woon in Delft

Stuur effe een reactie als je wilt / kunt helpen. Kennis van een Geiger Counter is niet nodig die werkt namelijk al wel heel leerzaam

Groeten

Tom

Advertisement

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

Re: Arduino code voor aansturing Nextion scherm

Berichtdoor Koepel » 10 Mrt 2020, 22:31

Hallo en welkom op dit forum.

Ik weet niet of er iemand in de buurt van Delft woont (om een Paracetamol te brengen).
Kun je vertellen wat al werkt en wat het probleem is ?

Gebruik je de Nextion-Arduino library ?
Kun je een getal op het scherm laten zien ? Is de kleur het probleem ?
Ik zie dat er een functie "Set_font_color_pco()" is, dat is misschien de kleur voor de tekst.
De term "pco" gebruiken zij voor de voorgrondkleur van de tekst.
Dat is in het RGB565 formaat, of een voorgeprogrammeerde kleur: https://nextion.tech/instruction-set/#s5.

Gebruikers-avatar
Berichten: 3
Geregistreerd: 10 Mrt 2020, 20:35
Woonplaats: Delft

Re: Arduino code voor aansturing Nextion scherm

Berichtdoor Tom_Ende » 10 Mrt 2020, 23:40

De Geiger Counter zelf werkt en hij zet ook al data naar het Nextion schem alleen krijg ik het waarschuwings stukje niet aan de praat

Hij moet namelijk afhankelijk van de CPM Counts Per Minute een tekst plaatsen met een achtergrond kleur

Lage waarden onder de 25 CPM Tekst : NORMAL BACKGROUND Kleur: Groen
Boven de 25 onder de 60 CPM Tekst : ELEVATED ACTIVITY Kleur: Orange
Boven de 60 CPM Tekst HIGH RADIATION LEVEL Kleur Rood

Mijn code :

//Begin

//Voor de Arduino Mega
#include "Nextion.h"


//#define nexSerial Serial1 Nextion aansluiten op TX2 (Pin 16)Geel / RX2 (Pin 17)Blauw

#define CONV_FACTOR_J305 0.008120 // GEIGER_TUBE_J305ß counts to uSv/hr multiplier //

char countsBuffer[100] = {0}; // char countsBuffer[tekens] = [0];
char cpmBuffer[100] = {0};
char uSvBuffer[100] = {0};

NexText t0 = NexText(0, 1, "t0"); // NexText t0 = NexText(page, id, "objname");
NexText t1 = NexText(0, 2, "t1");
NexText t2 = NexText(0, 3, "t2");
NexText t3 = NexText(0, 4, "t3");
NexText t4 = NexText(0, 5, "t4");

#define AVG_PERIOD 15000 // CPM-uitvoerperiode in milliseconden, 15000-60000 aanbevolen
#define ONE_MINUTE 60000 // maskeerperiode van monitoring

unsigned long counts; // variabele voor het opnemen van het aantal pulsen van de handset
unsigned long cpm; // variabele voor CPM (aantal decays per minuut)
unsigned int multiplier; // vermenigvuldiger voor het berekenen van CPM


void tube_impulse() { // externe interrupt-handler
counts++; // waar is het aantal pulsen per segment LOG_PERIOD
}

// NexTouch *nex_listen_list[] = //Laat het scherm "luisteren" naar de binnenkomende gegevens
// {
// &t0,
// &t1,
// &t2,
// &t3,
// &t4,
// NULL
// };

void setup() // Presets
{
counts = 0; // reset de pulsteller
cpm = 0; // ongeldige CPM

//nexSerial.begin(9600); // poortsnelheid 9600 nexSerial
nexInit();

Serial.begin(9600); // poortsnelheid 9600 Arduino



multiplier = ONE_MINUTE / AVG_PERIOD; // berekening van de vermenigvuldiger voor het omzetten van pulsen naar CPM

pinMode(19, INPUT); // maak pin 2 input 19
digitalWrite(19, HIGH); // Use internal pullup resistor

attachInterrupt(0, tube_impulse, FALLING); // externe interrupt op pin 2 bij het veranderen van het niveau van 1 naar 0

Serial.println("RadiationD-v1.1 (CAJOE)");
Serial.println("=========================================");
Serial.print("Please stand by for ");
Serial.print(AVG_PERIOD / 1000);
Serial.println(" sec. for first reading...");
Serial.println();
}

void loop() // Lus
{

static unsigned long then;
unsigned long now = millis();


double uSv; // Approx radiation level in microsieverts

if (now - then > AVG_PERIOD) {
then = now;
if (counts) { // i.e., if (counts != 0)
cpm = counts * multiplier;
uSv = cpm * CONV_FACTOR_J305;
} else {
uSv = 0;
}

Serial.print("counts: ");
Serial.print(counts);

sprintf(countsBuffer, "counts: %02u ", counts);
t0.setText(countsBuffer);

Serial.print(" CPM: ");
Serial.print(cpm);

sprintf(cpmBuffer, "cpm: %02u ", cpm);
t1.setText(cpmBuffer);

Serial.print(" uSv/hr: ");
Serial.println(uSv, 4); // Display 4 decimal places

sprintf(uSvBuffer, "uSv: %02u ", uSv);
t2.setText(uSvBuffer);


if (cpm < 25)
{Serial.print ("t4.pco = 31");
t4.setText("NORMAL BACKGROUND");}
else if (cpm > 60)
t4.setText("HIGH RADIATION LEVEL");
else if (cpm > 25)
t4.setText("ELEVATED ACTIVITY");

counts = 0, cpm = 0;
}
delay(100); // TODO: more efficient form of power saving/sleep
}

//Einde



------------------------------------------------------------------------------------------------------------------

Met dit stukje code ben ik nu aan het klooien om het aan de praat te krijgen:

if (cpm < 25)
{Serial.print ("t4.pco = 31");
t4.setText("NORMAL BACKGROUND");}
else if (cpm > 60)
t4.setText("HIGH RADIATION LEVEL");
else if (cpm > 25)
t4.setText("ELEVATED ACTIVITY");

Zoals gezegd heb ik pas een paar dagen programmeer ervaring voorlopig kun je het zoeken, vinden, knippen en plakken ervaring noemen en de geiger counter zelf werkt ook de uitvoer naar het Nextion scherm werkt krijg alleen het waarschuwings systeem niet goed geen goede voorbeelden kunnen vinden hoe ik dat kan schrijven en de kleur werkt niet

Groeten

Tom

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

Re: Arduino code voor aansturing Nextion scherm

Berichtdoor Koepel » 11 Mrt 2020, 01:17

Als je een "t4.setText()" doet, zie je dan die tekst op het scherm ? Als dat werkt dan gaat het wel lukken.

Ik heb een Nextion klokje op mijn tafel staan, maar ik ben van de ITEAD-Arduino library afgestapt. Helaas ben ik vergeten hoe dat ging met de library.

Zouden ze nog steeds RGB565 gebruiken ?
Probeer dan dit eens:
cpp code
#define RGB565_ORANGE 64288
...

if( cpm > 60)
{
t4.Set_font_color_pco( RED);
t4.setText( "HIGH RADIATION LEVEL");
}
else if( cpm > 25) // tussen 25 en 60
{
t4.Set_font_color_pco( RGB565_ORANGE);
t4.setText( "ELEVATED ACTIVITY");
}
else // lager dan 25
{
t4.Set_font_color_pco( GREEN);
t4.setText( "NORMAL BACKGROUND");
}


Als je een Arduino Mega 2560 board gebruikt, dan is dat heel goed. Dan kun je het Nextion scherm aan een hardware serial port hangen. Wanneer je SoftwareSerial gebruikt, dan kun je problemen verwachten. Gebruik de SoftwareSerial alleen als het echt niet anders kan, en gebruikt het dan nog niet :mrgreen:

Deze code die je vond: Serial.print ("t4.pco = 31");
dat is voor als het Nextion scherm verbonden is met "Serial" en je zelf het commando gaat versturen. Wat de Set_font_color_pco() functie doet is niets anders dan dat commando versturen, met nog wat extra code er om heen.

Je gebruikt geen "nexLoop(nex_listen_list);" ? Mag dat zomaar weggelaten worden ? Je kunt nu ook niet op het scherm op iets drukken.

Wanneer het stukje code werkt, en je ziet ook echt de kleur oranje, dan kun je deze functie misschien toevoegen:
Code: Alles selecteren
// ---------------------------------------------
// rgb565     version 2
// ---------------------------------------------
// Convert a hexadecimal rgb value into a rgb565 format.
// To be able to use HTML RGB color format in a Arduino sketch.
//
// When a text is needed, then the result can converted into
// a decimal number as text with a sprintf with %u, or with utoa().
// Great HTML color picker tool:
//   https://www.w3schools.com/colors/colors_picker.asp
uint16_t rgb565( const unsigned long rgb)
{
  uint16_t R = (rgb >> 16) & 0xFF;
  uint16_t G = (rgb >>  8) & 0xFF;
  uint16_t B = (rgb      ) & 0xFF;

  uint16_t ret  = (R & 0xF8) << 8;  // 5 bits
           ret |= (G & 0xFC) << 3;  // 6 bits
           ret |= (B & 0xF8) >> 3;  // 5 bits
       
  return( ret);
}


Er bestaat een "zeef methode" om iets naar verschillende grootte te sorteren: https://www.arduinoforum.nl/viewtopic.php?f=8&t=3877#p26183.

Dat klinkt met woorden omschreven zo:
Nou, eerst eens even afhandelen wat groter dan 60 is, dan hebben we dat maar gehad.
Als het niet groter dan 60 is, is het dan misschien groter dan 25. De waarde is dan dus tussen de 25 en 60.
Als het zelfs niet groter dan 25 is, dan blijft er niets anders over dan dat het kleiner dan 25 moet zijn.

Wanneer je een sketch op dit forum zet, kun je de sketch dan tussen code-tags plaatsen ?
De knop "Code" heeft de tags: "[ code ]" en "[ / code ]".
De "Select a Syntax" en dan "C++" heeft de tags: "[ code2 = cpp ]" en "[ / code2 ]".

Gebruikers-avatar
Berichten: 3
Geregistreerd: 10 Mrt 2020, 20:35
Woonplaats: Delft

Re: Arduino code voor aansturing Nextion scherm

Berichtdoor Tom_Ende » 11 Mrt 2020, 02:04

Het werkt dank je wel

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: exiqoduz, Google [Bot] en 8 gasten