Hola amigos... queria consultar si tiene algun sentido, si se gana ram, tiempo o algo, al usar digitalwrite solo en los cambios de estado o si es lo mismo hacer digitalwrite cada vez que hace el loop... intento explicarme mejor con un ejemplo de programa
void loop() {
if (motor == 1 && temp_hambiente() <= corte() ){
motor = 0; }
if (temp_hambiente() >= arranque() ){
motor = 1; }
/* ////////// la pregunta viene aca si conviene usar el if que sigue abajo para hacer digitalwrite solo en
los camgios de estado, o si elimino este if y directamtne hago el digitalwrite y que
cada vez que haga el loop vuevla a "escribir" la salida..///////////////*/
if (motor == 1 && ant_motor == 0){
ant_motor = 1;
digitalWrite (pin_motor, motor)}
}
Te lo va a reescribir sólo una vez. La segunda vez no va a cumplir con la condición del if ya que ant_motor==1
Pablo_Lucini:
Te lo va a reescribir sólo una vez. La segunda vez no va a cumplir con la condición del if ya que ant_motor==1
hola Pablo exacto para eso esta ese if para que lo escriba solo una vez. y la pregunta mia es qeu pasa si saco ese if y que cada vez que haga el loop vuelva a escribir.. cual es la contra? gasto mas tiempo, mas ram. ?
En principio no hay mucha diferencia de tiempos. Con el "if" estás utilizando varias instrucciones, o una si no se cumple la condición, y sinó usas una sola que es la escritura del pin. No sé que tan críticos son los tiempos que disponés pero estamos hablando de microsegundos.
La función digitalWrite es relativamente lenta. Es mucho más rápido usar el if y llamar a digitalWrite solo lo imprescindible. Esa "velocidad" conlleva un ínfimo coste de memoria para poder "recordar" el estado anterior y ver si ha cambiado (recordemos que los Arduinos no suelen ser andar sobrados de memoria).
Normalmente no es preciso tanta velocidad. Así que se puede poner el digitalWrite sin más, aunque se invoque continuamente. Si se desea mucha más velocidad entonces lo recomendable es acceder directamente a los registros del microcontrolador que controlan los pines (Puertos Digitales Arduino Avanzado | Aprendiendo Arduino). Si se usan los registros no hace falta "el truco del if" ya que la operación de escritura en los registros es tan rápida como el if.
El problema del uso de los pines con los registros es que puede hacer más engorroso el mantenimiento, modificación y portabilidad del código.
Nota: para comtemplar los dos valores (0 y 1), con un único if, podría ser así:
if (motor != ant_motor) {
ant_motor = motor;
digitalWrite(pin_motor, motor);
}