мой первый проэкт, очень нуждаюсь в помощи

eugen.s
Offline
Зарегистрирован: 05.03.2022

приветствую всех форумчан форума. нашёл себе хобби заниматься ардуино ну и делать простые вещи. приобрёл наборчик деталей и плату UNO R3. хочу своему кошаку сделатъ вытяжку. схема простая кот подходит к лотку,PIR его видет включает вентилятор и поворачивает задвижку в трубе. через определенное время вентилятор выключается и задвижка закрывает трубу. вместо вентилятора пока LED схема вроде работает. что я не смог сделать это привязать кнопку , что бы при нажатие задвижка закрывалась, вентилятор выключался и схема вставало опять на ожидание кошки. буду очень благодарен если кто подскажет или поможет отредактировать скечь. всем хороших выходных.

 

#include <Servo.h>
#define LED  3 // порт для светодиода
#define PIR  2 // порт для датчика движения
Servo zadvizhka;

int angle; // переменная для угла поворота микро серво

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(PIR, INPUT);
  zadvizhka.attach(10); // порт для сервомотора
}
void loop()
{
   if (digitalRead(PIR) == HIGH) {// если есть движение включаем светодиод
      digitalWrite(LED, HIGH); //светодиод включен
        {
  for (angle = 0; angle <= 90; angle++) {// цикл для поворота от 0 до 90 градусов
    zadvizhka.write(angle); // сообщаем микро серво угол поворота
    delay(20); // скорость поворота сервомотора
  }
      delay(5000); //светодиод годит 5000 милисек= 5 сек
      digitalWrite(LED, LOW);//светодиод выключается
   }
  delay(2000);

  for (angle = 90; angle >= 0; angle--) // цикл для поворота от 90 до 0 градусов
    {
    zadvizhka.write(angle); // сообщаем микро серво угол поворота
    delay(20); // скорость поворота сервомотора
  }
  delay(1000);}
}

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Невозможно привязать то, чего нет. В этом скетче нет даже намека на кнопку.
И второе - с такой кучей делеев кнопку привязывать - дохлый номер

b707
Offline
Зарегистрирован: 26.05.2017

как вы считаете, скобка на строке 17 - на месте? если да - обьясните, в чем ее функция

nik182
Offline
Зарегистрирован: 04.05.2015

Делэй в таком коде неправильно. Пока в нём висит программа нельзя ничего делать. Ни кнопки нажимать ни программу направить в другое русло. Как заменить делэй написано в теме blink without deley. В остальном надо копать либо в направлении прграммных автоматов, либо использовать флаги состояния.

eugen.s
Offline
Зарегистрирован: 05.03.2022

b707 пишет:

как вы считаете, скобка на строке 17 - на месте? если да - обьясните, в чем ее функция

скобка не на месте, сдвинул в лево.

b707
Offline
Зарегистрирован: 26.05.2017

eugen.s пишет:

скобка не на месте, сдвинул в лево.

ЛОЛ

eugen.s
Offline
Зарегистрирован: 05.03.2022

nik182 пишет:
Делэй в таком коде неправильно. Пока в нём висит программа нельзя ничего делать. Ни кнопки нажимать ни программу направить в другое русло. Как заменить делэй написано в теме blink without deley. В остальном надо копать либо в направлении прграммных автоматов, либо использовать флаги состояния.

я правильно понял, требуется замена delay на millis?

b707
Offline
Зарегистрирован: 26.05.2017

eugen.s пишет:

я правильно понял, требуется замена delay на millis?

вообще да, но для начала я бы все-таки разобрался с положением скобок. Имхо, на данный момент код не работает именно из-за них.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Да там прям БЯДА со скобками. Кому-то не завезли, а ТС отгрузили лишнего )))

Обещаны котлеты домашние на ужин, так что смотри как это вообще должно выглядеть (в твоём исполнении ТС):

#include <Servo.h>

const uint8_t LED = 3;                           // ПИН для светодиода
const uint8_t PIR = 2;                           // ПИН для датчика движения
const uint8_t SERVOPIN = 10;                     // ПИН для сервомотора

Servo zadvizhka;

int angle;                                       // переменная для угла поворота микро серво

void setup()  {
  pinMode(LED, OUTPUT);
  pinMode(PIR, INPUT);
  zadvizhka.attach(SERVOPIN);                    // Если начал правильно писать код - действуй так до конца. Но понимаешь ли что тут происходит вообще?
}

void loop() {

  if (digitalRead(PIR) == HIGH) {                // если есть движение включаем светодиод
    digitalWrite(LED, HIGH);                     // светодиод включен
    for (angle = 0; angle <= 90; angle++) {      // цикл для поворота от 0 до 90 градусов
      zadvizhka.write(angle);                    // сообщаем микро серво угол поворота
      delay(20);                                 // скорость поворота сервомотора
    }
    delay(5000);                                 // светодиод годит 5000 милисек= 5 сек
    digitalWrite(LED, LOW);                      // светодиод выключается
    delay(2000);

    for (angle = 90; angle >= 0; angle--) {      // цикл для поворота от 90 до 0 градусов
      zadvizhka.write(angle);                    // сообщаем микро серво угол поворота
      delay(20);                                 // скорость поворота сервомотора
    }
    delay(1000);
  }
}

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

eugen.s пишет:

b707 пишет:

как вы считаете, скобка на строке 17 - на месте? если да - обьясните, в чем ее функция

скобка не на месте, сдвинул в лево.

Не нужно двигать. В Arduino IDE нажать комбинацию Ctrl+T, среда сама отформатирует код. Если там, конечно, со скобками все нормально

inspiritus
Offline
Зарегистрирован: 17.12.2012

Вы что там курите ващще? Скока стоить? Где покупаити?