mi capita spesso che ottengo il messaggio in oggetto :
Ready to receive panel definition
Noto che se premo il pulsante di reset il pannello appare ma se perdo la connessione poi non sono a casa per il reset.
Allora ho provato a inserire un contatore e ogni X minuti rifaccio un sendpanel.... ma pare non funziona
Da cosa può dipendere?
Grazie
Mic
Si avevo letto questo e avevo gestito il messaggio $RES..... ma succede sempre
Per questo avevo messo anche un contatore e dopo X minuti richiamavo una sendpanel
11-14-2017, 09:06 PM (This post was last modified: 11-14-2017, 09:09 PM by Enzo147.)
(11-14-2017, 08:38 PM)migreco Wrote: Si avevo letto questo e avevo gestito il messaggio $RES..... ma succede sempre
Per questo avevo messo anche un contatore e dopo X minuti richiamavo una sendpanel
quasi sicuramente hai un delay che non ti permette di ricevere il messaggio $RES correttamente.
Pubblica lo sketch che hai usato con la funzione $RES e lo controlliamo.
(11-14-2017, 09:06 PM)Enzo147 Wrote: quasi sicuramente hai un delay che non ti permette di ricevere il messaggio $RES correttamente.
Pubblica lo sketch che hai usato con la funzione $RES e lo controlliamo.
Code:
/**********************************************************/
int x=1;
int c=0;
int i=0;
int NotificaPush=1;
int ScritturaDB=1;
int d1=0;
int d2=0;
int contatto=7;
String Msg = "";
int lettura=0;
int letturaprecedente=1;
String Orari[4]="";
String OrarioAppo="";
int orariOK=0;
pinMode(contatto,INPUT);
Serial.begin(57600); // Inizializzazione della porta seriale (57600 è la velocità di comunicazione
Serial.println("");
Serial.println("$PING 200");
while ((c = Serial.read()) > '\n' ) Msg += (char) c; // leggi i caratteri via seriale e componi il messaggio, fino alla nuova linea '\n'
if (c == '\n')
{
Serial.print("Messaggio");
Serial.println(Msg);
delay(50);
if (Msg=="#W11") { //attiva notifica Push
NotificaPush=1;
Serial.print("PUSH");Serial.println(NotificaPush);
}
delay(50);
if (Msg=="#W10") { //disattiva notifica Push
NotificaPush=0;
Serial.print("PUSH");Serial.println(NotificaPush);
}
delay(50);
if (Msg=="#W21") { //attiva scrittura DB
ScritturaDB=1;
Serial.print("DB");Serial.println(ScritturaDB);
}
delay(50);
if (Msg=="#W20") { //disattiva scrittura DB
ScritturaDB=0;
Serial.print("DB");Serial.println(ScritturaDB);
}
delay(50);
if (Msg.substring(0, 7) == "#:DATE:")
{
if (orariOK==1) {
Serial.println(Msg.substring(21, 51));
anno = Msg.substring(21, 25);
mese = Msg.substring(26, 28);
giorno = Msg.substring(29, 31);
ora = Msg.substring(32, 34);
minuto = Msg.substring(35, 37);
secondo = Msg.substring(38, 40);
pinMode(contatto,INPUT);
Serial.begin(57600); // Inizializzazione della porta seriale (57600 è la velocità di comunicazione
Serial.println("");
Serial.println("$PING 200");
while ((c = Serial.read()) > '\n' ) Msg += (char) c; // leggi i caratteri via seriale e componi il messaggio, fino alla nuova linea '\n'
if (c == '\n')
{
Serial.print("Messaggio");
Serial.println(Msg);
delay(50);
if (Msg=="#W11") { //attiva notifica Push
NotificaPush=1;
Serial.print("PUSH");Serial.println(NotificaPush);
}
delay(50);
if (Msg=="#W10") { //disattiva notifica Push
NotificaPush=0;
Serial.print("PUSH");Serial.println(NotificaPush);
}
delay(50);
if (Msg=="#W21") { //attiva scrittura DB
ScritturaDB=1;
Serial.print("DB");Serial.println(ScritturaDB);
}
delay(50);
if (Msg=="#W20") { //disattiva scrittura DB
ScritturaDB=0;
Serial.print("DB");Serial.println(ScritturaDB);
}
delay(50);
if (Msg.substring(0, 7) == "#:DATE:")
{
if (orariOK==1) {
Serial.println(Msg.substring(21, 51));
anno = Msg.substring(21, 25);
mese = Msg.substring(26, 28);
giorno = Msg.substring(29, 31);
ora = Msg.substring(32, 34);
minuto = Msg.substring(35, 37);
secondo = Msg.substring(38, 40);
11-14-2017, 10:55 PM (This post was last modified: 11-14-2017, 11:01 PM by Enzo147.)
(11-14-2017, 09:32 PM)migreco Wrote:
ok corretto
ma in compilazione non lo segnala?
e tolti quei delay di 50...
rispondo prima alla domanda ma in compilazione non lo segnala:
non te lo segnala perchè in realtà nel tuo sketch hai creato la funzione sendpanel ,avendo quindi creato quella funzione, non c'è più bisogno che ricrei i serial print per costruire il tuo pannello, ma ti basterà semplicemente richiamare la funzione sendpanel.
Tornando al tuo problema, non sono tanto i delay a rallentare la tua seriale ma bensi' il fatto che fai stampare in continuazione nel loop i messaggi L10 L21 tenendo cosi' la seriale occupata e non avendo il tempo di captare il messaggio $RES .
Inoltre c'era più di un errore nello sketch mancava la dichiarazione int c; nel loop prima del while ((c = Serial.read()) e poi dopo if (lettura !=letturaprecedente) devi dichiarare subito letturaprecedente = lettura;
Ti allego lo sketch semicorretto in modo tale che aprendo il monitor seriale di arduino puoi vedere che se scolleghi e riccoleghi il modulo, viene stampato il pannello correttamente e l'app lo riceve.
A parer mio puoi benissimo evitare di crere la funzione che ogni tot minuti ti reinvia il pannello perchè la funzione $RES di miupanel viene inviata ad arduino in automatico al verificarsi di cali di tensione o quant'altro.
Adesso dovresti riuscire a fare le tue ultime correzzioni tranquillamente!!!
Buon lavoro e buona serata
Enzo
Code:
/**********************************************************/
int x=1;
int c=0;
int i=0;
int NotificaPush=1;
int ScritturaDB=1;
int d1=0;
int d2=0;
int contatto=7;
int lettura=0;
int letturaprecedente=0;//corretto
String Orari[4]="";
String OrarioAppo="";
int orariOK=0;
/*********************************************************/
void setup()
{
Serial.begin(57600);// Inizializzazione della porta seriale (57600 è la velocità di comunicazione
delay(3000);// Let uPanel start
Serial.println("$PING 200");
pinMode(contatto,INPUT);
SendPanel(); //avevi dimenticato di metterlo
}
String Msg; //corretto
void loop() {
int c;// avevi dimenticato di metterlo
while ((c = Serial.read()) > '\n' ) Msg += (char) c; // leggi i caratteri via seriale e componi il messaggio, fino alla nuova linea '\n'
if (c == '\n')
{
// Serial.print("Messaggio");
// Serial.println(Msg);
if (Msg.equals("$RES")){ // WiFi Module unwanted RESET >>>>>>> send panel again
SendPanel();
}
else if (Msg.equals("#W11")) { //attiva notifica Push
NotificaPush=1;
Serial.print("PUSH");Serial.println(NotificaPush);
}
else if (Msg.equals("#W10")) { //disattiva notifica Push
NotificaPush=0;
Serial.print("PUSH");Serial.println(NotificaPush);
}
else if (Msg.equals("#W21")) { //attiva scrittura DB
ScritturaDB=1;
Serial.print("DB");Serial.println(ScritturaDB);
}
else if (Msg.equals("#W20")) { //disattiva scrittura DB
ScritturaDB=0;
Serial.print("DB");Serial.println(ScritturaDB);
}
else if (Msg.substring(0, 7) == "#:DATE:")
{
if (orariOK==1) {
Serial.println(Msg.substring(21, 51));
anno = Msg.substring(21, 25);
mese = Msg.substring(26, 28);
giorno = Msg.substring(29, 31);
ora = Msg.substring(32, 34);
minuto = Msg.substring(35, 37);
secondo = Msg.substring(38, 40);
(11-14-2017, 10:55 PM)O Enzo147 Wrote: rispondo prima alla domanda ma in compilazione non lo segnala:
non te lo segnala perchè in realtà nel tuo sketch hai creato la funzione sendpanel ,avendo quindi creato quella funzione, non c'è più bisogno che ricrei i serial print per costruire il tuo pannello, ma ti basterà semplicemente richiamare la funzione sendpanel.
Tornando al tuo problema, non sono tanto i delay a rallentare la tua seriale ma bensi' il fatto che fai stampare in continuazione nel loop i messaggi L10 L21 tenendo cosi' la seriale occupata e non avendo il tempo di captare il messaggio $RES .
Inoltre c'era più di un errore nello sketch mancava la dichiarazione int c; nel loop prima del while ((c = Serial.read()) e poi dopo if (lettura !=letturaprecedente) devi dichiarare subito letturaprecedente = lettura;
Ti allego lo sketch semicorretto in modo tale che aprendo il monitor seriale di arduino puoi vedere che se scolleghi e riccoleghi il modulo, viene stampato il pannello correttamente e l'app lo riceve.
A parer mio puoi benissimo evitare di crere la funzione che ogni tot minuti ti reinvia il pannello perchè la funzione $RES di miupanel viene inviata ad arduino in automatico al verificarsi di cali di tensione o quant'altro.
Adesso dovresti riuscire a fare le tue ultime correzzioni tranquillamente!!!
Buon lavoro e buona serata
Enzo
Code:
/**********************************************************/
int x=1;
int c=0;
int i=0;
int NotificaPush=1;
int ScritturaDB=1;
int d1=0;
int d2=0;
int contatto=7;
int lettura=0;
int letturaprecedente=0;//corretto
String Orari[4]="";
String OrarioAppo="";
int orariOK=0;
/*********************************************************/
void setup()
{
Serial.begin(57600);// Inizializzazione della porta seriale (57600 è la velocità di comunicazione
delay(3000);// Let uPanel start
Serial.println("$PING 200");
pinMode(contatto,INPUT);
SendPanel(); //avevi dimenticato di metterlo
}
String Msg; //corretto
void loop() {
int c;// avevi dimenticato di metterlo
while ((c = Serial.read()) > '\n' ) Msg += (char) c; // leggi i caratteri via seriale e componi il messaggio, fino alla nuova linea '\n'
if (c == '\n')
{
// Serial.print("Messaggio");
// Serial.println(Msg);
if (Msg.equals("$RES")){ // WiFi Module unwanted RESET >>>>>>> send panel again
SendPanel();
}
else if (Msg.equals("#W11")) { //attiva notifica Push
NotificaPush=1;
Serial.print("PUSH");Serial.println(NotificaPush);
}
else if (Msg.equals("#W10")) { //disattiva notifica Push
NotificaPush=0;
Serial.print("PUSH");Serial.println(NotificaPush);
}
else if (Msg.equals("#W21")) { //attiva scrittura DB
ScritturaDB=1;
Serial.print("DB");Serial.println(ScritturaDB);
}
else if (Msg.equals("#W20")) { //disattiva scrittura DB
ScritturaDB=0;
Serial.print("DB");Serial.println(ScritturaDB);
}
else if (Msg.substring(0, 7) == "#:DATE:")
{
if (orariOK==1) {
Serial.println(Msg.substring(21, 51));
anno = Msg.substring(21, 25);
mese = Msg.substring(26, 28);
giorno = Msg.substring(29, 31);
ora = Msg.substring(32, 34);
minuto = Msg.substring(35, 37);
secondo = Msg.substring(38, 40);