kabeltester — Aitewinrobot Esp32C3 Supermini simulation

An interactive Aitewinrobot Esp32C3 Supermini circuit simulation you can run free in your browser on Velxio, by george.

Components

Sketch code

#include <Arduino.h>

const uint8_t A1_PIN = 0;
const uint8_t A2_PIN = 1;

const uint8_t B1_PIN = 6;
const uint8_t B2_PIN = 7;

const uint8_t LED1_PIN = 8;
const uint8_t LED2_PIN = 5;


// Niet-actieve A-lijnen hoogohmig met pull-up
void releaseA() {
  pinMode(A1_PIN, INPUT_PULLUP);
  pinMode(A2_PIN, INPUT_PULLUP);
}


// Meet een ingang meerdere keren.
// Alleen als vrijwel alle samples LOW zijn,
// beschouwen we hem als LOW.
bool stableLow(uint8_t pin) {
  int lowCount = 0;

  for (int i = 0; i < 20; i++) {
    if (digitalRead(pin) == LOW) {
      lowCount++;
    }

    delay(2);
  }

  return lowCount >= 18;
}


void setup() {
  releaseA();

  pinMode(B1_PIN, INPUT_PULLUP);
  pinMode(B2_PIN, INPUT_PULLUP);

  pinMode(LED1_PIN, OUTPUT);
  pinMode(LED2_PIN, OUTPUT);

  digitalWrite(LED1_PIN, LOW);
  digitalWrite(LED2_PIN, LOW);
}


void loop() {

  // ---------------------------------
  // Eerst A1 activeren
  // ---------------------------------

  releaseA();
  delay(10);

  pinMode(A1_PIN, OUTPUT);
  digitalWrite(A1_PIN, LOW);

  delay(50);

  bool A1naarB1 = stableLow(B1_PIN);
  bool A1naarB2 = stableLow(B2_PIN);


  // ---------------------------------
  // Daarna A2 activeren
  // ---------------------------------

  releaseA();
  delay(10);

  pinMode(A2_PIN, OUTPUT);
  digitalWrite(A2_PIN, LOW);

  delay(50);

  bool A2naarB1 = stableLow(B1_PIN);
  bool A2naarB2 = stableLow(B2_PIN);


  releaseA();


  // ---------------------------------
  // Beoordeling
  // ---------------------------------

  // Ader 1 is goed als:
  // A1 uitsluitend op B1 uitkomt.
  bool ok1 =
      A1naarB1 &&
      !A1naarB2 &&
      !A2naarB1;


  // Ader 2 is goed als:
  // A2 uitsluitend op B2 uitkomt.
  bool ok2 =
      A2naarB2 &&
      !A2naarB1 &&
      !A1naarB2;


  // Beide LEDs zijn gewone externe LEDs:
  // HIGH = aan
  digitalWrite(LED1_PIN, ok1 ? HIGH : LOW);
  digitalWrite(LED2_PIN, ok2 ? HIGH : LOW);


  delay(200);
}