Здравствуйте! У меня такая проблема: хочу сделать вентилятор от 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) ; }
очевидно же - в скетч надо вставить millis и убрать delay() )) Заводишь переменную - в ней запоминаешь текущее значение millis. Далее в программе сравниваешь запомненное значение с текущим. Как превысило необходимую величину - вызываешь необходимую функцию.
на такой общий вопрос и ответить можно только обще. Как переписать скетч? - сесть, подумать, изучить примеры и написать!
Я пробовал, не получается. Подскажите пожалуйста, как правильно выполнить эту замену, я просто новичок в этом, буду очень благодарен.
я думаю, ваша сложность в том, что вы хотите заменить делей на миллис, а это так не делается. Филосфия программ на миллис совсем другая, чем на делей, поэтому тупой заменой тут не обойтись, нужно менять переписывать логику программы почти с нуля. Подробнее смотрите пример в поставке Ардуино "blink without delay"
А почему если я вообще задержку убираю, то серво дёргается туда сюда? Он же по сути должен все равно работать, тк 15 ms вообще не заметно для глаза