Замена delay на millis

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Игорь7396, 5 дек 2018.

  1. Здравствуйте! У меня такая проблема: хочу сделать вентилятор от usb, с использованием сервопривода. Собрал схему, попробовал прошивку для управления двигателем от потенцометр а-все работает. Затем попробовал отдельно для сервопривод а-все работает. Но если объединить эти два скетча, то двигатель не запускается от потенцометра, не набирает обороты и не реагирует, а сервопривод работает нормально. Я пришёл к выводу, что это из-за задержки delay. Подскажите пожалуйста, как с помощью millis переписать мой скетч, чтобы и вентилятор набирал обороты и останавливался, и при этом работал сервопривод.

    Для сервы:
    #include <Servo. h>

    Servo myservo;

    Int pos = 0;

    void setup()
    {
    for(pos = 0; pos <= 90; pos += 1)
    {
    myservo.write(pos);
    delay(15);
    (
    }
    for(pos = 90; pos >= 0; pos - =1)
    {
    myservo. write(pos) ;
    delay(15);
    }
    }

    Для мотора и потенцометра:

    #define MOTOR 9
    #define POT 0

    int val = 0;

    void setup() {
    pinMode (MOTOR, OUTPUT) ;
    }

    void loop() {
    val = analogRead(POT) ;
    val = map(val, 0, 1023, 0, 255) ;
    analogWrite(MOTOR, val) ;
    }
     
    Последнее редактирование: 5 дек 2018
  2. parovoZZ

    parovoZZ Гуру

    очевидно же - в скетч надо вставить millis и убрать delay() ))
    Заводишь переменную - в ней запоминаешь текущее значение millis. Далее в программе сравниваешь запомненное значение с текущим. Как превысило необходимую величину - вызываешь необходимую функцию.
     
  3. b707

    b707 Гуру

    на такой общий вопрос и ответить можно только обще.
    Как переписать скетч? - сесть, подумать, изучить примеры и написать!
     
    DetSimen нравится это.
  4. Я пробовал, не получается. Подскажите пожалуйста, как правильно выполнить эту замену, я просто новичок в этом, буду очень благодарен.
     
  5. b707

    b707 Гуру

    я думаю, ваша сложность в том, что вы хотите заменить делей на миллис, а это так не делается. Филосфия программ на миллис совсем другая, чем на делей, поэтому тупой заменой тут не обойтись, нужно менять переписывать логику программы почти с нуля.
    Подробнее смотрите пример в поставке Ардуино "blink without delay"
     
  6. А почему если я вообще задержку убираю, то серво дёргается туда сюда? Он же по сути должен все равно работать, тк 15 ms вообще не заметно для глаза
     
  7. У сервомоторов есть глаза?!!
     
    parovoZZ нравится это.