Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

#include <SPI.

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

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

const int buttonPin1 = 1; // Button for CW rotation


const int buttonPin2 = 2; // Button for CCW rotation
const int pulsePin = 8;
const int dirPin = 9;
const int pulseInterval = 500 / 120; // 120 pulses per second

unsigned long previousMillis = 0;


bool isPulseActive = false;
int pulseCount = 0;

void setup() {
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(pulsePin, OUTPUT);
pinMode(dirPin, OUTPUT);

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.display();
updateDisplay();
}

void loop() {
if (digitalRead(buttonPin1) == LOW) { // Button 1 pressed for CW rotation
if (!isPulseActive) {
isPulseActive = true;
previousMillis = millis();
digitalWrite(dirPin, HIGH); // Set direction for CW rotation
}

unsigned long currentMillis = millis();


if (currentMillis - previousMillis >= pulseInterval) {
previousMillis = currentMillis;
digitalWrite(pulsePin, HIGH);
delayMicroseconds(100); // Pulse width
digitalWrite(pulsePin, LOW);
pulseCount++;
updateDisplay();
}
} else if (digitalRead(buttonPin2) == LOW) { // Button 2 pressed for CCW rotation
if (!isPulseActive) {
isPulseActive = true;
previousMillis = millis();
digitalWrite(dirPin, LOW); // Set direction for CCW rotation
}

unsigned long currentMillis = millis();


if (currentMillis - previousMillis >= pulseInterval) {
previousMillis = currentMillis;
digitalWrite(pulsePin, HIGH);
delayMicroseconds(100); // Pulse width
digitalWrite(pulsePin, LOW);
pulseCount--;
updateDisplay();
}
} else {
isPulseActive = false;
}
}

void updateDisplay() {
display.clearDisplay();
display.setCursor(0, 0);
display.print("Pulse count: ");
display.println(pulseCount);
display.display();
}

You might also like