Как управлять сервоприводом с последовательным входом в сочетании с потенциометром - PullRequest
1 голос
/ 07 октября 2019

Я хочу управлять сервоприводом с последовательным входом в сочетании с потенциометром. Серво можно контролировать отдельно. Если я комментирую часть кода, такую ​​как последовательный ввод, то я могу управлять сервоприводом через потенциометр. Если я комментирую часть кода потенциометра, то я могу управлять сервоприводом с помощью последовательного входа. Но я хочу управлять комбинацией.

Я уже попробовал следующее: я сделал целое число, чтобы сохранить старое значение, и сделал оператор if, чтобы проверить, было ли изменено старое значение. Конечно, он изменяется, потому что программа всегда считывает измененное значение, которое представляет собой значение потенциометра

Код:

void loop()
{
  controlMeter();
}

void controlMeter()
{
  int potValue = map(analogRead(aiPot), 0, 1023, 0, 180);
  int keyValue = 0;

  if(Serial.available())
  {
    String SkeyValue = Serial.readStringUntil('\n');
    keyValue = SkeyValue.toInt();
    Serial.println("There is something in serial!");
    if (oldValue != keyValue)
    {
      oldValue = keyValue;
      Serial.print("keyValue: ");
      Serial.println(keyValue);
      servo.write(oldValue);
      delay(2000);
    }
  }
  else
  {
    if (oldValue != potValue)
    {
      oldValue = potValue;
      Serial.print("potValue: ");
      Serial.println(potValue);
      servo.write(oldValue);
      delay(2000);
    }
  }
}

Я ожидаю, что если я введу 150, то сервопривод перейдет к 150 и останется на150, но если я изменю это значение с помощью потенциометра на 30, то сервопривод должен перейти к 30 и оставаться там.

Любая помощь будет принята.

1 Ответ

0 голосов
/ 07 октября 2019

Сохраните старое значение потенциометра и серийного номера в отдельных переменных.

Аналоговый вход содержит некоторый шум. Потенциометр следует использовать только в том случае, если изменение больше некоторого порогового значения:

void loop()
{
  controlMeter();
}

int oldValue_Pot = -1;
int oldValue_Ser = -1;

int treshold = 5;

void controlMeter()
{
  int potValue = map(analogRead(aiPot), 0, 1023, 0, 180);
  int keyValue = 0;

  if(Serial.available())
  {
    String SkeyValue = Serial.readStringUntil('\n');
    keyValue = SkeyValue.toInt();
    Serial.println("There is something in serial!");
    if (oldValue_Ser != keyValue)
    {
      oldValue_Ser = keyValue;
      Serial.print("keyValue: ");
      Serial.println(keyValue);
      servo.write(oldValue_Ser);
      delay(2000);
    }
  }
  else
  {
    if (abs(oldValue_Pot - potValue) > treshold)
    {
      oldValue_Pot = potValue;
      Serial.print("potValue: ");
      Serial.println(potValue);
      servo.write(oldValue_Pot);
      delay(2000);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...