Помогите начинающему написать простой скетч

Тема в разделе "Arduino & Shields", создана пользователем Алексей782, 11 окт 2016.

  1. Начинающий я!) нужен скетч управления двумя реле. При включении ардуино сразу должно включаться первое реле и через 10 минут выключаться и сразу включаться второе на час!
    Я понимаю что вроде это просто но что то не знаю с чего начать. может кому не трудно кинет тут такой скетч сразу? Пожалуйста. Использоваться будет в стерилизаторе с сушкой вместо штатной глючной электроники. Ребенку надо ингалятор стерилизовать и сушить.
     
  2. qwone

    qwone Гик

    Ну а если в моем коде не разберетесь то что делать будем. Ведь перовереные средства и давать ребенку опасно.
     
  3. ostrov

    ostrov Гуру

    Вот вариант проще некуда.
    Код (C++):
    void setup() {
      // put your setup code here, to run once:
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
      digitalWrite(9, LOW);
      digitalWrite(10, HIGH);
      delay (600000);
      digitalWrite(9, HIGH);
      digitalWrite(10, LOW);
      delay(3600000);
      digitalWrite(10, HIGH);
    }

    void loop() {
      // put your main code here, to run repeatedly:

    }
    Не знаю поймет ли delay такие цифры, наверное поймет. Если нет, то в цикле.
     
  4. qwone

    qwone Гик

    Не провереные программы, как и непроверенные лекарства вредны для здоровья. Мой код
    Код (C++):
    /*
    реле 1  -> 2(relay1_pin) 1 включено / 0 выключено включается на 10 минут
        GND -> GND
    реле 2  -> 3 (relay2_pin) 1 включено / 0 выключено включается после выключения 1 на 1 час
        GND -> GND

    */

    //#1
    const int relay1_pin = 2; // первое реле
    uint8_t relay1;
    //#2
    const int relay2_pin = 3; // второе реле
    uint8_t relay2;
    void setup() {
      //#1
      pinMode(relay1_pin, OUTPUT);  // включим реле 1
      digitalWrite(relay1_pin, relay1 = 1);
      //#2
      pinMode(relay2_pin, OUTPUT);  // выключим реле 2
      digitalWrite(relay2_pin, relay2 = 0);
    }

    void loop() {
      //#1
      static uint32_t future1 = 10 * 60 * 60 * 1000 ; // выставляем 10 минут(шаг 0,001 сек)
      static uint32_t future2 =0;
      if (relay1 && millis() >= future1) {  // когда будет 10 минут
        digitalWrite(relay1_pin, relay1 = 0); // выключим реле 1
        digitalWrite(relay2_pin, relay2 = 1); // включим реле 2
        future2=millis()+60 * 60 * 60 * 1000 ; // выставляем выключение через 60 минут()(шаг 0,001 сек)
      }
      //#2
      if (relay2 && millis() >= future2) { // когда будет 1час
        digitalWrite(relay2_pin, relay2 = 0); // выключим реле 2
      }
    }
     
    Последнее редактирование: 12 окт 2016
  5. Да нет, немного не поняли. Пользоваться то взрослые им будут. Просто это нужно ребенку.
     


  6. Спасибо. только что то со временем. включается первое сразу а второе через несколько секунд. и при этом первое не выключается.
     
  7. ostrov

    ostrov Гуру

    Мой попробуйте. 9 одно реле 10 второе. Зачем плодить сущности без нужды.
     
  8. ostrov

    ostrov Гуру

    Зачем переменная relay в этой строке?
    Код (C++):
    digitalWrite(relay1_pin, relay1 = 0);
     
  9. Так Ваш проверку даже не проходит не говоря о загрузке.
     
  10. а нет извиняюсь. все пошло. пробую. напишу как пройдет все.
     
  11. Все работает спасибо огромное!) если надо время изменить то рассчитать в секунды. как я понял
     
  12. ostrov

    ostrov Гуру

    Время задается в миллисекундах. 1000мкс = 1с, вот и считайте. Чтобы нагляднее было можно писать, например:
    Код (C++):
    delay(60*60*1000); // один час
     
  13. sys

    sys Злобный Буратино Модератор

    опечатались - "1000 мс = 1 с"
     
    ostrov нравится это.