Created
December 9, 2019 09:24
-
-
Save IdrisCytron/8a1c767d5436a29cab18cd066ff74751 to your computer and use it in GitHub Desktop.
Control 28BYJ-48 Stepper Motor Using TTGO T-Display ESP32
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Tutorial: Control 28BYJ-48 Stepper Motor Using TTGO T-Display ESP32 | |
Board: | |
- TTGO T-Display ESP32 | |
https://my.cytron.io/p-ttgo-t-display-esp32-1.14-display-module | |
Output: | |
- 12V 28BYJ-48 Stepper Motor | |
https://my.cytron.io/c-motor-and-motor-driver/c-dc-motor/c-stepper-motor/p-12v-28byj-48-stepper-motor-plus-uln2003-driver-board | |
Connection TTGO | Stepper Driver | |
GND | GND | |
27 | IN1 | |
26 | IN2 | |
25 | IN3 | |
33 | IN4 | |
Ext libraries: | |
- TFT_eSPI by Bodmer Version 1.4.16 | |
*/ | |
#include <SPI.h> | |
#include <TFT_eSPI.h> | |
TFT_eSPI tft = TFT_eSPI(); // Resolution 135 x 240 | |
#define FF17 &FreeSans9pt7b | |
#define FF21 &FreeSansBold9pt7b | |
#define ROW1 0,16 | |
#define ROW2 0,38 | |
#define ROW3 0,60 | |
#define ROW4 0,82 | |
#define ROW5 0,104 | |
#define ROW6 0,126 | |
#define BUTTON1 35 | |
#define BUTTON2 0 | |
#define STEPPER_IN1 27 | |
#define STEPPER_IN2 26 | |
#define STEPPER_IN3 25 | |
#define STEPPER_IN4 33 | |
#define REVOLUTION_STEP 2048 // 1 revolution | |
boolean stepperDirection = false; | |
int stepperStep = 0; | |
int stepperStepCount = 0; | |
boolean stepperMove = false; | |
long prevMillisStepper = 0; | |
int intervalStepper = 2; // Minimum is 2, increase for lower speed | |
boolean button1Pressed = false; | |
boolean button2Pressed = false; | |
void setup() | |
{ | |
pinMode(BUTTON1, INPUT_PULLUP); | |
pinMode(BUTTON2, INPUT_PULLUP); | |
pinMode(STEPPER_IN1, OUTPUT); | |
pinMode(STEPPER_IN2, OUTPUT); | |
pinMode(STEPPER_IN3, OUTPUT); | |
pinMode(STEPPER_IN4, OUTPUT); | |
tft.init(); | |
tft.setRotation(1); | |
tft.fillScreen(TFT_BLACK); | |
tft.setFreeFont(FF21); | |
tft.setTextColor(TFT_BLUE); | |
tft.setCursor(ROW1); | |
tft.print("BUTTON1"); | |
tft.setCursor(ROW5); | |
tft.print("BUTTON2"); | |
tft.setFreeFont(FF17); | |
tft.setTextColor(TFT_RED); | |
tft.setCursor(ROW2); | |
tft.print("Clockwise"); | |
tft.setCursor(ROW6); | |
tft.print("Counter Clockwise"); | |
} | |
void loop() | |
{ | |
if (digitalRead(BUTTON1) == LOW && | |
button1Pressed == false) { | |
button1Pressed = true; | |
stepperDirection = false; | |
stepperMove = true; | |
stepperStepCount = 0; | |
stepperStep = 1; | |
} | |
else if (digitalRead(BUTTON1) == HIGH && | |
button1Pressed == true) { | |
button1Pressed = false; | |
} | |
if (digitalRead(BUTTON2) == LOW) { | |
stepperDirection = true; | |
stepperMove = true; | |
stepperStepCount = 0; | |
stepperStep = 1; | |
} | |
else if (digitalRead(BUTTON2) == HIGH && | |
button2Pressed == true) { | |
button2Pressed = false; | |
} | |
if (millis() - prevMillisStepper > intervalStepper) { | |
if (stepperMove == true) { | |
if (stepperDirection) { | |
if (stepperStep++ >= 3) { | |
stepperStep = 0; | |
} | |
} | |
else { | |
if (stepperStep-- == 0) { | |
stepperStep = 3; | |
} | |
} | |
if (stepperStepCount++ == REVOLUTION_STEP) { | |
stepperMove = false; | |
stepperStep = 4; | |
} | |
switch (stepperStep) { | |
case 0: | |
digitalWrite(STEPPER_IN1, HIGH); | |
digitalWrite(STEPPER_IN2, LOW); | |
digitalWrite(STEPPER_IN3, LOW); | |
digitalWrite(STEPPER_IN4, LOW); | |
break; | |
case 1: | |
digitalWrite(STEPPER_IN1, LOW); | |
digitalWrite(STEPPER_IN2, HIGH); | |
digitalWrite(STEPPER_IN3, LOW); | |
digitalWrite(STEPPER_IN4, LOW); | |
break; | |
case 2: | |
digitalWrite(STEPPER_IN1, LOW); | |
digitalWrite(STEPPER_IN2, LOW); | |
digitalWrite(STEPPER_IN3, HIGH); | |
digitalWrite(STEPPER_IN4, LOW); | |
break; | |
case 3: | |
digitalWrite(STEPPER_IN1, LOW); | |
digitalWrite(STEPPER_IN2, LOW); | |
digitalWrite(STEPPER_IN3, LOW); | |
digitalWrite(STEPPER_IN4, HIGH); | |
break; | |
default: | |
digitalWrite(STEPPER_IN1, LOW); | |
digitalWrite(STEPPER_IN2, LOW); | |
digitalWrite(STEPPER_IN3, LOW); | |
digitalWrite(STEPPER_IN4, LOW); | |
break; | |
} | |
} | |
prevMillisStepper = millis(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This code is for inbuilt button in ESP32 if I change pin no. in
#define BUTTON1 35
#define BUTTON2 0
to
#define BUTTON1 34
#define BUTTON2 35
it is not working. How could I resolve it, And how could I add more rotations in it ?