salvare in memoria lo stato del pulsante quando si stacca l'usb

Salve, ho questo codice:

int ledPin = 10;
int buttonPin = 2;

int flag = 1;
int buttonStatus = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {

  int currentStatus = digitalRead(buttonPin);

  if (currentStatus == HIGH && buttonStatus == LOW) {
    if (flag == 0) {
      digitalWrite(ledPin, HIGH);
      flag = 1;
    } else {
      digitalWrite(ledPin, LOW);
      flag = 0;
    }
  }

  buttonStatus = currentStatus;
}

vorrei fare il modo che quando io lascio i led in HIGH, e stacco arduino dal computer.. mi rimane salvato

e si ripristina con HIGH,

invece cosi se lo riattacco ritorna LOW.

avete idea come fare? ho sentito su google eprom .. scusate ma non so il termine esatto .

avete idea come fare? grazie mille e buona serata.

Beh, una possibilità è utilizzare la EEPROM e scrivere in essa l'ultimo stato valido del "led", però ...
... c'è un però, la vita della EEPROM NON è infinita, anzi, ogni singolo byte può essere scritto am massimo (garantito, poi si va anche oltre, ma NON è più garantito), 100'000 volte che ... possono essere tantissime o possono essere pochissime, in funzione di ogni quanto tempo si scrive qualche cosa :slight_smile:

Guglielmo

ok , ho trovato l'esempio ... non so se posso mettere i link caso mai metto il codice che può essere utile ad altre persone. ti ringrazio molto . dici che mettendo tanti led o potenziometri .. non c'è la fa?.

uso arduino mega

ecco il codice:

#include <EEPROM.h>

const int buttonPin = 8;    // pushbutton pin
const int ledPin = 4;       // LED pin

int ledState;                // variable to hold the led state
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin


// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
  // set input and output
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);

  // set initial LED state
  digitalWrite(ledPin, ledState);

  // initialize serial monitor
  Serial.begin (9600);

  //check stored LED state on EEPROM using function defined at the end of the code
  checkLedState(); 
}

void loop() {
  // read the state of the switch into a local variable
  int reading = digitalRead(buttonPin);

  if(reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }

  if((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:

    // if the button state has changed:
    if(reading != buttonState) {
      buttonState = reading;

      // only toggle the LED if the new button state is HIGH
      if(buttonState == HIGH) {
        ledState = !ledState;
      }
    }
  }

  // set the LED state
  digitalWrite(ledPin, ledState);
  // save the current LED state in the EEPROM
  EEPROM.update(0, ledState);
  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState
  lastButtonState = reading;
}

// Prints and upates the LED state
// when the Arduino board restarts or powers up
void checkLedState() {
   Serial.println("LED status after restart: ");
   ledState = EEPROM.read(0);
   if(ledState == 1) {
    Serial.println ("ON");
    digitalWrite(ledPin, HIGH);
   } 
   if(ledState == 0) {
    Serial.println ("OFF");
    digitalWrite(ledPin, LOW);
   }
}