#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//Параметры экрана
#define SCREEN_WIDTH 128 // ширину OLED-дисплея в пикселях
#define SCREEN_HEIGHT 64 // Высоту OLED-дисплея в пикселях
#define OLED_RESET -1 // Вывод сброса # (или -1, если используется общий вывод сброса Arduino)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// демо - основные возможности библиотеки
#include "GyverStepper.h"
GStepper<STEPPER2WIRE> stepper(2048, 3, 2);
// мотор с драйвером ULN2003 подключается по порядку пинов, но крайние нужно поменять местами
// то есть у меня подключено D2-IN1, D3-IN2, D4-IN3, D5-IN4, но в программе поменял 5 и 2
// создание объекта
// steps - шагов на один оборот вала (для расчётов с градусами)
// step, dir, pin1, pin2, pin3, pin4 - любые GPIO
// en - пин отключения драйвера, любой GPIO
//GStepper<STEPPER2WIRE> stepper(steps, step, dir); // драйвер step-dir
//GStepper<STEPPER2WIRE> stepper(steps, step, dir, en); // драйвер step-dir + пин enable
//GStepper<STEPPER4WIRE> stepper(steps, pin1, pin2, pin3, pin4); // драйвер 4 пин
//GStepper<STEPPER4WIRE> stepper(steps, pin1, pin2, pin3, pin4, en); // драйвер 4 пин + enable
//GStepper<STEPPER4WIRE_HALF> stepper(steps, pin1, pin2, pin3, pin4); // драйвер 4 пин полушаг
//GStepper<STEPPER4WIRE_HALF> stepper(steps, pin1, pin2, pin3, pin4, en); // драйвер 4 пин полушаг + enable
#define JOYSTICK_PIN A0
#define SPEED_POT_PIN A1 // Потенциометр, подключенный к аналоговому выводу A1 для скорости двигателя
#define SW_PIN 12
int maxSpeed;
int joystickValue;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
pinMode(SW_PIN, INPUT);
// Serial.begin(115200);
// режим поддержания скорости
stepper.setRunMode(KEEP_SPEED);
// можно установить скорость
stepper.setSpeed(120); // в шагах/сек
stepper.setSpeedDeg(80); // в градусах/сек
// режим следования к целевй позиции
stepper.setRunMode(FOLLOW_POS);
// можно установить позицию
stepper.setTarget(-2024); // в шагах
stepper.setTargetDeg(-360); // в градусах
// установка макс. скорости в градусах/сек
stepper.setMaxSpeedDeg(400);
// установка макс. скорости в шагах/сек
stepper.setMaxSpeed(400);
// установка ускорения в градусах/сек/сек
// stepper.setAccelerationDeg(300);
// установка ускорения в шагах/сек/сек
stepper.setAcceleration(1);
// отключать мотор при достижении цели
stepper.autoPower(true);
// включить мотор (если указан пин en)
stepper.enable();
}
void loop() {
runStepper();
// update display only when switcher is ON
if (digitalRead(SW_PIN)) {
updateDisplay();
}
}
void runStepper() {
// просто крутим туды-сюды
// if (!stepper.tick()) {
// static bool dir;
// dir = !dir;
// stepper.setTarget(dir ? -1024 : 1024);
// }
// return;
maxSpeed = map(analogRead(SPEED_POT_PIN), 0, 1023, 0, 1000); // Значение потенциометра для изменения скорости двигателя
joystickValue = analogRead(JOYSTICK_PIN);
stepper.setSpeed(maxSpeed); // Установите частоту вращения двигателя на основе потенциометра
stepper.setMaxSpeed(maxSpeed); // Установите частоту вращения двигателя на основе потенциометра
if (joystickValue > 520 ) {
stepper.setTarget(1000);
} else if (joystickValue < 500) {
stepper.setTarget(-1000);
} else {
stepper.stop();
}
stepper.tick();
}
void updateDisplay() {
// Вывод данных на экран SSD1306
display.clearDisplay();
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(WHITE); // Draw white text
display.setCursor(4,0); // Start at top-left corner
display.println("Speed: 123");
display.println("Joy3k: 123");
display.println("Speed: 123");
display.println("Joy3k: 123");
display.display();
}Loading
ssd1306
ssd1306