#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Stepper.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
// Stepper motor setup
const int stepsPerRevolution = 200; // Change this depending on your motor's specification
const int stepPin = 2;
const int dirPin = 3;
Stepper myStepper(stepsPerRevolution, dirPin, stepPin);
// Variable to keep track of the step count
int stepCount = 0;
void setup() {
// Initialize OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Initialize stepper motor
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
myStepper.setSpeed(60); // Set the speed at 60 rpm
}
void loop() {
// Rotate Stepper Motor
display.clearDisplay();
display.setCursor(0,0);
display.println(F("Rotating Motor"));
display.display();
myStepper.step(stepsPerRevolution); // Turn one revolution
stepCount += stepsPerRevolution; // Update step count
// Display step count
display.clearDisplay();
display.setCursor(0,0);
display.print(F("Steps: "));
display.println(stepCount);
display.display();
delay(1000);
// Change Direction
digitalWrite(dirPin, !digitalRead(dirPin)); // Reverse direction
myStepper.step(stepsPerRevolution); // Turn one revolution in the other direction
stepCount += stepsPerRevolution; // Update step count
// Display updated step count
display.clearDisplay();
display.setCursor(0,0);
display.print(F("Steps: "));
display.println(stepCount);
display.display();
delay(1000);
}