EEPROM и Serial

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

Метки:
  1. Slav4ik.ru

    Slav4ik.ru Нерд

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

    int val;
    int val2;
    int PinLed = 13;
    int PinIn = 8;
    int buttonState = 0;         // переменная для хранения состояния кнопки
    void setup(){
      Serial.begin(9600);
      pinMode(PinLed, OUTPUT);      // устанавливает режим работы - выход
      pinMode(PinIn,INPUT);         //Устанавливает режим работы - вход
     

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

        buttonState = digitalRead(PinIn);

       
    digitalRead(PinIn);      // считываем значения с входа кнопки
        if (buttonState == HIGH) {  
        digitalWrite(PinLed, HIGH);   // включаем
        delay(val2 * 1000);
    }
      else {
        // выключаем светодиод
        digitalWrite(PinLed, LOW);
         }
    }
    }
    Вот так получается? только всё равно не катит(
     
  2. Код (C++):

    #include <EEPROM.h>
    #include <SoftwareSerial.h>

    int val;
    int val2;
    int PinLed = 13;
    int PinIn = 8;
    int buttonState = 0;         // переменная для хранения состояния кнопки
    void setup(){
      Serial.begin(9600);
      pinMode(PinLed, OUTPUT);      // устанавливает режим работы - выход
      pinMode(PinIn,INPUT);         //Устанавливает режим работы - вход

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

        buttonState = digitalRead(PinIn);


    buttonState = digitalRead(PinIn);      // считываем значения с входа кнопки
        if (buttonState == HIGH) {
        digitalWrite(PinLed, HIGH);   // включаем
        delay(val2 * 1000);
    }
      else {
        // выключаем светодиод
        digitalWrite(PinLed, LOW);
         }
    }
    }
     
    Последнее редактирование: 9 дек 2017
  3. Slav4ik.ru

    Slav4ik.ru Нерд

    Хм, но всё равно не включается)
     
  4. Ооооохххххх....... :) мне это начинает нравится. Прям головоломка. Ну бутонстейт это не инт а булинь
     
  5. Slav4ik.ru

    Slav4ik.ru Нерд

    Вообще запутался сейчас, в итоге отправляю через ком 1, если пин 8 0, то не включается, если пин 8 1, то включается и горит постоянно...
     
  6. Может светодиод сгорел? Кнопку точно правильно поставил? Если 4 контакта у кнопки легко попасть впросак если нет мультиметра. Пару контактов кнопки правильно определил?
     
  7. Ну так ты ведь отключаешь в елзе, а не после делей.
    А надо и после делей добавить выключение
     
  8. Slav4ik.ru

    Slav4ik.ru Нерд

    Ага, после делей добавил, прокатило, но всё равно блин не включается при нажатии кнопки) включается, только при подаче цифры через ком порт)
     
  9. Slav4ik.ru

    Slav4ik.ru Нерд

    А фишка как раз, в том чтоб с кнопки управлять)
    Такое ощущение, что ардуинка ждет, когда же упадет цифра в ком порт, вместо, того что бы, управлять с кнопки...
     
  10. Попробуй
    Код (C++):
    #include <EEPROM.h>
    #include <SoftwareSerial.h>

    int val;
    char input;
    int val2;
    int PinLed = 13;
    int PinIn = 8;
    int buttonState = 0;         // переменная для хранения состояния кнопки
    void setup(){
      Serial.begin(9600);
      pinMode(PinLed, OUTPUT);      // устанавливает режим работы - выход
      pinMode(PinIn,INPUT);         //Устанавливает режим работы - вход

    }
    void loop(){
    if (Serial.available() > 0) { //если число передали то значение больше 0
        input = Serial.read();//прочитали число
        val = atoi(input);
        EEPROM.write(0, val);//записали в первую ячейку (0)
        val2 = EEPROM.read(0);//прочитали из нее записанное и можем делать что угодно
    }

    buttonState = digitalRead(PinIn);      // считываем значения с входа кнопки
        if (buttonState == HIGH) {
        digitalWrite(PinLed, HIGH);   // включаем
        delay(val2 * 1000);
                digitalWrite(PinLed, LOW);
    }
     
    Последнее редактирование: 10 дек 2017
  11. Slav4ik.ru

    Slav4ik.ru Нерд

    Теперь вообще непонятки... Подаю на 8 пин 5В, диод горит 1 секунду, причем еле еле...
     
  12. Slav4ik.ru

    Slav4ik.ru Нерд

    ЗЫ, диод живой, порт, тоже)
     
  13. Смотри... Там был огромный и незаметный косяк. Ты цикл с кнопкой сделал вложенным в цикл проверяющий пришло ли число. Если число не пришло, то оно и не доходило до проверки кнопки :)
     
  14. Slav4ik.ru

    Slav4ik.ru Нерд

    Ааа, это {}? они во всем виноваты?) А почему сейчас число не меняет время, и диод на половину светит?
     
  15. Я отредактировал, попробуй опять этот код залить
     
  16. Slav4ik.ru

    Slav4ik.ru Нерд

    Неа, та же ерунда...
     
  17. Ну то, что упала яркость это не кода вина. Если ты подключил светодиод напрямую, а не через резистор, то он просто сгорел походу. Или пин ардуино. Попробуй замени пин на выход. Там только 40 миллиампер можно брать, а сколько мог потащить свотодиод....
     
  18. Slav4ik.ru

    Slav4ik.ru Нерд

    отпраляю 1 по ком порту, он в пол накала светит, отправляю 2 и больше, светит нормально, но цифры больше не секунды...
    val = val - 48; наверное из-за этого?
     
  19. Я снова отредактировал
     
  20. На кнопку хоть реагирует?