Encender y apagar un led 3 veces al pulsar un pulsador

Hola buenas tengo un problema necesito que al pulsador un pilsador un led se encienda y se apage 3 veces (3 impulsos) e estado mirando por internet pero solo encuentro que lo haga desde el pc y asi no me vale, alguna idea sobre el codigo? la mec√°nica la tengo toda, pulsador, resistencias y el arduino uno.

Gracias :wink:

"la mec√°nica la tengo toda, pulsador, resistencias y el arduino uno."

Pues entonces solo te falta esto

http://www.zonamaker.com/descargas/Manual-Arduino.pdf

Para terminar tu trabajo escolar

Puse led por poner un ejemplo pero en realidad es un relé que tiene que arrancar una maquinita y esta necesita 3 impulsos para arrancar ya que el antiguo arranque se rompió y pregunté como podia repararlo y e dijeron que lo hiciese con arduino pero ... no tengo ni idea del tema me podrias decir mas o menos como seria?

B√°sicamente, puedes usar los ejemplos de blink y button, incluidos en el IDE de arduino, modific√°ndolos para que hagan lo que quieres.

La base, sería un if, que al detectar la pulsación, haga la secuencia, que puede hacerse también con un bucle for, y pueden usarse delays, ya que si solo tiene que hacer eso, no es necesario complicarlo más con millis y cosas así.

M√≠rate los ejemplos. Usar arduino, es f√°cil, pero hay que leer un poco la documentaci√≥n y los ejemplos. M√°s arriba, tambi√©n te han puesto un peque√Īo manual. Mira de hacer el c√≥digo inicial y si te quedas atascado, ponlo aqu√≠, usando el tag "code" y podremos ayudarte a corregirlo, ya que si te lo hacemos todo nosotros, no aprender√°s a hacerlo por tu cuenta, y siempre depender√°s de los dem√°s para hacer cosas.

Veré a ver que hago ...

Parpadea a lo loco pero no se acerca a lo que quiero hacer el pulsador esta de adorno porque no consigo que haga nada.

const int buttonPin = 2;   
const int ledPin =  13;      

int buttonState = 0;       

void setup() {
  
  pinMode(ledPin, OUTPUT); 
  pinMode(buttonPin, INPUT);
}

void loop() {
  
    buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {        
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    digitalWrite(ledPin, LOW); 
  }
  
  for(int x=3; x<10; x++)
  
  digitalWrite(ledPin, HIGH);  
  delay(1000);             
  digitalWrite(ledPin, LOW);   
  delay(1000);            
}

El código se ve mas o menos bien. Necesitas revisar tu boton.

Agrega una librería para leer adecuadamente el boton. Y agrega una resistencia a tierra. Para q cuando no este presionado, tenga una referencia a 0v y no se este leyendo un estado raro.

Tu ciclo for de encendido y apagado… Va debajo del if boton encendido. De otra manera el LED se encendara y apagara casa vez q el loop se ejecute(todo el tiempo),

If(boton ==encendido)
{
For(x=3; x<10, x++)

{Secuencia de encendido y apagado,}
}

AlexLPD:
El código se ve mas o menos bien. Necesitas revisar tu boton.

Agrega una librería para leer adecuadamente el boton. Y agrega una resistencia a tierra. Para q cuando no este presionado, tenga una referencia a 0v y no se este leyendo un estado raro.

Tu ciclo for de encendido y apagado… Va debajo del if boton encendido. De otra manera el LED se encendara y apagara casa vez q el loop se ejecute(todo el tiempo),

If(boton ==encendido)

{
For(x=3; x<10, x++)

{Secuencia de encendido y apagado,}
}

Una cosa asi? No quiero que el loop se repita todo el tiempo solo quiero que cada vez que pulse de 3 se√Īales.

const int buttonPin = 2;   
const int ledPin =  13;      

int buttonState = 0;       

void setup() {
  
  pinMode(ledPin, OUTPUT); 
  pinMode(buttonPin, INPUT);
}

void loop() {
  
    buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH)      
    {
      for(x=3; x<10, x++)
      
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    digitalWrite(ledPin, LOW); 
  }
  
  digitalWrite(ledPin, HIGH);  
  delay(500);             
  digitalWrite(ledPin, LOW);   
  delay(500);            
}

