"Умное освещение"

Тема в разделе "Arduino & Shields", создана пользователем Victor_San, 24 мар 2018.

  1. Victor_San

    Victor_San Нуб

    [​IMG]
    Добрый вечер.
    Возникла проблема с этим проектом....
    Не кидайтесь тапками, опыта в программирование по сути нет, вот и маюсь сижу.
    * Проблема такова: *

    Есть 6 "блоков", глядя на схему их можно разделить.
    Каждый блок выполняет свою определенную функцию.
    Без особых усилий смог собрать каждый блок и "накалякать", найти для каждого блока скетч.
    Но не хватает моих познаний, опыта, мозгов, чтобы соединить, "слепить" из 6 скетчей - один рабочий.
    -
    Вот от безнадеги решил обратиться за помощью к уже бывалым программистам и гениям.
    Возможно же "склеить" их в один?
    -
    По схеме: большой квадратик с 4-мя пинами - это датчик звука.
    Квадратик (прямоугольник) с 3-мя пинами - это датчик Движения.
    ! в скетчах могут не совпадать пины со схемой!
    Остальное, думаю, понятно.
    -
    -
    скетчи:

    Код (C++):
    // 1 Датчик Звука (Хлопки)
    boolean statuslamp;

    void setup()
    {
    pinMode(12,OUTPUT);
    pinMode(A0,INPUT);
    statuslamp=false;
    Serial.begin(9600);
    }

    void loop()
    {
    Serial.println (analogRead(A0));
    if(analogRead(A0)>60)
    statuslamp=!statuslamp;
    digitalWrite(12,statuslamp);
    delay(20);
    }
    }

    // 2 Датчик движения

    #define pirKor 2
    #define ledKor 13
    #define ledKor_ 4
    int calibrationTime = 10; //t калибровки датчика (10-60 сек. по даташиту)
    void setup()
    {
      Serial.begin(9600);
      pinMode(pirKor, INPUT);
      pinMode(ledKor, OUTPUT);
      pinMode(ledKor_, OUTPUT);
      Serial.print("Калибровка");
      for (int i = 0; i < calibrationTime; i++)
      {
        Serial.print(".");
        delay(500);
      }
      Serial.println("Готово");
      Serial.println("SENSOR ACTIVE");
      delay(50);
    }
    void loop()
    {
      int pirVal = digitalRead(pirKor);
      if (pirVal == HIGH)  //Если обнаружили движение
      {
        digitalWrite(ledKor, HIGH);
        digitalWrite(ledKor_, HIGH);
        Serial.print("Wow_горит");
        delay(5000);
      }
      else
      {
        Serial.print("Aaa_Idiot");
        digitalWrite(ledKor, LOW);
        digitalWrite(ledKor_, LOW);
      }
    }

    // 3 Датчик освещенности (Без доп. управления - кнопки) (13 пины для себя были)
    #define ledKom 13
    #define ledKom_ 10
    #define photoKom A2

    void setup() {
      Serial.begin(9600);
      pinMode(ledKom, OUTPUT);
      pinMode(ledKom_, OUTPUT);
    }

    void loop() {

    void kom();
    }
    void kom()
    {
    int val = analogRead(photoKom);
      Serial.println("...");
      Serial.println(val);
      if (val < 850) { //950 = 10к Ом
        digitalWrite(ledKom, LOW); // hign
        digitalWrite(ledKom_, LOW); // hign
      } else {
        digitalWrite(ledKom, HIGH);  //low
        digitalWrite(ledKom_, HIGH); // low
      }}

    // 4-5 Кнопка
    int knopkaZal = 7;
    int ledZal = 8;

    boolean lastButton = LOW;
    boolean currentButton = LOW;
    boolean ledOn = false;

    void setup() {
    pinMode(knopkaZal, INPUT);
    pinMode(ledZal, OUTPUT);
    }


    boolean debounse(boolean last) {
    boolean current = digitalRead(knopkaZal);
    if(last != current) {
    delay(5);
    current = digitalRead(knopkaZal);
    }
    return current;
    }

    void loop() {
    currentButton = debounse(lastButton);
    if(lastButton == LOW && currentButton == HIGH) {
    ledOn = !ledOn;
    }
    lastButton = currentButton;
    digitalWrite(ledZal, ledOn);
    }

    // 6 Датчик Освещенности с доп. управлением - кнопка.

    int ledVxod_ = 2;
    int  photoVxod = A0;
    int knopkaVxod = 9;
    // переменные для хранения состояния кнопки и светодиода
    boolean lastKnopka = LOW;
    boolean currentKnopka = LOW;
    boolean ledOnn = false;
    void setup() {
      Serial.begin(9600);
      pinMode(ledVxod_, OUTPUT);
      pinMode(knopkaVxod, INPUT);
    }
    boolean debounse(boolean last) {
      boolean current = digitalRead(knopkaVxod);
      if (last != current) {
        delay(5);
        current = digitalRead(knopkaVxod);
      }
      return current;
    }
    void loop() {

      int val = analogRead(photoVxod);
      Serial.println("...");
      Serial.println(val);

      if (val < 950)  { //950

        digitalWrite(ledVxod_, HIGH);
      } else {

        digitalWrite(ledVxod_, LOW);
        currentKnopka = debounse(lastKnopka);
        if (lastKnopka == LOW && currentKnopka == HIGH) {
          ledOnn = !ledOnn;
        }
        lastKnopka = currentKnopka;
        digitalWrite(ledVxod_, ledOnn);
        }}
    - Как-то так....
    Возможно же запрограммировать на Совместную работу?
    Например, если срабатывает Датчик Движения - лампа (светодиод) горит, а в тоже время активны и другие блоки?
     
    Последнее редактирование: 25 мар 2018
  2. ostrov

    ostrov Гуру

    Вопрос в другом. Если вы не знаете как слепить несколько программ в одну, что вы ждете от нас? Ответа на вопрос "возможно ли?", да, это возможно. Дальше нам надо будет сделать это?
     
  3. parovoZZ

    parovoZZ Гуру

    А какое громкое название
    Рано, рано на двухколесный велосипед сел. Ещё не научился педали крутить на трехколесном.
     
    Victor_San нравится это.
  4. SergeiL

    SergeiL Гуру

    Гуглите на тему «blink без delay», вот первая ссылка из поиска.:)

    Читаете, разбираетесь, думаете.

    Дальше, заменяете в каждом Вашем отдельном скетче delay() в loop() на вариант с millis(), как в примере из ссылки, проверяете, что все правильно работает.

    Дальше все setup() объединяете в одном, все loop() тоже объединяете.
    Смотрите, чтобы переменные во всех скетчах не пересекались.
    Как то так...