ESP 32 Nema17 — ESP32-S3 simulation

Проверка шаго шкалы

An interactive ESP32-S3 circuit simulation you can run free in your browser on Velxio, by zdelnik84.

Components

Sketch code

#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// =====================================================
// ESP32-S3 + NEMA17 + A4988 + OLED + ENCODER + LIMIT
// WOKWI VERSION
// =====================================================

// ---------------- OLED ----------------
#define OLED_SDA 17
#define OLED_SCL 18
#define OLED_ADDR 0x3C

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(
  SCREEN_WIDTH,
  SCREEN_HEIGHT,
  &Wire,
  -1
);

// ---------------- A4988 ----------------
#define STEP_PIN 4
#define DIR_PIN  5
#define EN_PIN   6

// ---------------- ENCODER ----------------
#define ENC_CLK 8
#define ENC_DT  9
#define ENC_SW  10

// ---------------- LIMIT SWITCH ----------------
#define LIMIT_PIN 11

// =====================================================
// НАСТРОЙКИ
// =====================================================

// Шагов на один щелчок энкодера
#define STEPS_PER_CLICK 10

// Задержка между шагами
#define MOVE_DELAY 800

// Скорость поиска концевика
#define HOME_DELAY 1200

// Направление поиска нуля
#define HOME_DIRECTION LOW

// Направление движения вперед
#define FORWARD_DIRECTION HIGH

// =====================================================
// ПЕРЕМЕННЫЕ
// =====================================================

long currentPosition = 0;

bool homed = false;

int lastEncoderState;

bool lastButtonState = HIGH;

unsigned long lastButtonTime = 0;

// =====================================================
// ОДИН ШАГ
// =====================================================

void makeStep(bool direction, int stepDelay)
{
  digitalWrite(DIR_PIN, direction);

  digitalWrite(STEP_PIN, HIGH);
  delayMicroseconds(3);

  digitalWrite(STEP_PIN, LOW);
  delayMicroseconds(stepDelay);
}

// =====================================================
// КОНЦЕВИК
// =====================================================

bool limitPressed()
{
  return digitalRead(LIMIT_PIN) == LOW;
}

// =====================================================
// OLED
// =====================================================

void updateDisplay()
{
  display.clearDisplay();

  display.setTextColor(SSD1306_WHITE);

  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("NEMA17 CONTROLLER");

  display.drawLine(0, 12, 127, 12, SSD1306_WHITE);

  display.setCursor(0, 18);

  if (!homed)
  {
    display.println("SEARCH HOME...");
  }
  else
  {
    display.println("READY");
  }

  display.setTextSize(2);
  display.setCursor(0, 36);

  display.print("STEP:");

  display.setCursor(65, 36);
  display.print(currentPosition);

  display.display();
}

// =====================================================
// ПОИСК НУЛЯ
// =====================================================

void findHome()
{
  homed = false;
  currentPosition = 0;

  updateDisplay();

  digitalWrite(EN_PIN, LOW);

  Serial.println("Searching HOME...");

  while (!limitPressed())
  {
    makeStep(HOME_DIRECTION, HOME_DE

More projects by zdelnik84