Нужна помощь и корректировка скетча:автоматический слив туалета.

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

  1. sarstab

    sarstab Нуб

    Добрый день, многоуважаемые форумчане,подскажите пожалуйста по скетчу.Ввиду того что человек я общительный имею много знакомых ,родственников,друзей,соответсвено бывает у меня много застолья,и наверно не все приходящие умеют пользоваться сливом унитаза)))вот и решил сделать слив автоматическим.В проекте использую: ардуино уно, 2 серво, 2 сенсорные кнопки,адресную светодиодную ленту ws2812b и инфракрасный датчик измерения шарп. суть скетча такова,что при приближении человека на определенное расстояние зажигается светодиодная лента с лево на право и продолжает гореть пока объект находится на определенном расстоянии, если объект удаляется светодиодная лента гаснет с право на лево срабатывают 2 сервопривода(слив,освежитель),во время нахождения объекта в туалете можно отдельно управлять двумя серво с помощью сенсорных кнопок(слив,освежитель).Помогите пожалуйста с правильной работай кнопок что бы они могли самостоятельно работать с сервами без нарушения основной логики. И самое главное с чем я мучуюсь, это светодиодная лента:мне надо что бы при срабатывании датчика, с лево на право на ленте с 0 до 40 светодиода загоралось синим цветом и хаотично увеличивалась и уменьшалась яркость синих диодов (полы),с 40 до 100 диода загорались хаотично разноцветные вспышки (стена),с 100 до 150 диода просто горело только белым цветом (потолок).Что то я уже сделал благодаря темам с вашего форума очень помог своими постами многоуважаемый Tomasina ну и другие ресурсы в сети.
    Код (C++):
    #include <Servo.h>
    #include "FastLED.h"
    #define DATA_PIN                8
    #define NUM_LEDS                33
    #define SPEED                   150
    #define LED_TYPE                WS2811
    #define COLOR_ORDER             GRB
    #define OFFTIME                 20
    byte    ledBrightness =         64;
    #define LEFT                    0
    #define RIGHT                   1
    #define OFF                     0
    #define ON                      1
    CRGB leds[NUM_LEDS];

    int button1 = 4;
    int press1 = 0;
    int button2 = 5;
    int press2 = 0;



    Servo myservo;
    Servo myservo1;
    const int  sensorPin = A0;
    int pos = 0;
    int sensorValue = 0;
    const int queue_length = 5;
    int queue [queue_length];
    long starttime;
    int justClose = 0;
    long avg;

    void setup() {
      Serial.begin(9600);
      myservo.attach(11);
      myservo1.attach(10);
      starttime = millis();
      myservo.write(180);
      myservo1.write(180);
      FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
      FastLED.setBrightness(ledBrightness);

    pinMode(button1, OUTPUT);
    pinMode(button2, OUTPUT);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    }

    void ledManager(boolean dir, boolean state)  // черный ящик с входными параметрами - направление (направо/налево) и действие (вкл/выкл)
    {
      for (byte i = dir * NUM_LEDS; i != NUM_LEDS - dir * NUM_LEDS;) // ленивый цикл, сам все формирует :)
      {
        leds[!dir ? i++ : --i] = CRGB(0 * state, 0 * state, 255 * state); // специально для ИгорьК - одна строка вместо 12 ;o)
        FastLED.show();
        delay(SPEED);
      }
    }

    void loop() {

      long elapsedtime = millis() - starttime;

      if (elapsedtime > 1000 ) {
        sensorValue = analogRead(sensorPin);
        long sum = 0;
        for (int i = queue_length-1; i > 0; i--) {
           queue[i] = queue[i-1];
           sum += queue[i];
        }
        queue[0] = sensorValue;
        sum += queue[0];
        avg = sum/queue_length;
        starttime = millis();
         Serial.println(avg);
      }
      if (avg > 100) { justClose = 1;ledManager(LEFT, ON);}
      if (avg < 70 && justClose) {

        Serial.println("FLUSH");
        myservo.write(11);
        myservo1.write(11);              
          delay(15000);
        myservo.write(180);
        myservo1.write(180);
        ledManager(RIGHT, OFF);
        justClose = 0;
      }

    press1 = digitalRead(button1);
    if (press1 == HIGH)
    {myservo.write(11);
    }
    else
    {myservo.write(180);
    }

    press2 = digitalRead(button2);
    if (press1 == HIGH)
    {myservo1.write(11);
    }
    else
    {myservo1.write(180);

    }


    }

    void testDirection()
    {
      ledManager(LEFT, ON);       // включаем подсветку справа налево (от датчика 1)
      delay(3000);
      ledManager(LEFT, OFF);      // отключаем подсветку справа налево (от датчика 1)
      delay(3000);
      ledManager(RIGHT, ON);      // включаем подсветку слева направо (от датчика 2)
      delay(3000);
      ledManager(RIGHT, OFF);     //отключаем подсветку слева направо (от датчика 2)
      delay(3000);
    }


    void testLEDstrip()
    {
      while (1)  // бесконечный цикл
      {
        static boolean state = 0;
        state = !state;
        for (byte i = 0; i < NUM_LEDS; i++)
        {
          leds[i] = state ? CRGB::Red : CRGB::Black;
          FastLED.show();
          delay(SPEED);
        }
        for (byte i = 0; i < NUM_LEDS; i++)
        {
          leds[i] = CRGB::White;
          FastLED.show();
          delay(SPEED);
          leds[i] = CRGB::Blue;
          FastLED.show();
        }
      }
    }
     
  2. DetSimen

    DetSimen Guest

    Вот это вот всё станет абсолютно ненужным, если:

    1. Не водить к себе в гости малограмотных людей, интеллект которых не позволяет запомнить им, как работает слив. С такими можно встечаться и во дворе, они все равно не утруждают себя поисками туалета, кусты сойдут.

    2. Для других, на вид не столь безнадёжных, проводить подробную и тщательную инструкцию по пользованию сливом, можно даже с закреплением моторных навыков. Не запомнили - это в первую категорию гостей и --> во двор.

    3. Не напиваться до состояния, когда вылетают из головы простейшие инструкции по пользованью сливом.

    И наступит щастье....
     
    Andrey12, Пушной звер, b707 и 3 другим нравится это.
  3. Asper Daffy

    Asper Daffy Иксперд

    Поправить скетч с трёхсекундными задержками так, чтобы в нём могли одновременно работать и кнопки, и сервы, и всё остальное практически невозможно (можно, но для этого нужна квалификация, значительно превышающая то, что мы здесь наблюдаем).

    Поэтому, единственный выход - перепроектировать программу так. чтобы в ней не требовались блокирующие операции такой длительности и переписать с нуля.
     
  4. b707

    b707 Гуру

    Там даже 15 секунд задержка есть...
    С выводом полностью согласен - этот скетч править без толку, его надо выкинуть и написать правильный с нуля.
    Автору - посмотрите пример "блинк без делей" (blink without delay) - это то, с чего надо начать проектирование правильного скетча.
     
  5. Airbus

    Airbus Радиохулиган Модератор

    Для чего там цветомузыка?Сидение подсвечивать?Или дырку?
     
    Последнее редактирование: 7 дек 2018
  6. Asper Daffy

    Asper Daffy Иксперд

    Не умеете Вы жизнь в праздник превращать!

    Видел в сети концепт умного унитаза, так там и выход в соцсети есть :)
     
    Andrey12 нравится это.
  7. Airbus

    Airbus Радиохулиган Модератор

    Я на таком сидел даже.В Сеуле в отеле.Только там соцсетей нет хотя Вайфай есть.
     
  8. parovoZZ

    parovoZZ Гуру

    Для общения с глистами?
     
  9. Asper Daffy

    Asper Daffy Иксперд

    Я не понял для чего.

    Единственное, что могу предположить - раз есть любители еду в ресторанах в инстаграм постить, то должны быть и любители продукт переработки еды туда же.выкладывать.
     
  10. parovoZZ

    parovoZZ Гуру

    Я тоже не понимаю, для чего горшку выход в соц сети.
     
  11. Airbus

    Airbus Радиохулиган Модератор

    Как для чего?А Селфи?На умном горшке.Меня нет в соцсетях.Нигде.а так может бы заценил.
    [​IMG]
     
  12. parovoZZ

    parovoZZ Гуру

    а представь, как это всё дерьмо мыть? Или от дерьма...
     
  13. ИгорьК

    ИгорьК Гуру

    А я как в Японии побывал, так и завел себе такой. Еще в 2007 году.
     
    Airbus и SergeiL нравится это.
  14. SergeiL

    SergeiL Оракул Модератор

    Где покупал?
    Я каждый раз после Японии такой хочу.
     
  15. Airbus

    Airbus Радиохулиган Модератор

    И как?В наших условиях?Я тоже такой взял бы.Эт конечно черезчур но для себя любимого-можно.главное гостей не пускать.
     
  16. SergeiL

    SergeiL Оракул Модератор

    В свое время даже думал из Японии привезти крышку, но не факт, что своему подойдет.
     
  17. ИгорьК

    ИгорьК Гуру

    http://www.senspa.ru

    Здесь брал. Крышки. Не страшны они гостям. Ничего с ней не сделать задницей. Только молотком
     
    SergeiL нравится это.
  18. sarstab

    sarstab Нуб

    Спасибо парни за критику и нужную ссылку,учту ваши пожелания по delay.ведь я только начал разбираться с ардуино,основываясь на примеры и уроки других. Но жалко что вы имеющие не один год за плечами -знания даже не посмотрели код,а ведь в коде только один delay (15 сек ) между работой серводвигателей ,а все остальные не участвуют, но написаны! (могу удалить если вас это нервирует),складывается такое ощущение что просто ищете в кодах что вам не нравится ,указываете новичку на ошибку словом а не делом и все дальше просто ФЛУД про жизнь.Вы подскажите по вопросам которые вам задают люди,конкретно я даже выделил жирным их в своем вопросе,но все равно началось "научи людей смывать,не пейте,и так далее",за чем вам этот флуд. если вы мастер своего дела подскажите, приведите пример новичку. Только один b707 подсказал что надо посмотреть про задержку, а про то как разместить на одной ленте 3 разных эффекта работающих одновременно ни слова.Итог помощи самый мизерный!
     
  19. Вам был дан пример в самом начале темы. blink without delay. Там показан принцип, по которому можно решить немалую часть ваших проблем. Когда вы разберетесь, и напишете соответствующий код - возвращайтесь. Пока больше говорить не о чем.
     
    ИгорьК нравится это.