Hola buenas, soy nuevo en el foro, y quisiera pedir ayuda con un código que encontré.
Resulta que el codigo se le asigna una frecuencia de trabajo y en un pin de salida.
La cuestion es que no entiendo muy buen como funciona, ya que quiero variar tanto la frecuencia de trabajo, como cambien el tiempo del pulso, para controlar dos inyectores, primero uno y luego otro, como lo aria un coche de 4 cilindros, el punto aquí es que solo se le conecta un potenciómetro que actua como ajustador de frecuencia. y si asigno una frecuencia de 1, la mitad del ciclo se queda encendido, y la otra mitad apagado, asi que no me conviene para hacer una simulación de caudal ni mucho menos de consumo, asi que lo ideal seria controlar en ancho de ese pulso y con los datos de caudal del inyector poder dar un estimado de cantidad de inyeccion y
asi que mi pregunta es si alguien sabe como hacer esto, de controlar ambas cosas a la ves,
Dejo el codigo por si gustan revisarlo, Gracias.
#define NUMONDAS 4
int mode[NUMONDAS] = { HIGH, HIGH, HIGH, HIGH };
unsigned long previousMilis[NUMONDAS] = {0, 0, 0, 0};
void setup(){
// InitTimersSafe();
Serial.begin(9600);
//Serial.println();
// pinMode(0,INPUT);
// pinMode(1,INPUT);
// pinMode(2,INPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
void loop(){
frecuencia(5, 9, 1); //fec, pin, identificador
// frecuencia(20, 11, 2);
// frecuencia(30, 12, 3);
}
void frecuencia(float frecIn, byte pin, byte idx) //Frecuencia, pin de salida, identificador
{
int potenciometro = 0;
float seleccion;
float frec,frec1;
int frecf;
int frecf1;
frec=frecIn;
frec=1/frec;
frec=frec*1000;
potenciometro=analogRead(A0);
seleccion=map(potenciometro, 0, 1023, 1, 100);
seleccion=seleccion/100;
frec1=frec*(1-seleccion);
frec=frec*seleccion;
frecf=frec;
frecf1=frec;
unsigned long currentMilis = millis();
unsigned long diff = currentMilis - previousMilis[idx];
float frecDiff;
if (mode[idx] == HIGH) {
frecDiff = frecf;
} else {
frecDiff = frecf1;
}
if (diff >= frecDiff) {
previousMilis[idx] = currentMilis;
digitalWrite(pin, mode[idx]);
if(mode[idx] == HIGH) {
mode[idx] = LOW;
currentMilis;
} else {
mode[idx] = HIGH;
}
}
}