Взял примеры с "Изучаем Arduino от AlexGyver" : джойстик и шаговый двигатель.
Все работает:
Решил Все что касается ШД перенести в stepper5 : (создал cpp и h)
получилось:
planner не видится :
error: 'GPlanner' does not name a type
'planner' was not declared in this scope
Как его правильно подключить?
В чем ошибка?
как обращаться к
GPlanner<STEPPER2WIRE, 2> planner; - описанном в главном скетче
из stepper5.cpp ?
Все работает:
начальный скетч:
// пример с записанным в памяти маршрутом
int path[][2] = { {10, 10}, {100, 5}, {200, 200}, {150, 150}, {0, 0}, {0, 50}, };
int nodeAmount = sizeof(path) / 4; // количество точек (пусть компилятор сам считает) как вес всего массива / (2+2) байта
#include "GyverPlanner.h"
Stepper<STEPPER2WIRE> stepper1(8, 9);
Stepper<STEPPER2WIRE> stepper2(5, 6);
GPlanner<STEPPER2WIRE, 2> planner;
#define J_VRX 0
#include <GyverJoy.h>
GyverJoy jx(J_VRX); // джойстик на пине 1
void setup() {
Serial.begin(115200);
// добавляем шаговики на оси
planner.addStepper(0, stepper1); // ось 0
planner.addStepper(1, stepper2); // ось 1
// устанавливаем ускорение и скорость
planner.setAcceleration(100);
planner.setMaxSpeed(300);
jx.calibrate(); // калибровка нуля при запуске
jx.deadzone(30); // мёртвая зона
}
//int count = 0; // счётчик точек маршрута
void loop() {
// здесь происходит движение моторов, вызывать как можно чаще
planner.tick();
// вернёт true, если все моторы доехали
if (planner.ready()) {
// Chagaem();
if (count < nodeAmount) { // ограничиваем на количество точек, чтобы не бахнуло
planner.setTarget(path[count]); // загружаем новую точку (начнётся с 0)
count++;
}
}
// тикер опрашивает АЦП по своему таймеру
if (jx.tick()) {
// выводим значение
Serial.println(jx.value());
}
}
получилось:
начальный скетч- измененный:
#include "stepper5.h"
//// пример с записанным в памяти маршрутом
//int path[][2] = { {10, 10}, {100, 5}, {200, 200}, {150, 150}, {0, 0}, {0, 50}, };
//int nodeAmount = sizeof(path) / 4; // количество точек (пусть компилятор сам считает) как вес всего массива / (2+2) байта
#include "GyverPlanner.h"
Stepper<STEPPER2WIRE> stepper1(8, 9);
Stepper<STEPPER2WIRE> stepper2(5, 6);
GPlanner<STEPPER2WIRE, 2> planner;
#define J_VRX 0
#include <GyverJoy.h>
GyverJoy jx(J_VRX); // джойстик на пине 1
void setup() {
Serial.begin(115200);
// добавляем шаговики на оси
planner.addStepper(0, stepper1); // ось 0
planner.addStepper(1, stepper2); // ось 1
// устанавливаем ускорение и скорость
planner.setAcceleration(100);
planner.setMaxSpeed(300);
jx.calibrate(); // калибровка нуля при запуске
jx.deadzone(30); // мёртвая зона
}
//int count = 0; // счётчик точек маршрута
void loop() {
// здесь происходит движение моторов, вызывать как можно чаще
planner.tick();
// вернёт true, если все моторы доехали
if (planner.ready()) {
Chagaem();
// if (count < nodeAmount) { // ограничиваем на количество точек, чтобы не бахнуло
// planner.setTarget(path[count]); // загружаем новую точку (начнётся с 0)
// count++;
// }
}
// тикер опрашивает АЦП по своему таймеру
if (jx.tick()) {
// выводим значение
Serial.println(jx.value());
}
}
stepper5.h:
#pragma once
// Указывает компилятору, что данный файл нужно подключить только один раз.
#include <Arduino.h>
extern GPlanner<STEPPER2WIRE, 2> planner;
void Chagaem();
stepper5.cpp:
#include "stepper5.h"
// пример с записанным в памяти маршрутом
int path[][2] = { {10, 10}, {100, 5}, {200, 200}, {150, 150}, {0, 0}, {0, 50}, };
int nodeAmount = sizeof(path) / 4; // количество точек (пусть компилятор сам считает) как вес всего массива / (2+2) байта
int count = 0; // счётчик точек маршрута
void Chagaem() {
if (count < nodeAmount) { // ограничиваем на количество точек, чтобы не бахнуло
planner.setTarget(path[count]); // загружаем новую точку (начнётся с 0)
count++;
}
}
error: 'GPlanner' does not name a type
'planner' was not declared in this scope
Как его правильно подключить?
В чем ошибка?
как обращаться к
GPlanner<STEPPER2WIRE, 2> planner; - описанном в главном скетче
из stepper5.cpp ?