EEPROM

Тема в разделе "Arduino & Shields", создана пользователем Nikita, 13 май 2013.

  1. Nikita

    Nikita Гик

    Зачем нужна данная библиотека?
     
  2. Mitrandir

    Mitrandir Гуру

    Для работы с EEPROM на борту ардуины, что бы сохранять что-то в память и восстанавливать после включения( там 4 кб памяти доступно)
     
    nailxx нравится это.
  3. Sergey991

    Sergey991 Нерд

    Вот пример чтения, записи, очистки еппром если я не прав проверьте
    Код (C):
    #include <EEPROM.h>
    int addr=0;
    int val; //Для хранения принятых данных
    byte value;
                                                                                                                                       
    void setup() {
     Serial.begin(9600);

    }

    void loop() {
      if(Serial.available()>0) { // Если есть доступный байт читаем его, записываем в епром.
      val = Serial.read();     // Работу с выводом и удалением я сделал перед записью в епром так как нам не нужно в ячейках такие значения как Р и С. И если нам не нужно вывести или удалить мы переходим к записи.
        if(val=='P') {         // Если прилетает Р то переходим к шагу вывода.
          Serial.println("Количество заполненных ячеек = ");
          Serial.print(addr);   //Далее идет процедура вывода всех данных о ячейках и их содержимом.
          Serial.println("Количество свободных ячеек = ");
          int a=512-addr;
          int b=addr;
          Serial.print(a);
           for(int i=0; i<addr; i=i+1) {
              addr=0;
              Serial.println("Ячейка номер");
              Serial.print(i);
              Serial.print("=");
              value = EEPROM.read(i);
              Serial.print(value);
              }  
           }
         if(val=='C') {  //Если приходит С то очищаем епром.
           for (int i = 0; i < 512; i++){
             EEPROM.write(i, 0);
              }  
          }
      EEPROM.write(addr, val); //Если не пришло ни С ни Р то записываем полученную переменную в епром
      addr = addr + 1;
        if (addr == 512) { //Если дошли до последней ячейки переходим на нулевую
        addr = 0; }
      delay(100);
        }  
    }
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Отформатируйте код, добавьте отступы!
    Поместите код в тэг CODE!
     
    nailxx нравится это.
  5. Sergey991

    Sergey991 Нерд

    У меня тут вопрос.. какие данные можно писать в ячейки еппрома? только 1 и 0? или такие значения как цифры там разные, буквы?
     
  6. Unixon

    Unixon Оракул Модератор

    В компьютере - как у Пифагора - "Всё есть число".
     
    Sergey991 нравится это.
  7. Sergey991

    Sergey991 Нерд

    :cool: Отлично
     
  8. Nikita

    Nikita Гик

    Наконец руки дошли до епрома. Взял код привет мир и начал колдовать. Ниче:(го не получилось
     
  9. Sergey991

    Sergey991 Нерд

    Здравствуйте. Дело в том что в каждую ячейку EEPROM можно записать значения от 0 до 255. если записать -1 влезет 255 ну и так далее. Объясните что именно вам нужно от EEPROM?
     
  10. Nikita

    Nikita Гик

    Здравствуйте. мне нужно в примере хеллоу ворд записывать при отключение питания цифры а при включение продолжать. накидал 2 кода
     
  11. Nikita

    Nikita Гик

    #include <EEPROM.h>
    #include <LiquidCrystal.h>


    LiquidCrystal lcd(13, 11, 7, 6, 5, 4);

    int addr = 0;

    void setup()
    {
    lcd.begin(16, 2);

    }

    void loop()
    {
    int val = analogRead(0) / 4;

    EEPROM.write(addr, val);
    lcd.setCursor(0, 1);
    lcd.print(addr);
    lcd.setCursor(0, 1);
    lcd.print("\t");
    lcd.print(val, DEC);
    lcd.println();

    addr = addr + 1;

    delay(1000);
    }
     
  12. Sergey991

    Sergey991 Нерд

    тоесть что то вроде калькулятора такого.. посчитал что то, число в память и потом считывать его.. да?
     
  13. Nikita

    Nikita Гик

    // include the library code:
    #include <LiquidCrystal.h>
    #include <EEPROM.h>
    int addr = 0; // адрес ячейки
    int value = 42; // сохраняемое значение


    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(13, 11, 7, 6, 5, 4);

    void setup() {
    // set up the LCD's number of columns and rows:
    lcd.begin(16, 2);
    // Print a message to the LCD.
    lcd.print("hello, world!");

    }

    void loop() {
    // set the cursor to column 0, line 1
    // (note: line 1 is the second row, since counting begins with 0):
    lcd.setCursor(0, 1);
    lcd.print(millis()/1000);
    }
     
  14. Sergey991

    Sergey991 Нерд

    О БОЖЕ. ВЫРУБИТЕ ДУИНО БЫСТРЕЕ.!!!
     
  15. Sergey991

    Sergey991 Нерд

    Вы понимаете, что Запись в епром происходит каждую секунду... а каждую ячейку епрома можно использовать на запись/перезапись только 1000р
     
  16. Sergey991

    Sergey991 Нерд

    ОБъясните точнее свою идею
     
  17. Nikita

    Nikita Гик

    не ну к примеру бегут цифры то 1 до 10 и на 6 отключаеш питание, а при включение длжно начаться с 6
     
  18. Sergey991

    Sergey991 Нерд

    Исходя из того что вы мне объяснили составил простенький код все предельно ясно
    Код (C):
    #include <LiquidCrystal.h>
    #include <EEPROM.h>
    LiquidCrystal lcd(13, 11, 7, 6, 5, 4);

    int Pkf=0;

    void setup()
    {
      lcd.begin(16, 2);

    }

    void loop()
    {
      if(EPROM.read(0)==1) Pkf=6;// Если В епроме на ячейке 0 записано 1 то Pkf=6
      lcd.setCursor(0, 1);
      lcd.print(Pkf);
      Pkf++;
      if(Pkf==6) EEPROM.write(0, 1);
      delay(1000);
      lcd.clear();
    }
     
  19. ScatMan

    ScatMan Нуб

    Уважаемые!

    Из стандартного комплекта собрал метеостанцию. Прикрутил передачу данных на комп по последовательному порту. Но, дальше задачу усложнили: сохранять показания термопары в память и через путти или монитор последовательного порта посылать запрос и получать список значений либо на монитор, либо в файл.

    Если можете подскажите конкретно, а если нет, то скажите куда смотреть. :)
     
  20. Megakoteyka

    Megakoteyka Оракул Модератор

    Для такой задачи лучше используйте карту памяти. Пишите показания в файл, а по запросу скидывайте содержимое файла на комп.