#include <TM1637Display.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for SSD1306 display connected using I2C
#define OLED_RESET -1 // Reset pin
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define echoPin 12
#define trigPin 13
#define resetPin 14
#define buzzer 27
float duration;
float distanceInCm;
// long numDisplay=100;
boolean trigUp = false;
boolean trigDown = false;
float counterPushUp = 0;
void setup() {
Serial.begin(115200);
pinMode(buzzer, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(resetPin, INPUT_PULLUP);
// initialize the OLED object
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Don't proceed, loop forever
}
// Clear the buffer.
display.clearDisplay();
// Display Text
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 28);
display.println("Initialising...");
display.display();
delay(2000);
}
void loop() {
if (digitalRead(resetPin) == 0) {
trigUp = false;
trigDown = false;
counterPushUp = 0;
}
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(100);
duration = pulseIn(echoPin, HIGH);
distanceInCm = duration * 0.034 / 2.;
if (distanceInCm > 15 && distanceInCm <= 30) {
trigUp = true;
}
else if (distanceInCm < 10) {
trigDown = true;
}
if (trigUp == true && trigDown == true) {
counterPushUp = counterPushUp + 0.5;
Serial.print("counter = ");
Serial.println(counterPushUp);
trigUp = false;
delay(500);
tone(27, 800, 40);
trigDown = false;
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.print("Push Up: ");
display.println(counterPushUp);
display.setCursor(0, 28);
display.display();
delay(500);
}