изменить код под ESP32

Ответить
cfitymrf
Рядовой
Сообщения: 67
Зарегистрирован: 06.09.2021{, 07:45}
Репутация: 3
Имя: иван

изменить код под ESP32

#1

Сообщение cfitymrf » 18.04.2022{, 16:52}

Здравствуйте. ребята помогите изменить код под ESP32 , столкнулся с тем что analogWrite не компилируется , у самого не хватает ума переделать ( ну если только хватит на изменение pinMode ) . может что еще нужно поправить .
СпойлерПоказать
/*Пример скетча для управления катером через компас


*/

#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); // задержка цикла
}




Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

изменить код под ESP32

#2

Сообщение Ingwar » 18.04.2022{, 17:29}

cfitymrf писал(а):
18.04.2022{, 16:52}
может что еще нужно поправить .
Я не очень в кодах, но вот, как делает Flprog при управлении сервой с аналогового входа.
СпойлерПоказать
Безымянный.png
Может что то навеет...
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

cfitymrf
Рядовой
Сообщения: 67
Зарегистрирован: 06.09.2021{, 07:45}
Репутация: 3
Имя: иван

изменить код под ESP32

#3

Сообщение cfitymrf » 18.04.2022{, 17:56}

спасибо за ответ , у меня уже пол года башка кипит от проекта с корабликом , и не хочется из за не правильной запятой пойти по другому пути.

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

изменить код под ESP32

#4

Сообщение Naladchik » 19.04.2022{, 06:08}

cfitymrf писал(а):
18.04.2022{, 16:52}
... изменить код под 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. Зачем?

Это еще не рабочий проект, заготовка? Я правильно понял?
Win10-64. FLProg Portable.
Изображение

cfitymrf
Рядовой
Сообщения: 67
Зарегистрирован: 06.09.2021{, 07:45}
Репутация: 3
Имя: иван

изменить код под ESP32

#5

Сообщение cfitymrf » 19.04.2022{, 19:23}

взял от сюда ""Управление компасом (моторы + сервопривод)""
https://lihoy-lj.livejournal.com/831.html
всякую фигню гуглю вот и нашел статейку по теме , какие пины будут это пофиг их можно изменить , но если скетч недоделаный то наверное не стоит заморачиваться .

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

изменить код под ESP32

#6

Сообщение Naladchik » 20.04.2022{, 06:58}

cfitymrf писал(а):
19.04.2022{, 19:23}
... всякую фигню гуглю ...
:smile171: заметно, ответил в личку.
Win10-64. FLProg Portable.
Изображение

Ответить

Вернуться в «Помогите, а то я "нимагу"»