Pages: [1]   Go Down
Author Topic: Primer proyecto: señal SOS. No me va...  (Read 576 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola a todos. Aprovecho para presentarme y para presentar mi primer proyecto. Mi nombre es Ernesto y soy profesor de instituto... de música  smiley-roll-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  smiley
Logged

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

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
Logged

0
Offline Offline
God Member
*****
Karma: 1
Posts: 524
Arduino inside
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

solo por probar,
cambia

 if (buttonPin == HIGH)

por 

if (buttonPin == LOW)

 a ver que pasa.
Logged

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

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

Alicante (España)
Offline Offline
Full Member
***
Karma: 13
Posts: 233
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

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

Alicante (España)
Offline Offline
Full Member
***
Karma: 13
Posts: 233
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 
Logged

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

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

Pages: [1]   Go Up
Jump to: