Probador Actuadores — Arduino Uno simulation

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

Components

Sketch code

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

// --- PINES DE ENTRADA ---
const int potDuty    = A0;
const int potHz      = A1;
const int btnAvanzar = 2;
const int btnSelec   = 3;
const int btnRetro   = 4;

// --- PINES ETAPA IAC 4 PINES (A4988) ---
const int pinStep   = 8;
const int pinDir    = 9;
const int pinEnable = 10;

// --- PINES ETAPA PWM (MOSFETS 2P/3P) ---
const int pinPWM1 = 5;
const int pinPWM2 = 6;

// --- ESTADOS Y NAVEGACIÓN ---
int modoActual = 0; // 0: IAC 4 Pines | 1: IAC 2P/3P PWM
bool enMenuModo = false;
bool modoAuto = false;

// Variables Antirrebote y Temporización
unsigned long lastDebounceTimeSelec = 0;
unsigned long btnSelecPressTime = 0;
const unsigned long debounceDelay = 200;

int dirAuto = HIGH;
int pasosAutoContador = 0;
unsigned long lastCycleTime = 0;
int dutyAuto = 10;
int dirBarrido = 1;

// Variables para PWM por Software / Frecuencia
unsigned long lastPwmPeriod = 0;

void setup() {
  pinMode(btnAvanzar, INPUT_PULLUP);
  pinMode(btnSelec, INPUT_PULLUP);
  pinMode(btnRetro, INPUT_PULLUP);

  // Configuración A4988
  pinMode(pinStep, OUTPUT);
  pinMode(pinDir, OUTPUT);
  pinMode(pinEnable, OUTPUT);
  digitalWrite(pinEnable, LOW);

  // Configuración PWM
  pinMode(pinPWM1, OUTPUT);
  pinMode(pinPWM2, OUTPUT);
  // Al usar optoacoplador inversor, HIGH en Arduino = MOSFET APAGADO
  digitalWrite(pinPWM1, HIGH);
  digitalWrite(pinPWM2, HIGH);

  Wire.begin();
  lcd.begin(16, 2);
  lcd.backlight();

  lcd.setCursor(0, 0);
  lcd.print("BANCO ACTUADORES");
  lcd.setCursor(0, 1);
  lcd.print("INICIANDO...");
  delay(1000);
  lcd.clear();
}

void loop() {
  int stAvanzar = digitalRead(btnAvanzar);
  int stSelec   = digitalRead(btnSelec);
  int stRetro   = digitalRead(btnRetro);

  // --- NAVEGACIÓN DE MENÚ ---
  if (stSelec == LOW) {
    if (btnSelecPressTime == 0) btnSelecPressTime = millis();
    if (millis() - btnSelecPressTime > 800 && (millis() - lastDebounceTimeSelec > 400)) {
      enMenuModo = !enMenuModo;
      modoAuto = false;
      apagarTodasLasSalidas();
      lastDebounceTimeSelec = millis();
    }
  } else {
    if (btnSelecPressTime > 0 && (millis() - btnSelecPressTime < 800) && (millis() - lastDebounceTimeSelec > debounceDelay)) {
      if (!enMenuModo) {
        modoAuto = !modoAuto;
      }
      lastDebounceTimeSelec = millis();
    }
    btnSelecPressTime = 0;
  }

  // --- MENÚ DE SELECCIÓN DE MODO ---
  if (enMenuModo) {
    lcd.setCursor(0, 0);
    lcd.print("SELECCIONE MODO:");
    
    if (stAvanzar == LOW) { modoActual = 0; delay(150); }
    if (stRetro == LOW)   { modoActual = 1; delay(150); }

    lcd.setCursor(0, 1);
    if (modoActual == 0) {
      lcd.print("> 1. IAC 4 PINES ");
    } else {
      lcd.print("> 2. IAC 2P/3P PWM");
    }
    return;
  }

  // --- EJECUCIÓN DE MODO ---
  if (modoActual == 0) {
    ejecutarModoIAC4Pines(stAvanzar, stRetro);
  } else {
    ejecutarModoPWM();
  }
}

// -----------------------------------------------------

More projects by albertoarangurenp