Duda programa

Buenas tardes, estoy con un proyecto de arduino en el que tengo que controlar el ciclo de trabajo de dos mosfets, cada uno tiene la patilla gate conectada a una patilla distinta del arduino.

El caso, es que si en el delay, le introduzco un valor fijo, por ejemplo, delay(0.015), el programa me funciona a la perfección. Pero cuando le introduzco un sensor de tensión para que según la tensión de entrada varié el ciclo e introduzco ese ciclo en el delay (delay(ciclo)) ya no funciona.

Ya he probado, con delayMicroseconds, analogWrite y me sigue dando el mismo fallo.

Alguien podría ayudarme.

Aquí os dejo el código:

int SensorV= A0; //Sensor de tension
int led = 9; //Patilla gate de 1º mosfet
int led2 = 10; //Patilla gate de 2º mosfet
float voltiosG, ciclo;

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  voltiosG=(28 *analogRead(SensorV)/1023.0); //tension
  ciclo= ((14.0/(voltiosG+14.0))*0.02); //ciclo de trabajo, con frecuencia 50khz
  digitalWrite(led, HIGH);   // cerramos el 1º mosfet
  digitalWrite(led2, HIGH);   //cerramos el 2º mosfet
  delay(ciclo); // los mantenemos cerrados el tiempo del ciclo de trabajo que tiene que estar en alto
  digitalWrite(led, LOW);    // abrimos los dos mosfets
  digitalWrite(led2, LOW);   // 
  delay(0.02-ciclo); // resto del ciclo de trabajo que tiene que estar en nivel bajo
}

Muchisimas gracias

Siempre repito lo mismo. Hay que poder monitorizar el valor de las variables. Y eso se hace con el Serial. Mira ahora el código.

int SensorV= A0; //Sensor de tension int led = 9; //Patilla gate de 1º mosfet int led2 = 10; //Patilla gate de 2º mosfet float voltiosG, ciclo;

// the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. Serial.begin(9600); pinMode(led, OUTPUT); pinMode(led2, OUTPUT); }

// the loop routine runs over and over again forever: void loop() { voltiosG=(28 *analogRead(SensorV)/1023.0); //tension ciclo= ((14.0/(voltiosG+14.0))*0.02); //ciclo de trabajo, con frecuencia 50khz digitalWrite(led, HIGH); // cerramos el 1º mosfet digitalWrite(led2, HIGH); //cerramos el 2º mosfet Serial.println(ciclo); delay(1000); delay(ciclo); // los mantenemos cerrados el tiempo del ciclo de trabajo que tiene que estar en alto digitalWrite(led, LOW); // abrimos los dos mosfets digitalWrite(led2, LOW); // delay(0.02-ciclo); // resto del ciclo de trabajo que tiene que estar en nivel bajo }

Abres el monitor serial y podrás ver los valores que toman

Y así para todas las variables sobre las que tengas dudas

Jopapa www.jopapa.me

No funciona porque el valor que se le da a un delay, es del tipo unsigned long, de forma que ese valor, no puede ser del tipo float.

http://arduino.cc/en/Reference/Delay