Автоматическая подсветка лестницы

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 19 сен 2013.

  1. ZAZ-965

    ZAZ-965 Гик

    Поправил библиотеки для сборки в IDE 1.8.2 (ZIP архивы во вложении, распаковать в папку libraries ).
    Скетч собрался, пробуйте (остались предупреждения в библиотеке lightuino3, с ними тоже можно будет разобраться )
    Код (C++):
    #include <lightuino3.h>
    #include <Ultrasonic.h>

    //Устанавливаем контакты для первого датчика
    #define  TRIG_PIN  12
    #define  ECHO_PIN  13
    //Устанавливаем контакты для второго датчика
    #define  TRIG2_PIN  10
    #define  ECHO2_PIN  11
    //Определяем первый датчик
    Ultrasonic OurModuleUp(TRIG_PIN, ECHO_PIN);
    //Определяем второй датчик
    Ultrasonic OurModuleDown(TRIG2_PIN, ECHO2_PIN);
    // pins 0, 1 used by Serial
    const unsigned char DataPin = 6;
    const unsigned char clockPin = 7;

    // задержка между ступеньками
    const long lightSpacing = 280;
    //задержка свечения всей лестницы
    const long lightHold = 10000;
    //задержка выстрела сенсоров
    const long pingReadDelay = 50;

    // Диапазон при котором сработает сенсор
    const float minBottomIn = 33.0f;
    const float minTopIn = minBottomIn;

    LightuinoSink sinks(clockPin, DataPin, 100, 4);

    boolean bClimbStarted = false;
    boolean bDescentStarted = false;

    int val;
    void setup() {
      Serial.begin(9600);      
      pinMode(DataPin, OUTPUT);
      pinMode(clockPin, OUTPUT);    
      delay(1000);  
      sinks.set(0,0,0);
    }
    void loop() {
       val = analogRead(0);
       //Проверяем освещенность в помещении
       if (val>=1020){
     
    UltrasonicDownFire();//Выстрел нижнего датчика
      if(bClimbStarted) {
        bClimbStarted = false;
        bDescentStarted = false;
        climbLightSequence();
      }
      else {
        // Выстрел верхнего датчика
        UltrasonicUpFire();  
        if(bDescentStarted) {
          bClimbStarted = false;
          bDescentStarted = false;
          descentLightSequence();
        }
      }
      delay(pingReadDelay);
      }
    }

    //Обработка верхнего датчика
    void UltrasonicUpFire() {

    if((OurModuleUp.Ranging(INC) < minTopIn) && (OurModuleUp.Ranging(INC) > 0))
    {
    // Serial.println("Top sensor tripped.");
    bDescentStarted = true;
    }
    }

    //Обработка нижнего датчика]
    void UltrasonicDownFire() {
     
        if((OurModuleDown.Ranging(INC) < minTopIn) && (OurModuleDown.Ranging(INC) > 0)) {
       //   Serial.println("Bottom sensor tripped.");
          bClimbStarted = true;
        }
    }

    void climbLightSequence(){
    LedsOnDown();
    }
    void LedsOnDown(){
      //Обнуляем
       byte ledState[9];
      for (int j=0;j<9;j++) {
        ledState[j] = B00000000;
      }
      //Зажигаем
      for (int k=1;k>=0;k--)
      {
      for (int j=8;j>=1;j--)  
      {
       ledState[k] = (ledState[k] >> 1) + 128;
        sinks.set(ledState);
        delay(lightSpacing);
      }
         }
    //Задержка
      delay(lightHold);
    //Гасим  
      for (int k=1;k>=0;k--)
      {
      for (int j=8;j>=1;j--)  
        {
        ledState[k] = (ledState[k] >> 1);
        sinks.set(ledState);
        delay(lightSpacing);
        }
      }
    delay(pingReadDelay);
    }

    void descentLightSequence(){
      LedsOnUp();
    }

    void LedsOnUp(){
    //Обнуляем
      byte ledState[9];
      for (int j=0;j<9;j++) {
        ledState[j] = B00000000;
      }
    //Зажигаем
      for (int k=0;k<=1;k++)
      {
      for (int j=0;j<9;j++)  
      {
        ledState[k]=(ledState[k] << 1) + 1;
        sinks.set(ledState);        
         delay(lightSpacing);
      }    }
      delay(lightHold);
      for (int k=0;k<=1;k++)
      {
      for (int j=0;j<9;j++)  
      {
        ledState[k]=(ledState[k] << 1);
        sinks.set(ledState);        
         delay(lightSpacing);
      }  
    }
    delay(pingReadDelay);
    }
     

    Вложения:

    krauzor нравится это.
  2. Shadow2091

    Shadow2091 Нуб

    Получил плату, дошла нормально. Ардуинки Нано пока нет, только Уно, так что проверить пока не могу (с переопределением ног не разбирался). За скетч с софтварным ШИМ спасибо, принцип понял. Но, судя по коду, если одновременно сработают и верхний и нижний сенсор, то МК перестанет реагировать на сенсоры вообще.
     
  3. Aivaredze

    Aivaredze Нерд

    добрый,давайте в личку перейдем,а то опять пивас кое-кто требовать начнет.. :)
     
  4. ИгорьК

    ИгорьК Давно здесь

    Вишь какая тема хорошая... и аффтара пнуть можно и рекламной площадкой воспользоваться и денежку зажать - самому срубить :)
     
  5. Aivaredze

    Aivaredze Нерд

    ну вот , началось....
    не дремлет сторожила... :)
     
  6. krauzor

    krauzor Нуб

    Можно TRIG_PIN и ECHO_PIN заменить на один.
    Я HC-SR04 подключил как тут (стр 4, рис 2):
    http://smartstair.ru/upload/smartstair24_hm_1705.pdf
    Там надо один резюк 620 Ом потавить между Trig и Echo и получиться одна линия.
    А кто подскажем зачем его надо ставить?