Как использовать функцию карты
if(pin10==HIGH)
val=analog.read (potpin);
val=map(val,0,1023,0,180);
servowrite(val);
else
val=map(0,1023,0,90);
servo.write(val);}
@Shanmugaraja, 👍0
Обсуждение1 ответ
Похоже, вы используете контакт 10, чтобы указать, на какой угол поворачивается сервопривод: 180 градусов или 90 градусов. Это верно? Тогда вам понадобятся операторы if/else только для выбора одного из двух вызовов «map()». Я вижу несколько проблем:
Ваш отступ предполагает, что вы попытались выбрать 3 оператора с помощью «если», но «если» относится только к одному следующему оператору или блоку операторов. Если вы хотите, чтобы он управлял блоком операторов, вам необходимо заключить эти операторы в фигурные скобки: '{' и '}'.
В этом случае вам нужно, чтобы все, кроме вызовов 'map', находилось вне операторов 'if'.
Операторы (за исключением самих операторов if и else) должны заканчиваться точкой с запятой.
Думаю, вы хотели написать:
val=analog.read (potpin); // читаем банк
if(pin10==HIGH) // контакт 10 выбирает диапазон сервопривода
val=map(val,0,1023,0,180); // отображаем значение банка ...
else // в один из
val=map(0,1023,0,90); // диапазоны сервопривода
servowrite(val); // управляем сервоприводом
Обновление:
Я перепробовал все, но при включении возникла некоторая тряска и вибрация. если условие выполнено.
Была ли тряска близка к пределу вращения? Большинство сервоприводов, особенно недорогих любительских, становятся нестабильными на каждом конце своего хода. Некоторые плавно доходят до предела, другие начинают трястись в пределах нескольких градусов от предела. Каждый из них немного отличается.
Обновление 2:
Вот полный рабочий пример, основанный на примере сервопривода Arduino и ваших спецификациях. Выше были две ошибки:
Я пропустил аргумент «val» в одной из команд карты. Это вызывает ошибку компиляции и должно помешать вам протестировать ее. Он не мог работать ни правильно, ни неправильно.
В вашем примере кода
if(pin10==HIGH)
не считывает ни один входной контакт! Он просто считывает некоторую (невидимую!) переменную с именем «pin10» — разве вы не прочитали пин в каком-то коде, который нам не показали? Вот почему мы требуем минимум, полный и & проверяемый пример.
Этот код запускает и поворачивает мой сервопривод sg90 на 90 градусов, если на контакте 10 низкий уровень, или на 180 градусов, если на контакте 10 высокий уровень.
Вам понадобится (val,...
во второй функции карты: https://www.arduino.cc/reference/en/language/functions/math/map/ Также, возможно, val = map(val, 0,1023,0,90+90*pin10)
будет достаточно., @Dave X
«Этот код не работает». Пожалуйста, уточните: чего вы ожидали? Что произошло вместо этого? Какой код вы использовали на этот раз? Отредактируйте это в вопрос. "Я использую sg90, были ли какие-нибудь проблемы с этим" - Ничего страшного. sg90 — недорогой, легкий сервопривод, поэтому знайте, что большинство из них будут «дрожать» или трястись в любом конце своего хода. Если вы держите их в диапазоне от 10 до 170 градусов, у вас не должно возникнуть проблем. Или, если вам нужен максимально возможный диапазон, протестируйте каждый из них, чтобы определить его полезные пределы., @JRobert
- Как синхронно управлять двумя сервоприводами?
- Бесполезная проводка коробки и код
- Почему loop() останавливается?
- Почему сервопривод вращается на 360 градусов?
- Как контролировать скорость двухпроводного вентилятора с помощью Arduino и только потенциометра?
- Программирование Сервопривода Как Получить -90 Градусов
- Как вы справляетесь с дрейфом датчиков?
- Почему моя «подсказка настроения» не работает?
Это выглядит смутно разумно. Я думаю, вам нужно найти способ четко написать полный код в вопросе, чтобы получить полезную помощь., @Mark Smith
Вопрос действительно не имеет смысла. Лучше всего опубликуйте то, что у вас есть, и мы постараемся увидеть проблему., @Mark Smith
https://www.tutorialspoint.com/cplusplus/cpp_if_else_statement.htm, @MichaelT