No no no.....

Mira el if esta bien...
Luego que es lo que quieres hacer cada vez q se oprima el boton?

Encender y apagar el LED... Dd por eso q el ciclo completo for va ah√≠ dentro. La instrucci√≥n for, es un contador que va a repetir algo el n√ļmero de veces que tu digas, en este caso hasta q x =10.

Lo que tu quieres hacer es encender y apagar el LED tres veces nasa mas. Puedes hacerlo.

If(button == encendido)
{
DigitalWrite(LED, high)
Delay(500)
Digitalwrite(LED,Low)
Delay.... Etc....

De esa manera.... El LED encendera y apagara tres veces solo cuando hayas oprimido el boton.

Si dejas las instrucciones digital write y eso en el loop.... Se van a repetir siempre. Por que el loop es lo que hace el arduibo todo el tiemp . Si se detuviera el procesador no leerla botones ni haría nada.

-Alex

Cada vez que le de al botón quiero que se encienda 3 veces el led (en realidad será un relé pero si funciona con el led lo hará con el relé cuando lo ponga) Como dejarias tu el código completo? ahora introduzco mas cosas y me saltan errores con los dichosos corchetes.

  if (buttonState == HIGH)      {
       for(x=3; x<10, x++)
          digitalWrite(ledPin, HIGH);  // Esto ejectuta 3 HIGH en ledPin que nunca cambia o sea que no es lo que quieres
  } 
  else {
    digitalWrite(ledPin, LOW); 
  }

Esto funciona asi, cuando buttonState esta en 1, ejecuta 3 Salidas simultaneas en 1 en el pin LedPin, o sea que lo ves como un 1no largo de 3 instrucciones, algunos microsegundos
Cada vez que el pulsador no es presionado ledPin se mantiene en 0.
Luego ejecuta lo que tienes al final del programa
Que es

digitalWrite(ledPin, HIGH);  
  delay(500);             
  digitalWrite(ledPin, LOW);   
  delay(500);

O sea no hace lo que buscas.

Lo que pones al final debe estar dentro de tu condición cuando se presiona el botón.
Si quieres que se ejecute 3 veces lo pones dentro del for. Dale un delay solo pa

Bueno, has escrito un código, pero sin entender qué has escrito.

Vamos por partes. Quieres que el código, haga algo, cuando el botón está en high. Para ello, recuerda poner una resistencia pull down en la entrada del pulsador.
Si no quieres que haga nada al soltar el pulsador, toda la parte del else, sobra, y todo lo que esté fuera del if, también.

Vamos a por for. Con ese bucle for, consigues 7 parpadeos, no 3. ¬ŅPor que?. Inicializas a un valor de 3, y haces que se repita hasta que x sea menor que 10, con incrementos de uno en uno, con el x++, de forma que se repetir√° todo lo que has metido en el for, desde que x=3, hasta que x=9, o sea, 7 veces.

El código tendría que quedar una cosa así:

const int buttonPin = 2;
const int ledPin =  13;
int buttonState = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {
    for (int x = 0; x < 3; x++) {
      digitalWrite(ledPin, HIGH);
      delay(1000);
      digitalWrite(ledPin, LOW);
      delay(1000);
    }
  }
}

Este código, solo ejecuta el bucle for, cuando se pulsa el botón. El bucle for, se repite, desde que x=0 hasta que x=2, o sea, 3 veces.
No es necesario un antirebote del pulsador, ya que los delays del bucle for, cumplen de sobra con esa función.

Si no quieres poner la resistencia pulldown, una variante del código podría ser esta:

const int buttonPin = 2;
const int ledPin =  13;
int buttonState = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  buttonState = digitalRead(buttonPin);

  if (buttonState == LOW) {
    for (int x = 0; x < 3; x++) {
      digitalWrite(ledPin, HIGH);
      delay(1000);
      digitalWrite(ledPin, LOW);
      delay(1000);
    }
  }
}

Con este código, conectaríamos un pin del pulsador al pin 2 y el otro a masa.

Otra sugerencia, es que si vas a poner un rele, no uses el pin 13, ya que este pin parpadea al encender el arduino o hacerle uh reset.

Ya esta hecho.