joystick 003 — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by josephkinuthia541.

Components

Sketch code

const int VERT = 35;
const int HOR  = 34;
const int SEL  = 27;

const int CENTER_Y = 2048;
const int CENTER_X = 2048;

const int DEADZONE = 300;

void setup() {
  Serial.begin(115200);

  pinMode(SEL, INPUT_PULLUP);
}

void loop() {

  int vertical = analogRead(VERT);
  int horizontal = analogRead(HOR);

  // Calculate distance from center
  int verticalChange = vertical - CENTER_Y;
  int horizontalChange = horizontal - CENTER_X;

  // Convert vertical movement to percentage
  int verticalPercent =
      map(abs(verticalChange), DEADZONE, 2047, 0, 100);

  // Convert horizontal movement to percentage
  int horizontalPercent =
      map(abs(horizontalChange), DEADZONE, 2047, 0, 100);

  // Keep percentage between 0 and 100
  verticalPercent = constrain(verticalPercent, 0, 100);
  horizontalPercent = constrain(horizontalPercent, 0, 100);

  // Determine vertical direction
  if (verticalChange > DEADZONE) {
    Serial.print("DOWN  ");
    Serial.print(verticalPercent);
    Serial.println("%");
  }
  else if (verticalChange < -DEADZONE) {
    Serial.print("UP    ");
    Serial.print(verticalPercent);
    Serial.println("%");
  }
  else {
    Serial.println("VERTICAL CENTER");
  }

  // Determine horizontal direction
  if (horizontalChange > DEADZONE) {
    Serial.print("RIGHT ");
    Serial.print(horizontalPercent);
    Serial.println("%");
  }
  else if (horizontalChange < -DEADZONE) {
    Serial.print("LEFT  ");
    Serial.print(horizontalPercent);
    Serial.println("%");
  }
  else {
    Serial.println("HORIZONTAL CENTER");
  }

  Serial.println("----------------");

  delay(200);
}

More projects by josephkinuthia541