Forums

Full Version: problemi con pannello
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Ciao a tutti,
a volte capita che passati un paio di giorni, il modulo rimane raggiungibile da remoto ma il pannello non viene recuperato.
Anche con il semplice sketch d'esempio per comandare un relè:
Code:
void setup() {

 // Initialize Serial Port
 Serial.begin(57600);
 
 // Let uPanel start
 delay(3000);

 // Discharge old partial messages
 Serial.println("");
 
 // Send The Panel (A LED and a Switch)
 Serial.println("$P:D!282;T*15:Arduino Relay;=*20/L1G:0:Relay;/+*10W1:0;");

 // Initialize digital output pin
 digitalWrite(8, 1);
 pinMode(8,OUTPUT);
 
}

String Msg;

void loop() {
 
 int c;
 while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
 if (c == '\n')                                       // is the message complete?
 {
   if (Msg.equals("#W10")) {digitalWrite(8,1); Serial.println("#L10");}    // Turn OFF LED 1 and Relay if switch is OFF
   if (Msg.equals("#W11")) {digitalWrite(8,0); Serial.println("#L11");}    // Turn ON LED 1 and Relay if switch is ON
   Msg = "";
 }
   
}

Come si puo' risolvere?
Ciao
Enzo

Ho letto sul sito, che quando il pannello si resetta invia il dato $ RES.
Quindi per logica, se creo una funzione  tipo questa:
Code:
if (Msg.equals("$RES")){
delay(1000);
Serial.println("$P:(il proprio pannello da reinviare");}

in questa maniera,il pannello verra reinviato ad ogni reset.
Mi confermate la mia logica?
Grazie
Enzo
Confermo, guarda questa pagina per i dettagli e un esempio completo:

http://www.miupanel.com/Examples/Panel-r...dule-Reset
(01-14-2017, 06:20 PM)Technomaker Wrote: [ -> ]Confermo, guarda questa pagina per i dettagli e un esempio completo:

http://www.miupanel.com/Examples/Panel-r...dule-Reset

Grazie  per aver inserito la soluziome tra gli esempi,
Così che può tornare utile a tutti.
Ciao
Enzo
Ciao a tutti,
seguendo il nuovo esempio che ha pubblicato l'admin per il reset del pannello,
riscontro un problema su uno sketch che deve effettuare una lettura continua di un pin analogico.
Code:
#define analogPin A1
boolean start = true;
unsigned char Val= 0;
unsigned char old_Val = 0;
unsigned char lampada_status = 0;

void setup() {
pinMode(analogPin, INPUT);
Serial.begin(57600);
delay(3000);
Serial.println("\n$PING 200");

Serial.println("$P:#F00/T*20:Prova;////{L1M*60:0:7.12,7.13;}");

}

String Msg;

void loop() {
int c;
while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
if (c == '\n')                                       // is the message complete?
{
if (Msg.equals("$RES")){start = false;Serial.println("$P:#F00/T*20:Prova;////{L1M*60:0:7.12,7.13;}");
if (lampada_status){Serial.println("#L11");}
delay(3000);
start=true;
}
Msg = "";
}
leggi();//esegue la lettura
}

 
void leggi(void){
if(start == true){  
Val = analogRead(analogPin);

if (Val != old_Val){

old_Val =Val;

if (Val >= 220)
{
Serial.println("#L11");lampada_status = 1;
}
else if (Val <= 180)
{
Serial.println("#L10");lampada_status = 0;
}
delay(1000); //se tolgo il delay funziona!!!
Serial.println(Val);
}
}
}
Ho anche creato una variabile globale per stoppare la lettura del pin quando viene ricevuto il messaggio $RES ma il problema si presenta lo stesso.
Dopo varie prove ho scoperto che il delay(1000); sulla lettura del pin analogico, crea problemi.
Senza il delay funziona correttamente.
Come si puo' risolvere?
Ciao
Enzo
Posto la soluzione che puo' tornare utile anche ad altri:
Anzichè usare un delay(1000), bisogna usare la funzione millis cosi':

Code:
#define analogPin A1
unsigned char Val= 0;
unsigned char old_Val = 0;
unsigned char lampada_status = 0;
unsigned long CurrentTime = 0;
unsigned long PreviousTime = 0;

void setup() {
pinMode(analogPin, INPUT);
Serial.begin(57600);
delay(3000);
Serial.println("\n$PING 200");

Serial.println("$P:#F00/T*20:Prova;////{L1M*60:0:7.12,7.13;}");

}

String Msg;


void loop() {
int c;
while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
if (c == '\n')                                       // is the message complete?
{
if (Msg.equals("$RES")){Serial.println("$P:#F00/T*20:Prova;////{L1M*60:0:7.12,7.13;}");
if (lampada_status){Serial.println("#L11");}
}
Msg = "";
}
leggi();//esegue la lettura
}

void leggi(void){
CurrentTime = millis();
if ( CurrentTime - PreviousTime >= 1000) { // 1 secondo
PreviousTime = CurrentTime;    

Val = analogRead(analogPin);

if (Val != old_Val){

old_Val =Val;

if (Val >= 220)
{
Serial.println("#L11");lampada_status = 1;
}
else if (Val <= 180)
{
Serial.println("#L10");lampada_status = 0;
}
Serial.println(Val);
}
}
}
Ciao
Enzo