Собираюсь создать Ру самолёт с приемником на основе микроконтроллера 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>