Simulación_BANCO_Completo — Arduino Mega simulation

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

Components

Sketch code

/*
  ===================================================================
  BANCO DE PRUEBAS ECU - ARDUINO MEGA (ECU SIMULADA - ETAPA 2)
  Entradas de Rotación: CKP (Pin 2), CMP1 (Pin 3), CMP2 (Pin 4)
  ===================================================================
*/

// Entradas de Alimentación desde el Banco
const int PIN_LINEA_30 = A0;  
const int PIN_LINEA_15 = A1;  

// Salidas de Alimentación de Sensores
const int PIN_VREF_OUT     = 7; 
const int PIN_MASA_SEN_OUT = 6; 

// Entradas de Sensores de Rotación (Sincronización con Banco)
const int PIN_CKP_IN  = 2; // Interrupt 0
const int PIN_CMP1_IN = 3; // Interrupt 1
const int PIN_CMP2_IN = 4; // Entrada Digital CMP2

// Salidas hacia Relés
const int PIN_RELE_PRINCIPAL = 30; // Activado por +15
const int PIN_RELE_BOMBA     = 31; // Activado por movimiento CKP

// Salidas hacia Actuadores (Inyectores y Bobinas)
const int injPins[] = {8, 9, 10, 11};   // Inyectores Cil 1, 2, 3, 4
const int ignPins[] = {12, 13, 14, 15}; // Bobinas Cil 1, 2, 3, 4

const int ordenEncendido[] = {0, 2, 3, 1}; // Secuencia de disparo 1-3-4-2

// Variables de Estado Interno
bool ecuOperativa = false;
bool ultimoEstado15 = false;
volatile unsigned long ultimoPulsoCKP = 0;
volatile int conteoDientes = 0;
volatile int pasoSecuencia = 0;
volatile int cilindroActivo = -1;
volatile int pulsoDientesRestantes = 0;
bool motorGirando = false;

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

  // Configuración de Alimentación
  pinMode(PIN_LINEA_30, INPUT);
  pinMode(PIN_LINEA_15, INPUT);

  // Configuración de Alimentación de Sensores
  pinMode(PIN_VREF_OUT, OUTPUT);
  pinMode(PIN_MASA_SEN_OUT, OUTPUT);
  digitalWrite(PIN_VREF_OUT, LOW);
  digitalWrite(PIN_MASA_SEN_OUT, HIGH);

  // Configuración de Entradas CKP / CMP
  pinMode(PIN_CKP_IN, INPUT_PULLUP);
  pinMode(PIN_CMP1_IN, INPUT_PULLUP);
  pinMode(PIN_CMP2_IN, INPUT_PULLUP);

  // Configuración de Relés
  pinMode(PIN_RELE_PRINCIPAL, OUTPUT);
  pinMode(PIN_RELE_BOMBA, OUTPUT);
  digitalWrite(PIN_RELE_PRINCIPAL, LOW);
  digitalWrite(PIN_RELE_BOMBA, LOW);

  // Configuración de Salidas de Potencia
  for (int i = 0; i < 4; i++) {
    pinMode(injPins[i], OUTPUT);
    pinMode(ignPins[i], OUTPUT);
    digitalWrite(injPins[i], LOW);
    digitalWrite(ignPins[i], LOW);
  }

  // Interrupción en flanco de subida para la señal CKP (Pin 2)
  attachInterrupt(digitalPinToInterrupt(PIN_CKP_IN), isrProcesarCKP, RISING);

  Serial.println(F("=================================================="));
  Serial.println(F("   ECU SIMULADA (MEGA) - CMP2 ASIGNADO AL PIN 4   "));
  Serial.println(F("=================================================="));
}

void loop() {
  float v30 = analogRead(PIN_LINEA_30) * 5.0 / 1023.0;
  float v15 = analogRead(PIN_LINEA_15) * 5.0 / 1023.0;

  bool switch15Activo = (v15 >= 2.5);
  bool bateriaPresente = (v30 >= 2.5);

  // Lógica de Ignición (+15)
  if (switch15Activo != ultimoEstado15) {
    ultimoEstado15 = switch15Activo;

    if (bateriaPresente && switch15Activo) 

More projects by albertoarangurenp