@gorsvet32

Как прошить микроконтроллер «Esp32» в ARDUINO IDE?

Собираюсь создать Ру самолёт с приемником на основе микроконтроллера ESP32, но как решить проблему - не знаю. Мне необходимо управление двигателем и сервоприводами с этой платы, но я не понимаю что от меня хотят ;)
/*
* Arduino Wireless Communication Tutorial
*       Example 1 - Receiver Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
  #include "esp32-hal-ledc.h"
  #include <ESP32_Servo.h> 

  Servo myservo;  // create servo object to control a servo

  int servoPin = 27; 

//--------Радиомодуль--------
  #include <SPI.h>  // Подключаем библиотеку для работы с SPI-интерфейсом
  #include <nRF24L01.h> // Подключаем файл конфигурации из библиотеки RF24
  #include <RF24.h> // Подключаем библиотеку для работа для работы с модулем NRF24L01
  #define PIN_LED 3  // Номер пина Arduino, к которому подключен светодиод
  #define PIN_CE  4  // Номер пина Arduino, к которому подключен вывод CE радиомодуля
  #define PIN_CSN 5 // Номер пина Arduino, к которому подключен вывод CSN радиомодуля
  RF24 radio(PIN_CE, PIN_CSN); // Создаём объект radio с указанием выводов CE и CSN

  const uint64_t pipeIn = 0xE9E8F0F0E1LL;

  const byte address[6] = "00001";
//-------------------------------------

////------Двигатель------
  int MotorPin1 = 26; //Направление вращения
  int MotorPin2 = 27; //ШИМ
//
//  // переменные для свойств широтно-импульсной модуляции (ШИМ) 1-двигателя:
  const int frequency = 30000;
  const int pwmChannel = 0;
  const int resolution = 8;
  int dutyCycle = 0;
//
////-------------------------------

////--------Сервы------------------
//// переменные для свойств широтно-импульсной модуляции (ШИМ) сервы:
  #define low 1638
  #define high 7864
  #define timer 16

  #define ServoPin1 33
  #define ServoPin2 32 
//-------------------------------



//--------Данные------------------

  int ch_width_1 = 0;
  int ch_width_2 = 0;
  int ch_width_3 = 0;
  int ch_width_4 = 0;


  struct Signal {
  byte throttle;      
  byte pitch;
  byte roll;
  byte yaw;
  };
  
  Signal data;

//--------------------------------

void ResetData()
{
  // Определение начальных значений
  // Среднее положение потенциометров (254/2=127)
  data.throttle = 0; // Motor Stop
  data.pitch = 127;  // Center
  data.roll = 127;   // Center
  data.yaw = 127;   // Center
}

 pinMode(MotorPin1, OUTPUT); // ПРОБЛЕМА ЗДЕСЬ!!
//
void setup() {
  Serial.begin(115200);

  myservo.attach(servoPin, 800, 2300);

//-------Настраиваем радиомодуль-------------
//  pinMode(PIN_LED, OUTPUT); // Настраиваем на выход пин светодиода
  radio.begin();  // Инициализация модуля NRF24L01
  radio.setChannel(5); // Обмен данными будет вестись на пятом канале (2,405 ГГц)
  radio.setDataRate (RF24_1MBPS); // Скорость обмена данными 1 Мбит/сек
  radio.setPALevel(RF24_PA_HIGH); // Выбираем высокую мощность передатчика (-6dBm)
  radio.openReadingPipe (1, pipeIn); // Открываем трубу ID передатчика
  radio.startListening(); // Начинаем прослушивать открываемую трубу
//-------------------------------------------


////-----Настраиваем двигатель-----------
////
 pinMode(MotorPin2, OUTPUT);
//
  digitalWrite(MotorPin1, LOW);
  digitalWrite(MotorPin2, HIGH); 
//
  ledcAttach(pwmChannel, frequency, resolution); // первый двигатель
  ledcAttach(MotorPin2, pwmChannel, 2300); // первый двигатель
//
//  // подаем на контакты ШИМ-сигнал с коэффициентом заполнения «0»:
  ledcWrite(pwmChannel, dutyCycle);
  ledcWrite(pwmChannel, 75);     
////-------------------------------------
  

//-----Настраиваем сервы---------------
  pinMode(ServoPin2, OUTPUT);
  pinMode(ServoPin1, OUTPUT);  
  //Настраиваем ШИМ: 1 канал, 50 Гц, 16-бит
  ledcAttach(3, 50, timer); 
  //1 канал ШИМ подключили к 32 пину
  ledcAttach(ServoPin1, 3, 75);

  //Настраиваем ШИМ: 2 канал, 50 Гц, 16-бит
  ledcAttach(4, 50, timer); 
  //2 канал ШИМ подключили к 33 пину
  ledcAttach(ServoPin2, 4, 75);  

//-------------------------------------
  
}
unsigned long lastRecvTime = 0;

void recvData()
{
  while ( radio.available() ) 
  {
      radio.read(&data, sizeof(Signal));
      lastRecvTime = millis();   // receive the data

      myservo.write( map(data.throttle,0, 253, 0, 180) );       
      
     ledcWrite(pwmChannel, data.throttle );//управление двигателем
    ledcWrite(pwmChannel, map(data.throttle, 0, 255, 0, 255) );
    Serial.println (data.throttle);

      //Пояснение: Сейчас элерон и хвост - находятся на одном джойстике.
                  //Если нужно для удобства раскидать управление на разные
                  //джойстики - то нужно:
                  //выключить строку с data.yaw и включить строку с data.roll
       
      ledcWrite(3, map(data.pitch,    0, 255, low, high) ); //серва1     
      ledcWrite(4, map(data.yaw,     0, 255, low, high)  ); //серва2
//    ledcWrite(4, map(data.roll,     0, 255, low, high)  );                   
  }

}



void loop()
{

  recvData();
  unsigned long now = millis();
  if ( now - lastRecvTime > 1000 ) 
     {
        ResetData(); // Сигнал потерян..Сброс данных
        ESP.restart(); //Перезагрузка при потере связи - для попытки восстановления связи
     }

  ch_width_1 = map(data.throttle, 0, 255, 100, 255);        // двигатель
  ch_width_2 = map(data.pitch,    0, 255, low, high);     // серва1
  ch_width_3 = map(data.roll,     0, 255, low, high);     // серва2
  ledcWrite(3, ch_width_2); 
  ledcWrite(4, ch_width_3); 

}

выдает ошибку в 83 строчке и жалуется на первую скобку, требуя от меня непойми что.
error: expected constructor, destructor, or type conversion before '(' token
   83 |  pinMode(MotorPin1, OUTPUT);
      |         ^

exit status 1

Compilation error: expected constructor, destructor, or type conversion before '(' token
<\code>
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@kalapanga
Прочитайте что-нибудь про структуру программы в среде Ардуино, да и вообще что-нибудь про язык Си прежде чем браться за самолёты.
Перенесите эту строчку внутрь функции setup(). Туда, где у Вас написана аналогичная строчка для MotorPin2.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы