Arduino PID для маятника пропеллера для горизонтальной балансировки

в этом хобби-проекте, который я настроил, используется энкодер, чтобы сделать ручку на 90 градусов, что соответствует 1500 шагам (0 градусов = идеально горизонтально с использованием ПИД-управления). Мой код счетчика кодировщика взят из видео здесь, и я протестировал его, и он работает. на отлично. Так как этот энкодер 1200 шагов/об. это означало бы, что для поворота на 90 градусов требуется 300 шагов. Исходное положение моего энкодера показано на диаграмме ниже, которая является начальной начальной точкой в 1200 шагов. Могу ли я узнать код Arduino, чтобы сбалансировать джойстик на 90 градусов или идеально горизонтально с использованием PID? Я также проверил, что при увеличении ШИМ вентилятор увеличивает скорость вращения вентилятора, который будет вращаться по часовой стрелке :). Ниже я прикрепил код счетчика энкодера и проверил, что весь код PID должен быть помещен в оператор IF, чтобы счетчик работал правильно и не пропускал никаких шагов.

Спасибо за чтение и хорошего дня.

volatile unsigned int temp, counter = 0; //Эта переменная будет увеличиваться или уменьшаться в зависимости от вращения энкодера
int speed=0;
void setup() {
  Serial.begin (9600);
  pinMode(2, INPUT_PULLUP); 
  pinMode(3, INPUT_PULLUP); 
  attachInterrupt(0, ai0, RISING);
  attachInterrupt(1, ai1, RISING);  
  }

  
  void loop() {
  if( counter != temp )
  {
    temp = counter;    // Каждый код для PID должен быть помещен внутри этого оператора IF, чтобы счетчик не пропускал шаги.
    
  }
  }
   
  void ai0() {if(digitalRead(3)==LOW) {counter++;}else{counter--;}}
  void ai1() {if(digitalRead(2)==LOW) {counter--;}else{counter++;}}   

, 👍-2

Обсуждение

Извините, но чтобы дать вам код, нам нужно его написать, а мы не являемся бесплатной службой написания кода. В своем последнем вопросе об этом вы разместили код для этого проекта, с той лишь разницей, что в коде использовался потенциометр. Так почему бы не использовать этот код и не заменить код потенциометра кодом вашего энкодера?, @chrisl