Primer proyecto: señal SOS. No me va...

Hola a todos. Aprovecho para presentarme y para presentar mi primer proyecto. Mi nombre es Ernesto y soy profesor de instituto... de música :cold_sweat: Me gusta e interesa mucho el mundo de la electrónica, aunque soy totalmente novato (bueno, alguna chapucilla he hecho, pero muy sencillitas siempre). Mi compañero de tecnología ha comprado unas placas Arduino para emplearlas el curso que viene en el insti y me ha dejado una para que vaya probando y podamos poner cosillas en común entre los dos.

Tras haber instalado los controladores y el programa en el PC, y haber instalado uno de los sketch de prueba y ver que hay buena comunicación PC-tarjeta, he creado un sketch muy sencillito de prueba, pero no consigo que me funcione... Si alguien me pudiera echar una mano, me sería de gran ayuda para ir aprendiendo. El programa es muy simple: led conectado al Pin 13 y pulsador conectado al pin7. Cuando presionamos el pulsador, se supone que comienza una rutina de parpadeos: 3 cortos, 3 largos y 3 cortos (SOS en el código Morse). Se hace una pausa de 1 segundo y se repite indefinidamente. Les dejo el código por si alguien puede decirme cuál (o cuáles) es el fallo (o fallos). Muchas gracias.

/* Esta sencilla rutina consiste en que, si presionamos un pulsador,
el led parpadeará lanzando una señal de S.O.S.
según el código Morse (3 señales cortas, 3 largas y otras 3 cortas).
Tras un segundo de espera, se vuelve a lrepetir la rutina.
*/

int ledPin = 13; //led conectado al pin 13.
int buttonPin = 7; //pulsador conectado al pin 7.

void setup ()
{
pinMode (ledPin, OUTPUT); //pin del led configurado como salida.
pinMode (buttonPin, INPUT); //pin del pulsador configurado como entrada.
}

void loop ()
{
digitalRead (buttonPin); //se lee el estado del pulsador.

if (buttonPin == HIGH) //si el pulsador se presiona, se lanza la rutina.
{
digitalWrite (ledPin, HIGH); // el pin se enciende 80 ms.
delay (80);
digitalWrite (ledPin, LOW); // el pin se apaga 100 ms. La rutina sigue con 3 señales cortas, 3 largas y 3 cortas.
delay (100);
digitalWrite (ledPin, HIGH);
delay (80);
digitalWrite (ledPin, LOW);
delay (100);
digitalWrite (ledPin, HIGH);
delay (80);
digitalWrite (ledPin, LOW);
delay (100);
digitalWrite (ledPin, HIGH);
delay (600);
digitalWrite (ledPin, LOW);
delay (100);
digitalWrite (ledPin, HIGH);
delay (600);
digitalWrite (ledPin, LOW);
delay (100);
digitalWrite (ledPin, HIGH);
delay (600);
digitalWrite (ledPin, LOW);
delay (100);
digitalWrite (ledPin, HIGH);
delay (80);
digitalWrite (ledPin, LOW);
delay (100);
digitalWrite (ledPin, HIGH);
delay (80);
digitalWrite (ledPin, LOW);
delay (100);
digitalWrite (ledPin, HIGH);
delay (80);
digitalWrite (ledPin, LOW);
delay (1000);
}

else //si el pulsador no se presiona, el led sigue apagado.
{
digitalWrite (ledPin, LOW);
}
}

P.D: si alguien puede decirme cómo se puede insertar el código con sus colores, tal y como aparece en Arduino, le estaría muy agradecido :slight_smile:

Hola.
A tu primera pregunta, decirte que estás comparando if(7==HIGH), ya que buttonpin=7. Puedes ahorrarte la línea y aprovechar la anterior, poniendo if(digitalread(buttonPin)==HIGH), o bien almacenar en una variable int el estado de buttonPin y comparar esa variable, estilo estadoPin==digitalread(buttonPin); if (estadoPin==HIGH)....

En cuanto a tu segunda pregunta, para pegar código copiado desde el IDE de Arduino, hazlo pulsando en el editor del foro la almohadilla, y pegando el código entre las etiquetas de apertura y cierre de code.
Saludos

solo por probar,
cambia

if (buttonPin == HIGH)

por

if (buttonPin == LOW)

a ver que pasa.

Gracias a a,nos por las respuestas, mañana lo pruebo y comento. Buenas noches :wink:

Solo tienes que ponerlo así
if (digitalRead(buttonPin) == HIGH)

Además, aparte del pulsador a 5v, tb debes poner una resistencia 4k7 conectando el pin7 a masa.

Jopapa
www.jopapa.me

Gracias por las respuestas, os cuento:

Haciendo el arreglo en el código que me habéis comentado tanto Noter como Jopapa, ya consigo que funcione, pero me lo hace "al revés", es decir, la luz parpadea y se apaga si mantengo el pulsador presionado (creo que es problema del pulsador, buscaré otro. O a lo mejor es porque no tengo la resistencia que conecta el pin 7 a masa... ¿Qué función tendría esta resistencia?).

Comentar que el pulsador lo he conectado de la siguiente manera: un cable al pin 7 y el otro al GND, donde está también la patilla del LED. ¿Es correcto? Muchas gracias y perdonad por mi pesadez.

El pin 7 lo tienes que conectar a los 5V a través del pulsador y la resistencia al pin 7 y a masa.
La resistencia hace que te asegures que al no pulsar, el pin 7 esta en nivel bajo, si no queda "indefinido" y dar resultados aleatorios.

Jopapa
www.jopapa.me

Gracias, Jopapa, ahora me queda todo mucho más claro. Buscaré mañana la resistencia y hago la prueba.