Базовое управление самолетом на Arduino

У меня есть задача, в которой мне нужно управлять тягой самолета и направлением высоты (вверх-вниз). Для тяги я подумал об использовании двигателя постоянного тока и сервопривода. Управление сервоприводом будет осуществляться с помощью кнопок, а значение тяги будет передаваться через последовательный порт. (Это не проект реального автомобиля, мне нужно только написать код, остальное — воображаемое.)

Я написал следующий код. Хотелось бы спросить, есть ли какие-то недостатки и как можно дальше улучшить? Заранее спасибо. С уважением...

#include <Servo.h>
  Servo servo1;
  int pos = 0;
  const int buttonSUP = 2;
  const int buttonSDOWN = 3;

  int buttonStateUP = 0;
  int buttonStateDOWN = 0;


  int motorPin = 4;

  void setup() {

  servo1.attach(9);
  pinMode( buttonSUP, INPUT); 
  pinMode( buttonSDOWN, INPUT); 

  pinMode(motorPin, OUTPUT);
    Serial.begin(9600);
    while (! Serial);
    Serial.println("Speed 0 to 255");

  }

  void loop() {
   buttonStateUP =digitalRead(buttonSUP);
   if(buttonStateUP=HIGH){
      servo1.write(90);    
      Serial.println("UP");                            
    } 
    if(buttonStateDOWN=HIGH){
      servo1.write(0); 
     Serial.println("DOWN");  
      }
    else{
        servo1.write(45);
        Serial.println("STABLE");  
        }    

    if (Serial.available())
    {
      int speed = Serial.parseInt();
      if (speed >= 0 && speed <= 255)
      {
        analogWrite(motorPin, speed);
        Serial.println(speed);  
      }
    }

    }

, 👍-1

Обсуждение

У вас отключено форматирование, но оно всегда либо НЕПРАВИЛЬНО, либо СТАБИЛЬНО?, @Paul

Я подумал, что сервопривод сместился на 45 градусов так же, как это "<". Поэтому, повернувшись на 90 градусов, я могу переключиться сверху вниз или наоборот., @E.Canberk


1 ответ


0

while (! Serial); Не требуется, если у вас есть плата с USB-> чипом последовательного моста (например, Arduino Uno)

if(buttonStateDOWN=HIGH){
}

В каждом условии вы использовали = вместо ==. Ваше «условие» фактически присваивает HIGH buttonStateDOWN. Если вы хотите сравнить целые числа, используйте ==.

И судя по вопросу, я думаю, что вы неправильно поняли кнопки скорости (а может и я). Я думаю, они хотят, чтобы вы запрограммировали это так, чтобы при нажатии кнопки или при каждом нажатии кнопки скорость менялась на +1 или -1.

Предполагая, что все остальное работает нормально, может возникнуть проблема с последовательным выводом, поскольку вы просто рассылаете спам-сообщения.

Прочитайте о millis();, он может помочь вам отправлять что-то только каждые x секунд без использования delay(); Здесь

,