EEPROM и Serial

Тема в разделе "Arduino & Shields", создана пользователем Slav4ik.ru, 9 дек 2017.

Метки:
  1. Slav4ik.ru

    Slav4ik.ru Нерд

    Не могу понять, каким образом через ком порт записать данные в EEPROM, т.е. необходимо передать через консоль допустим 10, и чтоб это записалось в выбранную ячейку EEEPROM. Не поделитесь простым скетчем, или советом?
     
  2. Напрямую никак. Ардуино примет данные и закинет в еепром
     
  3. Slav4ik.ru

    Slav4ik.ru Нерд

    т.е. через буфер? Если есть время свободное, не могли бы на скетче показать?
     
  4. Скетч для ардуино?
     
  5. Slav4ik.ru

    Slav4ik.ru Нерд

    Да, хочу через ком порт отправить число, и записать его в еепром, а потом использовать его в скетче, я тут это, только учусь)))
     
  6. Сейчас залезу в комп и что-нибудь сгорожу :)
     
  7. Slav4ik.ru

    Slav4ik.ru Нерд

    Буду очень признателен, а то мозг сломал... А готовый кусок кода легче под себя перестроить:)
     
  8. Код (C++):
    #include <EEPROM.h>
    #include <SoftwareSerial.h>

    int val;
    int val2;
    void setup(){
      Serial.begin(9600);
    }
    void loop(){
    if (Serial.available() > 0) { //если число передали то значение больше 0
        val = Serial.read();//прочитали число
        val = val - 48;//получили то число которое ввели, при вводе 0 получаем 48 и мы избавились от этого
        EEPROM.write(0, val);//записали в первую ячейку (0)
        val2 = EEPROM.read(0);//прочитали из нее записанное и можем делать что угодно
      }
    }
     
    Tomasina нравится это.
  9. внимание!!!
    одна ячейка памяти - один байт, то есть значение от 0 до 255
    если хотите передать число больше 255, нужно переделать его и всунуть в две ячейки или более
     
    Tomasina нравится это.
  10. Slav4ik.ru

    Slav4ik.ru Нерд

    Ага, спасибо большое, примерно начал понимать. Но теперь возник другой вопрос: А как блин, теперь указать эту ячейку, допустим для delay? Думал будет легче, но мозг сломался)))
     
  11. Вы хотите передать число и в какую ячейку? Просто не очень вопрос понял :)
     
  12. Slav4ik.ru

    Slav4ik.ru Нерд

    Сначала хочу разобраться с простой задачей: Допустим я записываю число 254 в 0 ячейку, и хочу, чтоб это число было временем включения 13 пина. Чтоб упростить задачу, просто в цикле.
     
  13. Slav4ik.ru

    Slav4ik.ru Нерд

    Подскажите пожалуйста еще назначение вот этой строки? Зачем 48?)
     
  14. Код (C++):
    int Pin = 13;          //наш пин
    void setup()
    {
      pinMode(Pin, OUTPUT);      // устанавливает режим работы - выход
    }
    void loop()
    {
      digitalWrite(Pin, HIGH);   // включаем
      delay(val2);                  // ждет число микросекунд из еепром
      digitalWrite(ledPin, LOW);    // выключаем
    }
     
     
  15. Смотри :) Если ты(ну если можно на "ты" :) ) отправляешь в порт число 0, то придет число 48
    Если отправить 1, то придет 49
    То есть к твоему числу прибавляется 48 и чтобы получить то, что ты ввел нужно 48 отнять
     
  16. Slav4ik.ru

    Slav4ik.ru Нерд

    Да, конечно, на "ТЫ" удобнее) А почему должно прийти 48?
     
  17. Это связано с тем, что введённое число преобразуется в двоичный код, а потом обратно. А при обратно вот такая фигня. Деталей сам не знаю :)
     
  18. Slav4ik.ru

    Slav4ik.ru Нерд

    Аааа, всё понял, читал об этом, но это будет следующий этап)
     
    БАРМАТОГРАФ нравится это.
  19. Не забудь, что вводить не более 255 и включатся будет на введённое количество микросекунд. Но это можно доработать, чтобы вводить секунды
     
  20. Slav4ik.ru

    Slav4ik.ru Нерд

    Код (C++):
    #include <EEPROM.h>
    #include <SoftwareSerial.h>

    int val;
    int val2;
    int Pin = 13;
    void setup(){
      Serial.begin(9600);
      pinMode(Pin, OUTPUT);      // устанавливает режим работы - выход

    }
    void loop(){
    if (Serial.available() > 0) { //если число передали то значение больше 0
        val = Serial.read();//прочитали число
        val = val - 48;//получили то число которое ввели, при вводе 0 получаем 48 и мы избавились от этого
        EEPROM.write(0, val);//записали в первую ячейку (0)
        val2 = EEPROM.read(0);//прочитали из нее записанное и можем делать что угодно
         digitalWrite(Pin, HIGH);   // включаем
      delay(val2);                  // ждет число микросекунд из еепром
      digitalWrite(Pin, LOW);    // выключаем
         }
    }
    Вот такая фигня получилась, а чтоб диод мигал с заданной в 0 ячкйке частотой?
    Как в цикл включить?