Написать программу для ардуино нано управление сервоприводом по внешним входным сигналам с инверсией на А1 и А2. при включении сервопривод должен находиться в положении 90 градусов, При появлении сигнала с А1 сервопривод должен на время сигнала установить положение 45 градусов и после пропадания вернуться в своё исходное состояние 90 градусов, при появлении сигнала А2 сервопривод должен повернуться на угол 135 градусов, а после пропадания сигнала вернуться на исходное положение 90 градусов.

Вот пример программы для Arduino Nano, которая управляет сервоприводом в соответствии с вашими требованиями. Программа использует библиотеку Servo для управления сервоприводом и считывает сигналы с аналоговых входов A1 и A2.


Объяснение кода:

  • Импорт библиотеки Servo:
    • #include <Servo.h> — подключает библиотеку для управления сервоприводом.
  • Определение пинов:
    • const int signalPinA1 = A1; и const int signalPinA2 = A2; — определяют пины для входных сигналов.
  • Настройка сервопривода:
    • В функции setup() сервопривод подключается к пину 9, и устанавливается начальное положение в 90 градусов.
  • Основной цикл:
    • В функции loop() считываются значения с входов A1 и A2.
    • Если на A1 поступает высокий сигнал, сервопривод устанавливается в положение 45 градусов. После исчезновения сигнала он возвращается в положение 90 градусов.
    • Если на A2 поступает высокий сигнал, сервопривод устанавливается в положение 135 градусов, задерживается на 1 секунду, а затем возвращается в положение 90 градусов.

Примечания:

  • Убедитесь, что у вас правильно подключены сервопривод и питание.
  • При необходимости, вы можете изменить пороговое значение для определения высокого сигнала (в данном случае 512) в зависимости от ваших условий.
#include <Servo.h>

Servo myServo;

const int signalPinA1 = A1;
const int signalPinA2 = A2;

const int threshold = 100;  // Порог для определения нажатия (зависит от АЦП)

int servoPosition = 90; // Исходное положение

void setup() {
  myServo.attach(9);
  myServo.write(servoPosition);
  Serial.begin(9600);  // Для отладки
}

void loop() {
  int signalA1 = analogRead(signalPinA1);
  int signalA2 = analogRead(signalPinA2);

  // Для отладки
  Serial.print("A1: "); Serial.print(signalA1);
  Serial.print("  A2: "); Serial.println(signalA2);

  // Обработка сигнала A1 (инверсия логики)
  if (signalA1 < threshold) {  // сигнал активен, кнопка нажата
    myServo.write(45);
  }
  // Обработка сигнала A2 (инверсия логики)
  else if (signalA2 < threshold) {  // сигнал активен, кнопка нажата
    myServo.write(135);
  }
  else {
    myServo.write(servoPosition);
  }

  delay(100);  // задержка для стабильности
}