Multi-Sensor Stepper Control System — Arduino Uno simulation

Multi-component system featuring a stepper motor, encoder, joystick, sensors, and displays connected to an Arduino UNO.

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by telmomartins2000.

Components

Sketch code

// #include <NewPing.h>
// #include <Stepper.h>
#include <Button.h>
#include <Encoder.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "lock.h"

const int PIN_PUSHBTN = 8;
const int PIN_ENC_CK = 7;
const int PIN_ENC_DT = A2;
const int PIN_ENC_SW = A3;
const int PIN_TEMPERATURE = 9;
const int PIN_SERVO_PWM = 10;


class Knob {
  Encoder enc;
  Button btn;
  int _prev = 0;
  int _curr = 0;
  bool _pressed = false;
  public:
  Knob(Encoder encoder, Button button): enc(encoder), btn(button) {}

  void init() {
    btn.begin();
  }

  void update() {
    int v = enc.read();
    _prev = _curr;
    _curr = v;

    _pressed = btn.pressed();
  }

  int direction() {
    if (_curr > _prev) return 1;
    if (_prev > _curr) return -1;
    return 0;
  }

  int position() {
    return _curr;
  }

  bool pressed() {
    return _pressed;
  }
};


//int pin_joy_x = A1;
//int pin_joy_y = A0;
//int pin_trigger = 11;
//int pin_echo = 12;
//int max_distance = 30;

//NewPing sonar(pin_trigger, pin_echo, max_distance);
//DFRobot_RGBLCD1602 lcd(0x6B, 16, 2);

Button push_btn(PIN_PUSHBTN);
OneWire oneWire(PIN_TEMPERATURE);
DallasTemperature temp_sensors(&oneWire);

Lock lock(PIN_SERVO_PWM);
Knob knob(Encoder(PIN_ENC_CK, PIN_ENC_DT), Button(PIN_ENC_SW));

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(115200);
  knob.init();
  push_btn.begin();

  temp_sensors.begin();
  lock.init();

  lcd.init();
  lcd.backlight();
  lcd.clear();

  //pinMode(pin_joy_x, INPUT);
  //pinMode(pin_joy_y, INPUT);
  //pinMode(13, OUTPUT);

}

int prev = 0;
void loop() {
  lock.update();
  knob.update();
  
  temp_sensors.requestTemperatures();
  float temp = temp_sensors.getTempCByIndex(0);



  //int x = analogRead(pin_joy_x);
  //int angle = map(x, 0, 1023, 0, 180);
  //servo.write(angle);

  // unsigned int distance = sonar.ping_cm();

  // Serial.println(distance);

}