Forums

Full Version: Memorizzare ultimo stato slider
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Buonasera,
vorrei realizzare un pannello con solamnete 1 sliders per poi utilizzarlocome dimmer per una striscia led con i seguenti parametri.
valore Min= 0 valore Max = 100 posizione iniziale = 50 . il problema che quando sposto il cursore  per esempio sulla posizione 25, vorrei memorizzare questo valore cosi in caso di mancanza di corrente , venga ripristinato all avvio di arduino l'ultimo valore impostato.
grazie per le info
Ciao,
copio e incollo:

Dalla versione firmware 003 (AA003A), μPanel implementa un disco di memoria che può essere utilizzata dal microcontrollore per memorizzare dati non volatili, come le misurazioni, parametri di calibrazione, dati di configurazione, e così via. Un file system speciale (FS-RT78) è stato progettato dagli ingegneri μPanel al fine di attuare un disco ad alta affidabilità efficiente all’interno della memoria flash modulo WiFi.

Tutte le istruzioni su questa pagina
http://www.miupanel.com/module-commands/...m%20(Disk)
Ciao, oltre al metodo proposto da Dok,
Puoi creare delle variabili di stato.
qui: http://www.miupanel.com/panel-recovery/?lang=it   trovi un esempio che ripristina lo stato di 2 relè, devi semplicemente seguire quella logica e modificare il tuo sketch.
le variabili di stato possono servire solo in caso di reset del pannello ma dubito siano utili in caso di mancanza di corrente con il conseguente riavvio del microprocessore
(12-12-2017, 03:15 PM)Dok Wrote: [ -> ]le variabili di stato sono utili in caso di reset del pannello ma dubito sono utili in caso di mancanza di corrente con il riavvio del microprocessore

Hai perfettamente ragione, per risolvere si può 'usare il tuo metodo oppure salvare i dati in eeprom.
Ho appena modificato lo schizzo con la funzione eeprom, forse puo 'tornare utile anche ad altri:
Code:
#include <EEPROM.h> //utilizziamo la libreria eeprom per salvare i dati
#define RELAY1  8 // first relay on pin 8
#define RELAY2  9 // second relay on pin 8

String Msg;
byte Valeeprom1;
byte Valeeprom2;

void setup() {

 // Initialize Serial Port
 Serial.begin(57600);

 // Let uPanel start
 delay(3000);

 // Initialize digital output pin
 digitalWrite(RELAY1, 1);  // pin = high => relay off
 digitalWrite(RELAY2, 1);  // pin = high => relay off
 pinMode(RELAY1, OUTPUT);
 pinMode(RELAY2, OUTPUT);

 SendPanel(); // Send The Panel calling a function
 
 }

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 switch1 is OFF: Turn OFF LED1 and Relay1
   if (Msg.equals("#W10")) {digitalWrite(RELAY1,1); Serial.println("#L10"); EEPROM.write(1, Valeeprom1=0);}  

   // If switch1 is ON: Turn ON LED1 and Relay1
   else if (Msg.equals("#W11")) {digitalWrite(RELAY1,0); Serial.println("#L11");EEPROM.write(1, Valeeprom1=1);}  

   // If switch2 is OFF: Turn OFF LED2 and Relay2
   else if (Msg.equals("#W20")) {digitalWrite(RELAY2,1); Serial.println("#L20");EEPROM.write(2, Valeeprom2=0);}    

   // If switch2 is ON: Turn ON LED2 and Relay2
   else if (Msg.equals("#W21")) {digitalWrite(RELAY2,0); Serial.println("#L21");EEPROM.write(2, Valeeprom2=1);}    

   // WiFi Module unwanted RESET >>>>>>> send panel again
   else if (Msg.equals("$RES")) {SendPanel();}  

   Msg = "";
 }
}

//----------------------------------------------------------------

void SendPanel(void){

 // Discharge old partial messages and send panel
 Serial.println("");
 Serial.println("$P:Dg15;/5T*25fb:Arduino Relay;=*16/30{mL1G:0;|*12W1:0;|T:Relay 1;}/{mL2G:0;|*12W2:0;|T:Relay 2;}");
 
 Valeeprom1 = EEPROM.read(1); //legge il valore nella eeprom 1.  
 Valeeprom2 = EEPROM.read(2); //legge il valore nella eeprom 2.  

 // Syncronize all panel's objects status with last valid status
 if (Valeeprom1 == 0){ Serial.println("#W10"); Serial.println("#L10");digitalWrite(RELAY1,0);}
  if (Valeeprom1 == 1){ Serial.println("#W11"); Serial.println("#L11");digitalWrite(RELAY1,1);}
  if (Valeeprom2 == 1){ Serial.println("#W21"); Serial.println("#L21");digitalWrite(RELAY2,1);}
  if (Valeeprom2 == 0){ Serial.println("#W20"); Serial.println("#L20");digitalWrite(RELAY2,0);}
}

//----------------------------------------------------------------
Ciao
Enzo
Grazie mille per le preziose info  l 'utilizzo dell 'eeprom credo sia la soluzione migliore  , le 100.000 letture-scritture non dovrebbero dare problemi