Как использовать функцию карты

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);}

, 👍0

Обсуждение

Это выглядит смутно разумно. Я думаю, вам нужно найти способ четко написать полный код в вопросе, чтобы получить полезную помощь., @Mark Smith

Вопрос действительно не имеет смысла. Лучше всего опубликуйте то, что у вас есть, и мы постараемся увидеть проблему., @Mark Smith

https://www.tutorialspoint.com/cplusplus/cpp_if_else_statement.htm, @MichaelT


1 ответ


1

Похоже, вы используете контакт 10, чтобы указать, на какой угол поворачивается сервопривод: 180 градусов или 90 градусов. Это верно? Тогда вам понадобятся операторы if/else только для выбора одного из двух вызовов «map()». Я вижу несколько проблем:

  1. Ваш отступ предполагает, что вы попытались выбрать 3 оператора с помощью «если», но «если» относится только к одному следующему оператору или блоку операторов. Если вы хотите, чтобы он управлял блоком операторов, вам необходимо заключить эти операторы в фигурные скобки: '{' и '}'.

  2. В этом случае вам нужно, чтобы все, кроме вызовов 'map', находилось вне операторов 'if'.

  3. Операторы (за исключением самих операторов 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 и ваших спецификациях. Выше были две ошибки:

  1. Я пропустил аргумент «val» в одной из команд карты. Это вызывает ошибку компиляции и должно помешать вам протестировать ее. Он не мог работать ни правильно, ни неправильно.

  2. В вашем примере кода 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