подсветка столешницы c ШИМ проблема с delay

Тема в разделе "Arduino & Shields", создана пользователем Andrei brest, 19 авг 2016.

  1. Andrei brest

    Andrei brest Нерд

    Привет в сем !
    вот надумал сделать подсветку столешницы в кухне
    взял китайский датчик (HC-SR04) и полевой транзистор
    ну и ко нечто ардуино уно
    замысел такой что когда подходишь к мойке светодиоды включаются
    как только мы отошли светодиоды светиться еще 20 секунд и гаснут
    проблема я никак не могу въехать как работает задержка без delay
    да и с ШИМ тоже проблема ПОДСКАЖИТЕ куда двигаться

    Код (C++):
    // Подсветка столешницы версия 1.0
    // Начата 18.08.2016

    //******************************************************************************************************
    int ledPin = 13; // подключаем -12в блока питания
    int trigPin = 8; // тригер
    int echoPin = 7; // эхо
    int dist1 = 20; // дистанция срабатывания


    void setup() {

      Serial.begin (9600);  // выводим на экран
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
      pinMode(13, OUTPUT);

    }



    void loop() {



    long duration;
    int   cm;

      digitalWrite(trigPin, LOW);

      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
      cm = duration / 82;

      if( cm<dist1 ){
        digitalWrite(13, HIGH);
          }
      if( cm>dist1 ){
        digitalWrite(13, LOW);
     
      }
      delay(150);

      Serial.print(cm);
      Serial.print(".");
       Serial.println(" cm");
      delay(150);


    }
     
    Последнее редактирование: 19 авг 2016
  2. Andrei brest

    Andrei brest Нерд

    вот нашол пример работы ШИМ

    Код (C++):
    int value = 0;       // переменная для хранения значения ШИМ
    int ledpin = 9;      // светодиод подключён к выводу 9

    void setup()
    {
      // ничего не устанавливаем
    }

    void loop()
    {
      for(value = 0 ; value <= 255; value+=5) // напряжение постепенно увеличивается (от 0V to 5V)
      {
        analogWrite(ledpin, value);      
       delay(300);                            // ждём 30 миллисекунд, чтобы был виден эффект (светодиод постепенно загорается)
      }
      for(value = 255; value >=0; value-=5)   // а здесь напряжение будет постепенно уменьшаться (от 5V to 0V) (светодиод постепенно гаснет)
      {
        analogWrite(ledpin, value);

       delay(300);                        
      }
    }
    как его интегрировать незнаю
     
    Последнее редактирование: 19 авг 2016
  3. Vetrinus

    Vetrinus Гик

    Вы когда научитесь код в тег вставлять?
     
  4. qwone

    qwone Гик

    Код (C++):
    const int sensor_pin = 2; // нога сенсора  1 нет ничего 0 есть вторжение
    const int lamp_pin = 13; // нога лампы      1 горит   0 нет
    int sensor;
    int lamp;

    uint8_t non_stop_program(uint16_t span) {
      static uint32_t future = 0;
      if (millis()<future) return 0;
      future += span;
      return 1;
    }
    void setup() {
      pinMode(sensor_pin, INPUT);
      pinMode(lamp_pin, OUTPUT);
    }
    void loop() {
      sensor = digitalRead(sensor_pin);
      if (non_stop_program(1000)){ // сработка раз в 1 сек
      static int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;
       if (!sensor) {
         lamp=a10=a9=a8=a7=a6=a5=a4=a2=a1=1;}
       else{
         lamp=a10;a10=a9;a9=a8;a8=a7;a7=a6;a6=a5;a5=a4;a4=a3;a3=a2;a2=a1;a1=0;
       }
      }
        digitalWrite(lamp_pin, lamp);
    }
     
  5. Andrei brest

    Andrei brest Нерд

    а можно как нибудь пояснить как этот код работает
     
  6. Andrei brest

    Andrei brest Нерд

    объясните
    и я буду это делать
     
  7. Vetrinus

    Vetrinus Гик

    Шаг первый: Скопировать код в буфер обмена
    Шаг второй: Нажать вот эту кнопку
    [​IMG]
    Шаг третий: вставить код в появившееся окно
    Шаг четвертый: отправить сообщение
    Готово!
     
    Tomasina нравится это.
  8. Andrei brest

    Andrei brest Нерд

    огромное спасибо отныне буду делать правельно
     
  9. qwone

    qwone Гик

    non_stop_program(1000) . Если эту команду регулярно опрашивать, то она вернет 1 , не раньше 1000 милисекунд и, от того момента когда возращала 1 прошлый раз. А иначе возвращает ноль. Можете считать это "программным прерыванием". В отличии от аппаратного , который сразу вызывает программу прерывания . Для этого прерывания надо спрашивать самому: было прерывание или нет.