Go Down

Topic: No hacer loop en programa (Read 573 times) previous topic - next topic

erlale

Me estoy iniciando en arduino, con lo que pido disculpas de antemano si la pregunta es tonta, pero estoy harto de buscar y (quizas porque no estoy buscando correctamente) no encuentro la solución.

Estoy con un proyectito muy básico para hacer lo siguiente, quiero que en el arduino esten conectados un motor y un pulsador, y lo que quiero es que la primera vez que pulse el pulsador, se encienda el motor durante un par de segundos, (con los conocimientos aprendidos en el kit de iniciacion....) pero que aunque se vuelva a pulsar o se deje pulsado, no vuelva a encenderse el motor. Osea que solo tenga una "oportunidad para encenderlo" todo me funciona, lo unico que no soy capaz de hacer es que no pas nada la segunda vez que pulso el pulsador y las sucesivas..

os pongo el codigo...

const int button1Pin = 2;  // pin del pulsador
const int motorPin =  9;    // pin del motor



void setup()
{
    pinMode(button1Pin, INPUT);
    pinMode(motorPin, OUTPUT);     
    Serial.begin(9600);
}
void loop()
{
  int button1State;  // variables para que contengan los estados pulsador

  button1State = digitalRead(button1Pin);
   
  if (button1State == LOW)
  {   
  digitalWrite(motorPin, HIGH);
  delay(1000);               
  }
  else
  {
    digitalWrite(motorPin, LOW);
  }
}

erlale

Me contesto yo solo.....

puse al final de la funcion un Delay con variable muy alto


No se si es lo mas ortodoxo pero... ahí va!!

noter

Quizás más ortodoxo sería poner una variable de control:
const int button1Pin = 2;  // pin del pulsador
const int motorPin =  9;    // pin del motor
int pulsado=0; // indica cuántas veces se ha pulsado el botón


void setup()
{
   pinMode(button1Pin, INPUT);
   pinMode(motorPin, OUTPUT);    
   Serial.begin(9600);
}
void loop()
{
 int button1State;  // variables para que contengan los estados pulsador

 button1State = digitalRead(button1Pin);
 
 if (button1State == LOW && pulsado<1) // Si ponemos pulsado<5 permitiría 5 pulsaciones
 {  
 digitalWrite(motorPin, HIGH);
 delay(1000);              
 pulsado++;
 }
 else
 {
   digitalWrite(motorPin, LOW);
 }
}

curro92

Hola,
lo que  desees ejecutar una sola vez lo pones en el setup()
Y el loop lo dejas vacío

void loop()
{
}

Imagina

En este caso, es más sencillo que utilices la opción de "noter", la opción que da "curro92" es totalmente valida, pero para usuarios algo más avanzados, pues tendrías que hacer que el programa se parase en el setup() hasta que alguien pulsase el boton, despues simplemente el programa no haría nada...

erlale

Gracias a los tres por la pronta respuesta,

Note, entiendo bien el condicional que me pones en el If y veo la sintaxis sin problemas, lo que no entiendo es la función que pones debajo de delay "pulsado++"






UndercoverNerd

pulsado++ es lo mismo que pulsado=pulsado+1
simplemente es otra manera de añadir uno a la variable

Go Up