Нужно двигать сервопривод в течение определенных промежутков времени
#include <Servo.h> //объявить для вставки библиотеки Servo.h
Servo myservo; //создать объект servo для управления сервоприводом
int pos = 0; //переменная pos для длительного хранения положения сервопривода
unsigned long time;
void setup() {
myservo.attach(9); //присоедините сервопривод к цифровому контакту 9.
}
void loop() {
Serial.print("Time: ");
time = delay();
//печатает время с момента запуска программы
Serial.println(time);
// подождите секунду, чтобы не отправлять огромные объемы данных
delay(1000);
}
for(pos = 0; pos < 180; pos += 1){ // сервопривод поворачивается от 0 до 180 с шагом 1 градус
myservo.write(pos); // скажите сервоприводу перейти в положение с переменной
delay(15); // wts 15 мс для сервопривод для достижения нужной позиции
}
void delay(unsigned long ms)
{delay(7,200,000UL)
}
for(pos = 180; pos>=1; pos-=1) { // сервопривод поворачивается от 180 до 0 с шагом 1 градус
myservo.write(pos); // скажите сервоприводу перейти в положение с переменной
delay(15); // ждет 15 мс сервопривод для достижения нужной позиции
}
}
@Cole0075, 👍0
Обсуждение1 ответ
void delay(unsigned long ms)
{delay(7,200,000UL)
}
Это потерпит неудачу во многих отношениях. Во-первых, вы не ставите запятые внутри чисел в C ++. Выражение 7,200,000 будет равно 7, а не 7200000.
Во-вторых, ваша функция "delay" вызывает "delay", которая является рекурсивной. Поэтому задержка
будет вызывать задержку
, которая вызывает задержку
и так далее, пока у вас не закончится стековая память.
Из комментария:
7200,000UL фактически оценивается в 0UL. Не то чтобы это имело большое значение... ;-) – Эдгар Боне
Позвольте мне объяснить, почему я это написал. Я не мог вспомнить, будет ли он оцениваться как 7 или 0, поэтому я написал небольшую тестовую программу:
#include <stdio.h>
int main ()
{
unsigned long a;
a = 7,200,000;
printf ("a = %lu\n", a);
return 0;
}
Это действительно печатает 7, отсюда и мой ответ.
Он также дает предупреждения:
test.cpp: In function ‘int main()’:
test.cpp:5:13: warning: right operand of comma operator has no effect [-Wunused-value]
a = 7,200,000;
^~~
test.cpp:5:16: warning: right operand of comma operator has no effect [-Wunused-value]
a = 7,200,000;
^
Заключение скобок вокруг назначенного выражения изменяет результат:
#include <stdio.h>
int main ()
{
unsigned long a;
a = (7,200,000);
printf ("a = %lu\n", a);
return 0;
}
Теперь он печатает 0, и я получаю предупреждения:
test.cpp: In function ‘int main()’:
test.cpp:5:10: warning: left operand of comma operator has no effect [-Wunused-value]
a = (7,200,000);
^~~
test.cpp:5:14: warning: right operand of comma operator has no effect [-Wunused-value]
a = (7,200,000);
^~~
Конечно, в том контексте, в котором он действительно использовался:
delay(7,200,000UL)
Вы получите сообщение об ошибке:
too many arguments to function 'void delay(long unsigned int)'
Плюс, конечно, должна быть конечная точка с запятой, поэтому строка должна выглядеть так:
delay(7200000);
UL не нужен, потому что компилятор видит, что эта константа должна быть больше int .
7,200,000UL
на самом деле оценивается как `0UL'. Не то чтобы это имело большое значение ... ;-), @Edgar Bonet
В контексте, в котором он использовался, он даже не будет компилироваться: * слишком много аргументов для функции 'void delay(long unsigned int)'*, @Nick Gammon
@EdgarBonet Смотрите мой исправленный ответ., @Nick Gammon
- Tower Pro MG996R сервопривод с высоким крутящим моментом 180 °, управляющий с помощью Arduino
- Как заставить сервопривод вращаться на угол больше 180°
- Пповорот сервопривода на 90 градусов
- Как синхронно управлять двумя сервоприводами?
- Ошибка "Servo" does not name a type
- Библиотека плавного сервоуправления
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
Это не вопрос. Смотрите [Как задать хороший вопрос для стека Arduino Exchange](https://arduino.meta.stackexchange.com/questions/2523/how-to-ask-a-good-question-for-arduino-stack-exchange). Я исправил форматирование кода для вас. Теперь вам нужно сказать: ** что вы хотите, чтобы произошло ** и ** что происходит на самом деле **., @Nick Gammon