colision — ESP32 simulation

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

Components

Sketch code

// ==========================================
// ESP32 B - DETECCION DE COLISION + OLED
// ==========================================

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


// ==========================================
// CONFIGURACION OLED
// ==========================================

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_RESET -1
#define OLED_ADDRESS 0x3C

Adafruit_SSD1306 display(
  SCREEN_WIDTH,
  SCREEN_HEIGHT,
  &Wire,
  OLED_RESET
);


// ==========================================
// PINES ESP32 B
// ==========================================

#define BUS_PIN    4
#define BUTTON_PIN 5
#define LED_PIN    2

// Dato que ESP32 B quiere transmitir
byte datoB = 0b01010101;

#define BIT_US 1000

bool colision = false;


// ==========================================
// FUNCIONES OLED
// ==========================================

void mostrarOLED(String linea1, String linea2 = "", String linea3 = "") {

  display.clearDisplay();

  display.setTextColor(SSD1306_WHITE);

  display.setTextSize(1);

  display.setCursor(0, 0);
  display.println("ESP32 B");

  display.drawLine(
    0, 10,
    127, 10,
    SSD1306_WHITE
  );

  display.setCursor(0, 18);
  display.println(linea1);

  display.setCursor(0, 32);
  display.println(linea2);

  display.setCursor(0, 46);
  display.println(linea3);

  display.display();
}


// ==========================================
// Liberar el bus
// ==========================================

void liberarBus() {

  pinMode(BUS_PIN, INPUT);
}


// ==========================================
// Poner el bus en LOW
// ==========================================

void ponerCero() {

  pinMode(BUS_PIN, OUTPUT);

  digitalWrite(BUS_PIN, LOW);
}


// ==========================================
// Leer bus
// ==========================================

int leerBus() {

  return digitalRead(BUS_PIN);
}


// ==========================================
// Transmitir
// ==========================================

void transmitir(byte dato) {

  colision = false;

  Serial.println();
  Serial.println("==============================");
  Serial.println("ESP32 B");
  Serial.println("Intentando transmitir...");
  Serial.println("==============================");


  // --------------------------------------
  // OLED
  // --------------------------------------

  mostrarOLED(
    "TRANSMITIENDO",
    "Dato: 01010101",
    "Iniciando..."
  );


  for (int i = 7; i >= 0; i--) {

    // --------------------------------------
    // Obtener bit actual
    // --------------------------------------

    int bitActual = (dato >> i) & 1;


    // --------------------------------------
    // Enviar 0
    // --------------------------------------

    if (bitActual == 0) {

      ponerCero();
    }


    // --------------------------------------
    // Enviar 1
    // --------------------------------------

    else {

      liberarBus();
    }


    delayMicroseconds(BIT_US / 2);


   

More projects by pol2z-polocote