Buona sera, sto cercando di realizzare una piccola centralina
Con questo display , usando lo schema a stati
Con più pagine sul display così da mettere ogni pagina in uno stato mi funziona solo la prima pagina le altre non si aggiornano i valori.
ciao , cerca su YouTube Italia, un noto maker ha caricato un video dove utilizza questo tipo di schermo, e spiega molto bene come impostarlo e tutto
Salve, come faccio a cambiare pagina sul display con un pulsante da Arduino?
<nextion_serial>.print(F("page <page_id>"));
<nextion_serial>.write(0xff);
<nextion_serial>.write(0xff);
<nextion_serial>.write(0xff);
Dove <nextion_serial> è la seriale collegata al display e <page_id> il numero della pagina voluta (partendo da 0). Ovviamente dando per scontato che collegamenti e baudrate siano a posto.
Trovi questo e molto altro qui.
Ciao, Ale.
Scusami ma questo codice funziona con la libreria?
Quale libreria?
E comunque quel codice non usa nessuna libreria.
Ciao, Ale.
La libreria del display comunque non va.
Serial.print("page 1");
Ovviamente dando per scontato che collegamenti e baudrate siano a posto.
Ciao, Ale.
Scusa ma se utilizzo la sua libreria e funzionano
Tutti i comandi bidirezionali .
Devo includere anche baudrate?
No, devi scrivere il codice completo come sopra, Serial.print("page 1"); da solo non basta. Comunque se usi la libreria Itead leggi la documentazione, mi sembra strano che non ci sia un comando per cambiare pagina. E comunque quella libreria presenta diversi problemi, oltre a non essere aggiornata da anni. Guarda nelle sezione display, uno dei post fissi parla proprio di come usare i Nextion senza la libreria.
Ciao, Ale.
Buongiorno grazie mille per il consiglio.
Ho sempre pensato che il successo di Arduino
E proprio questo forum.
Salve, sono riuscito a cambiare pagina da Arduino al display,
ora vorrei cambiare lo stato di uno switch dal display?
Salve, sono riuscito a cambiare pagina da Arduino al display,
Come? Usando la libreria?
ora vorrei cambiare lo stato di uno switch dal display
Immagino tu intenda un dual-state button, comunque usando la libreria non saprei, senza libreria puoi usare lo stesso codice postato sopra, sostituendo page <page_id> con click ,1 dove è l'ID o il nome attribuito all'oggetto.
Comunque, scusami la franchezza, ma non ho ancora capito se hai difficoltà con la lingua italiana o se scrivi così poco e criptico di tuo, cerca di esporre meglio i tuoi problemi, ad esempio non hai ancora detto che hardware usi sia come display che come MCU, insomma leggi qui e regolati di conseguenza, grazie.
Ciao, Ale.
Scusa per come espongo i problemi , cercherò di essere più chiaro possibile.
Componenti del progetto: Arduino Mega ,display Nextion ,libreria -ITEADLIB_Arduino_Nextion-master,Sim900
con la libreria di Blynk.
il mio problema che non ho descritto nei post precedenti e che Arduino a volte non rivela la pressione del pulsante
display.
Facendo varie prove ho notato che se elimino la connessione a Blynk Arduino e molto più reattivo.
[code]
//Blynk
#include <Blynk.h>
BlynkTimer timer;
#define BLYNK_PRINT Serial
#define TINY_GSM_MODEM_SIM900
#include <TinyGsmClient.h>
#include <BlynkSimpleTinyGSM.h>
#define SerialAT Serial3
const char apn[] = "internet.it";
const char user[] = "";
const char pass[] = "";
const char auth[] = "5GK3uWqWQ";
TinyGsm modem(SerialAT);
#include <Nextion.h>
const int voltageSensorPin = A0; // sensor pin
float vIn; // measured voltage (3.3V = max. 16.5V, 5V = max 25V)
float vOut;
float voltageSensorVal; // value on pin A3 (0 - 1023)
const float factor = 5.0; // reduction factor of the Voltage Sensor shield
const float vCC = 5.2; // Arduino input voltage (measurable by voltmeter)
#define K_NUMPIN 6
const byte pina[K_NUMPIN] = {A0, A2, A4, A6, A8, A10};
float val[K_NUMPIN];
int val1[K_NUMPIN];
float batt_m, batt_c, pannello1, pannello2, rete220, t, h, tc = 0;
int mq3, mq7 = 0;
float liv_batt_c, liv_batt_m, liv_pannello_1 , liv_pannello_2, tempC = 0;
int liv_temp, liv_umi = 0;
#include <DHT.h>
#define DHTPIN 10
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(6);
DallasTemperature temp(&oneWire);
NexProgressBar bar = NexProgressBar(0, 5, "j0");
NexProgressBar barJ1 = NexProgressBar(0, 14, "j1");
NexNumber txtfloat = NexNumber(0, 16, "x0");
NexNumber txtfloatX1 = NexNumber(0, 17, "x1");
NexNumber txt_temp = NexNumber(0, 35, "n8");
NexNumber txtfloat_umi = NexNumber(0, 34, "n7");
NexProgressBar bar_temp = NexProgressBar(0, 20, "j2");
NexProgressBar bar_umi = NexProgressBar(0, 31, "j4");
NexText txt_online = NexText(0, 36, "t17");
NexNumber txtfloat_temp = NexNumber(2, 13, "n32");
NexNumber txt_pannello_1 = NexNumber(1, 8, "x01");
NexNumber txt_pannello_2 = NexNumber(1, 9, "x11");
NexProgressBar bar_pannello_1 = NexProgressBar(1, 1, "j01");
NexProgressBar bar_pannello_2 = NexProgressBar(1, 4, "j11");
NexButton bp = NexButton(2, 8, "b22");
NexButton bm = NexButton(2, 13, "b32");
NexButton b_salva = NexButton(2, 19, "b122");
NexButton b_test = NexButton(2, 15, "b022");
NexNumber txt_imp_ventola = NexNumber(2, 10, "n024");
NexNumber txt_imp_ventola_salva = NexNumber(2, 17, "n022");
NexButton b_avanti_page0 = NexButton(0, 27, "b0");
NexButton b_indietro_page1 = NexButton(1, 14, "b01");
NexButton b_avanti_page1 = NexButton(1, 15, "b21");
NexButton b_indietro_page2 = NexButton(2, 2, "b02");
//Blynk page 4
NexText txt_auth = NexText(4, 2, "t04");
NexText txt_apn = NexText(4, 5, "t14");
NexText txt_user = NexText(4, 6, "t34");
NexText txt_pass = NexText(4, 8, "t44");
NexText txt_modem = NexText(4, 10, "t54");
NexNumber txt_n6 = NexNumber(0, 29, "n6");
NexTouch *nex_listen_list[] = {
&bp, &bm, &b_salva, &b_test, &b_avanti_page0, &b_indietro_page1, &b_avanti_page1, &b_indietro_page2, NULL
};
bool usaBlynk = true;
bool FIRST = true;
unsigned long t1, dt;
int cont = 1;
int piu = 0;
int salvato = 0;
#define PIN_BLYNK 2 //BLYNK
#define PIN_8 8 //tone
void setup() {
Serial.begin(9600);
//Serial2.begin(9600);
nexSerial.begin(115200);
nexInit();
dht.begin();
temp.begin();
SerialAT.begin(9600);//sim900
delay(6000);
modem.restart();
b_avanti_page0.attachPop(bt_avanti_page0, &b_avanti_page0);
b_indietro_page1.attachPop(bt_indietro_page1, &b_indietro_page1);
b_avanti_page1.attachPop(bt_avanti_page1, &b_avanti_page1);
b_indietro_page2.attachPop(bt_indietro_page2, &b_indietro_page2);
//inizio blynk
pinMode(PIN_8, OUTPUT);//TONE
digitalWrite(PIN_8, HIGH);
pinMode(PIN_BLYNK, INPUT_PULLUP);//BLYNK
usaBlynk = (digitalRead(PIN_BLYNK) == HIGH);
if (usaBlynk) {
BLYNK();
}
timer.setInterval(20000L, connetti);
timer.setInterval(1000L, updateNextion);
timer.setInterval(1L, nexLoop);
}
void loop() {
if (usaBlynk) {
Blynk.run();
timer.run();
} else {
nexLoop(nex_listen_list);
dt = millis() - t1;
if (dt > 1000) {
updateNextion();
txt_online.setText("< offline >");
t1 = millis();
}
}
}
void nexLoop() {
nexLoop(nex_listen_list);
}
void connetti() {
if ( Blynk.connected() == false ) {
BLYNK();
}
}
void BLYNK() {
Serial2.print(F("page 4"));
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
txt_auth.setText(auth);
txt_apn.setText(apn);
txt_user.setText(user);
txt_pass.setText(pass);
txt_modem.setText("Avvia modem...");
Blynk.begin(auth, modem, apn, user, pass);
txt_modem.setText(" ");
txt_modem.setText("<< OK >>");
delay(4000);
}
void updateNextion() {
for (byte i = 0; i < K_NUMPIN; i++)
{
int aVal = analogRead(pina[i]);
val1[i] = map(aVal, 0, 1024, 0, 1000);
val[i] = (aVal / 1023.0) * vCC * factor * 10;
batt_c = val[0];
batt_m = val[1];
pannello1 = val[4];
pannello2 = val[4];
rete220 = val[5];
mq3 = val1[3];
mq7 = val1[2];
}
h = dht.readHumidity();
t = dht.readTemperature();
temp.requestTemperatures();
float tempC = temp.getTempCByIndex(0);
tc = temp.getTempCByIndex(0);
switch (cont) {
case 1:
page00();
break;
case 2:
page11();
break;
case 3 :
page22();
break;
case 4:
break;
case 5:
break;
}
}
void page00() {
if (FIRST) {
Serial2.print(F("page 0"));
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
FIRST = false;
}
if ( Blynk.connected() == false ) {
txt_online.setText("offline");
} else {
txt_online.setText("online");
}
float liv_batt_c = map ( val[0], 0, 160, 0, 100);
float liv_batt_m = map ( val[1], 0, 160, 0, 100);
int liv_temp = map ( t, 0, 45, 0, 100);
int liv_umi = map ( h, 0, 100, 0, 100);
bar.setValue(liv_batt_c);
barJ1.setValue(liv_batt_m);
txtfloat.setValue ( batt_c);
txtfloatX1.setValue ( batt_m);
txt_temp.setValue (t);
txtfloat_umi.setValue (h);
txtfloat_temp.setValue (tempC);
bar_temp.setValue(liv_temp);
bar_umi.setValue(liv_umi);
}
void page11() {
if (FIRST) {
Serial2.print(F("page 1"));
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
FIRST = false;
}
float liv_pannello_1 = map ( val[4], 0, 150, 0, 100);
float liv_pannello_2 = map ( val[4], 0, 150, 0, 100);
bar_pannello_1.setValue(liv_pannello_1);
bar_pannello_2.setValue(liv_pannello_2);
txt_pannello_1.setValue(pannello1);
txt_pannello_2.setValue(pannello2);
unsigned long t12, dt2;
dt2 = millis() - t12;
if (dt2 > 61000) {
cont = 1;
t12 = millis();
}
}
void page22() {
if (FIRST) {
Serial2.print(F("page 2"));
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
FIRST = false;
}
txt_imp_ventola_salva.setValue(salvato);
unsigned long t11, dt1;
dt1 = millis() - t11;
if (dt1 > 61000) {
cont = 1;
t11 = millis();
}
}
void bt_avanti_page0(void *ptr) {
tone(PIN_8, 400, 100);
cont = 2;
delay(100);
FIRST = true;
}
void bt_indietro_page1(void *ptr) {
tone(PIN_8, 400, 100);
cont = 1;
FIRST = true;
}
void bt_avanti_page1(void *ptr) {
tone(PIN_8, 400, 100);
cont = 3;
FIRST = true;
}
void bt_indietro_page2(void *ptr) {
tone(PIN_8, 400, 100);
cont = 2;
FIRST = true;
}
[/code]
Mi spiace, ma non ho mai usato nè la libreria della Itead nè Blink, quindi non so esserti di aiuto.
Ciao, Ale.