Здравствуйте. ребята помогите изменить код под ESP32 , столкнулся с тем что analogWrite не компилируется , у самого не хватает ума переделать ( ну если только хватит на изменение pinMode ) . может что еще нужно поправить .
[spoiler]/*Пример скетча для управления катером через компас
*/
#include <PWMServo.h> // библиотека безконфликтной работы https://yadi.sk/d/Oa5qEXXv3Xvfjk
#include <Wire.h> // библиотека I2C (стандартная)
#include <MechaQMC5883.h> // библиотека компаса https://yadi.sk/d/RF0VF6tA3Xvfjb
#define pwmA 3 // ШИМ правый двигатель
#define Ain2 4 // правый двигатель -
#define Ain1 5 // правый двигатель +
#define Bin1 6 // левый двигатель +
#define Bin2 7 // левый двигатель -
#define pwmB 9 // ШИМ левый двигатель
byte PWM = 255; // устанавливаем значение ШИМ для моторов (регулировка напряжения питания двигателей)
byte angle = 97; // устанавливаем начальный угол сервы, при котором перо руля будет параллельно движению
int vector = 0; // устанавливаем начальный курс для старта, если поставить 0 платформа не тронется до нажатия кнопки D2
MechaQMC5883 qmc; // The CompassLib object
PWMServo servo1;
/* блок функций управления моторами*/
void motor_off() //---Выключить моторы
{
digitalWrite(Ain1, LOW); // выключены ДВА двигателя
digitalWrite(Ain2, LOW); // выключены ДВА двигателя
digitalWrite(Bin1, LOW); // выключены ДВА двигателя
digitalWrite(Bin2, LOW); // выключены ДВА двигателя
analogWrite(pwmA, 0); // на 0% мощности
analogWrite(pwmB, 0); // на 0% мощности
}
void set_forward() //---Полный вперед
{
digitalWrite(Ain1, HIGH); // работают ДВА двигателя
digitalWrite(Ain2, LOW); // работают ДВА двигателя
digitalWrite(Bin1, HIGH); // работают ДВА двигателя
digitalWrite(Bin2, LOW); // работают ДВА двигателя
analogWrite(pwmA, PWM); // на 100% мощности
analogWrite(pwmB, PWM); // на 100% мощности
}
void setup() {
Serial.begin(9600);
Wire.begin();
pinMode(pwmA, OUTPUT); // инициализируем пины для управления двигателями
pinMode(pwmB, OUTPUT); // инициализируем пины для управления двигателями
pinMode(Ain1, OUTPUT); // инициализируем пины для управления двигателями
pinMode(Ain2, OUTPUT); // инициализируем пины для управления двигателями
pinMode(Bin1, OUTPUT); // инициализируем пины для управления двигателями
pinMode(Bin2, OUTPUT); // инициализируем пины для управления двигателями
pinMode(2, INPUT); // назначаем пин кнопки D2
pinMode(13, OUTPUT); // подключаем встроенный светодиод
servo1.attach(SERVO_PIN_B); // назначаем пин D10 сервоприводу
qmc.init(); // инициируем компас
qmc.setMode(Mode_Continuous, ODR_10Hz, RNG_8G, OSR_512); // устанавливаем параметры работы компаса
}
void loop() {
/* блок работы компаса*/
int x, y, z;
qmc.read(&x, &y, &z);
float heading = atan2(y, x);
float declinationAngle = 6.7;// значение магнитного склонения, искать в справочнике для своей местности
heading += declinationAngle;
if (heading < 0)
heading += 2 * PI;
if (heading > 2 * PI)
heading -= 2 * PI;
int azimuth = heading * 180 / M_PI;
/* блок работы кнопки: при нажатии запоминает текущий курс*/
if (vector == 0) { // ждем нажатия кнопки (задаем курс)
motor_off();
}
if (digitalRead(2) == HIGH) {
vector = azimuth;
digitalWrite(13, HIGH);
}
else {
digitalWrite(13, LOW);
}
/*создание переменной для управления моторами */
int g = azimuth - vector; // измеряем величину и направление отклонения от курса
while (g >= 180)
g -= 360;
while (g < -180)
g += 360;
int s = fabs (g) * 2 ; // переменная угла поворота сервы от G
s = constrain(s, 1, 49); // ограничиваем значения S диапазоном поворота руля (49* определен экспериментально)
/* блок управления моторами*/
if (g == 0) {
servo1.write(angle); //---Полный вперед
}
if (g < 0) {
servo1.write(angle + s); //---Установка влево
}
if (g > 0) {
servo1.write(angle - s); //---Установка вправо
}
// блок диагностики работы программы
Serial.print("AZ: ");
Serial.print(azimuth);
Serial.print(" ");
Serial.print("vect: ");
Serial.print(vector);
Serial.print(" ");
Serial.print("G: ");
Serial.print(g);
Serial.print(" ");
Serial.print("S: ");
Serial.print(s);
Serial.print(" ");
Serial.print("angle: ");
Serial.print(servo1.read());
Serial.print(" ");
Serial.println();
delay (500); // задержка цикла
}
[/spoiler]
изменить код под ESP32
-
- Полковник
- Сообщения: 1928
- Зарегистрирован: 28 окт 2015, 22:47
- Откуда: Ленобласть
- Имя: Игорь
- Поблагодарили: 2 раза
изменить код под ESP32
Я не очень в кодах, но вот, как делает Flprog при управлении сервой с аналогового входа.
[spoiler] [/spoiler]
Может что то навеет...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
-
- Рядовой
- Сообщения: 93
- Зарегистрирован: 06 сен 2021, 07:45
- Имя: иван
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
изменить код под ESP32
спасибо за ответ , у меня уже пол года башка кипит от проекта с корабликом , и не хочется из за не правильной запятой пойти по другому пути.
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
изменить код под ESP32
1. На какой выход фактически будет подключен сервопривод?
В скетче имеется "servo1.attach(SERVO_PIN_B); // назначаем пин D10 сервоприводу" - при этом отсутствует строка "#define SERVO_PIN_B 10". Уже какая то лажа.
Используемая в скетче библиотека под ESP32 не подойдет, нужно менять на ESP32Servo.h.
2. На какие аналоговые выхода будут подключены двигатели?
Судя по "pinMode(13, OUTPUT); // подключаем встроенный светодиод" - данный скетч изначально был под Uno или Nano.
А Вы хотите ESP32. analogWrite для ESP32 не работает, там по другому это делается.
Вообще итоговая схема устройства, после замены процессора, есть?
Конкретно что за плата ESP32 будет использоваться, куда будет подключена серва, какие аналоговые и цифровые выхода и под что будут задействованы.
В идеале нужна просто таблица входов/выходов.
Да сам скетч какой то недоделанный.
1. Функция "void set_forward() //---Полный вперед" - есть, а ее вызов отсутствует.
2. В секции loop, в части "/* блок работы компаса*/" и "/*создание переменной для управления моторами */" присутствуют объявления переменных, хотя переменные должны объявляться в секции Declare.
Похоже что эти блоки раньше были функциями а сейчас код из них перенесен в loop. Зачем?
Это еще не рабочий проект, заготовка? Я правильно понял?
-
- Рядовой
- Сообщения: 93
- Зарегистрирован: 06 сен 2021, 07:45
- Имя: иван
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
изменить код под ESP32
взял от сюда ""Управление компасом (моторы + сервопривод)""
https://lihoy-lj.livejournal.com/831.html
всякую фигню гуглю вот и нашел статейку по теме , какие пины будут это пофиг их можно изменить , но если скетч недоделаный то наверное не стоит заморачиваться .
https://lihoy-lj.livejournal.com/831.html
всякую фигню гуглю вот и нашел статейку по теме , какие пины будут это пофиг их можно изменить , но если скетч недоделаный то наверное не стоит заморачиваться .
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость