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

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

  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 Гуру

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

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

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

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

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

    Asper Daffy Гик

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

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

    b707 Гуру

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

    Airbus Оракул

    Для чего там цветомузыка?Сидение подсвечивать?Или дырку?
     
    Последнее редактирование: 7 дек 2018 в 19:59
  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

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