RGB led with EEPROM

Kod jsem upravoval z internetu.Chtěl bych ,aby při stisku tlačítka se přehodil mod a při tak 5 sekundach se uložil do EEPROM ,a pak už neukládal znova ve smyčce po 300mil/sekund.

#include <EEPROM.h>

const int buttonPin = PB3;
const int redPin = PB0;
const int greenPin = PB1;
const int bluePin = PB2;
byte mode;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

 mode = EEPROM.read(10); //priradím byte hodnotu z EEPROM z ofsetu 10 k premennej mode
  
}

void loop() {
  int buttonState;
  buttonState = digitalRead(buttonPin);
  
  if (buttonState == LOW) {
    mode++; //mode+1
    delay(250);
  }
  else if (mode == 0) {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, LOW);
    
    
  }
  
  else if (mode == 1) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, HIGH);
    digitalWrite(bluePin, HIGH);
    EEPROM.update(10,1);
    delay(300);
    
  }
  
  else if (mode == 2) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin,LOW );
    digitalWrite(bluePin, LOW);
     EEPROM.update(10,2);
    delay(300);
  }
  
  else if (mode == 3) {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,LOW );
    EEPROM.update(10,3);
 delay(300);
  }

   else if (mode == 4) {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, HIGH);
    EEPROM.update(10,4);
     delay(300);
  }

   else if (mode == 5) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, HIGH);
    digitalWrite(bluePin, LOW);
     EEPROM.update(10,5);
      delay(300);
  }

   else if (mode == 6) {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, HIGH);
    digitalWrite(bluePin, HIGH);
    EEPROM.update(10,6);
     delay(300);
  }

   else if (mode == 7) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, HIGH);
     EEPROM.update(10,7);
      delay(300);
  }
  
  
  else {
    mode = 0;
    //EEPROM o tejto hodnote nevie, lebo ju tam nezapisuješ, ostane nastavena v EEPROM 7 a nasledne po inkrementacii skoci na 1.
  }
}

Language problem ?
Try a language closer to your native language:

Thanks to all those who helped and added to this list.
[/quote]

I will take a SWAG, I think you are trying to control the EEPROM writing to extend its life. You are using the Update command which actually reads the location and does not write it unless the new value is different. You can write the same value thousands of times without any EEPROM writes taking place.

So you need to save the value of 0 there as well like you do for the other modes.

  else {
    mode = 0;
    //EEPROM o tejto hodnote nevie, lebo ju tam nezapisuješ, ostane nastavena v EEPROM 7 a nasledne po inkrementacii skoci na 1.
    EEPROM.update(10, 0);
    delay(300); // ??
  }

You can make your code a lot shorter by placing EEPROM.update in the button 'handling'.

void loop() {
  int buttonState;
  buttonState = digitalRead(buttonPin);

  if (buttonState == LOW) {
    mode++; //mode+1
    EEPROM.update(10, mode);

    if(mode > 7)
    {
      mode = 0;
    }
    delay(250);
  }
  else if (mode == 0) {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, LOW);
  }
  else if (mode == 1) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, HIGH);
    digitalWrite(bluePin, HIGH);
    delay(300);
  }
  else if (mode == 2) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, LOW );
    digitalWrite(bluePin, LOW);
    delay(300);
  }
  else if (mode == 3) {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, HIGH);
    digitalWrite(bluePin, LOW );
    delay(300);
  }
  else if (mode == 4) {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, HIGH);
    delay(300);
  }
  else if (mode == 5) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, HIGH);
    digitalWrite(bluePin, LOW);
    delay(300);
  }
  else if (mode == 6) {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, HIGH);
    digitalWrite(bluePin, HIGH);
    delay(300);
  }
  else if (mode == 7) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, HIGH);
    delay(300);
  }
  else {
    // nothing to do
  }
}

Note:
I do not know / understand what you want to do with the 5 seconds.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.