Pages: [1]   Go Down
Author Topic: No hacer loop en programa  (Read 523 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
  }
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!
Logged

Palencia, Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 508
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
  }
}
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 724
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

void loop()
{
}
Logged

Alicante
Offline Offline
Full Member
***
Karma: 0
Posts: 156
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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++"





Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: