Pages: [1]   Go Down
Author Topic: ¿Es correcto este planteamiento?  (Read 880 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola compañeros,

Os explico un poco: Estoy iniciándome en este mundo del Arduino por un proyectillo que tengo en mente. No sé qué modelo de Arduino sería el más conveniente.

Lo que debe hacer el programa es lo siguiente:
En haber una señal de inicio (pulsador) se enciende un LED y da una primera salida (yo la utilizare para activar un relé). Para la función que debe hacer el relé dejare un margen de 2 segundos la señal activa, antes de desactivarla. Acto seguido, y pasado otro tiempo de reposo, necesito que se active el relé 2, automáticamente, y así sucesivamente.

A continuación les dejo el código que he escrito haber si ven algún fallo o cree que puede funcionar. He intentado utilizar el programa “Virtual Breadboard” para simularlo pero no consigo que el programa me funcione en mi ordenador.

Muchas gracias de antemano.

CODIGO:

int pulsador = 2;       
int led = 13;               
int RELAY1 = 7;         
int RELAY2 = 8;         
int RELAY3 = 9;         
int RELAY4 = 10;         

void setup()
{
   pinMode(pulsador, INPUT);     
   pinMode(led, OUTPUT);   
   pinMode(RELAY1, OUTPUT);     
   pinMode(RELAY2, OUTPUT);
   pinMode(RELAY3, OUTPUT);
   pinMode(RELAY4, OUTPUT);
}

void loop()    
{
             if (digitalRead(pulsador) == HIGH)
   {   
      digitalWrite(led, HIGH);               
      digitalWrite(RELAY1, LOW);   
      delay(2000);                           
      digitalWrite(RELAY1, HIGH);       
      delay(4000);          
      digitalWrite(RELAY2, LOW);         
      delay(2000);                       
      digitalWrite(RELAY2, HIGH);         
      delay(4000);
      digitalWrite(RELAY3, LOW);           
      delay(2000);                         
      digitalWrite(RELAY3, HIGH);         
      delay(4000);
      digitalWrite(RELAY4, LOW
      delay(2000);                         
      digitalWrite(RELAY4, HIGH);         
   }
   
   else
   {      
   digitalWrite(led, LOW); 
   }
}
Logged

COM22
Offline Offline
God Member
*****
Karma: 6
Posts: 702
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

El mejor simulador es el botón de Upload smiley

Así a ojo veo un fallo que te dará error al compilar:

[...]   
      delay(4000);
      digitalWrite(RELAY4, LOW
);
      delay(2000);                         
      digitalWrite(RELAY4, HIGH); 
       
[...]
Logged


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

Ok!! Muchas gracias! El problema es que aún no tengo la placa de Arduino porque no se que modelo se adaptaria mejor a mis necesidades.

Cual me recomendais?

Un saludo,
David.
Logged

Gijon - Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No necesitas la placa para compilar; no obtendrás los resultados reales pero puedes comprobar si hay errores de compilación con el IDE del Arduino o cualquier otro compilador para C++ smiley
« Last Edit: September 19, 2013, 07:18:23 am by davidvg » Logged

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

Según el programa de Arduino no hay error de compilación (una vez puesto el ); que falta tal y como comento JRodrigo).

Ahora bien, ¿Ara lo que necessito? ¿Puedo activar con esta salida el relé? ¿Que placa Arduino necesito?

Logged

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

Para ese sencillo programa te vale cualquier Arduino, ten en cuenta que tan solo utilizas una entrada y 6 salidas.

Para activar según que relé necesitaras algún componente adicional, pero muy poca cosa, eso o compras una PCB de 4 relés que ya lleva todos los componentes soldados.

Un Saludo,
Logged

Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 336
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas, mira si te serviria algo asi:


int Salidas=5;                                   // Numero de salidas
int TiempoSenal=2000;                            // Tiempo que queremos mantener las señales
int PinSalida[]={10,11,12,13,14};                // Pines usados para las salidas
int TiemposEspera[]={1000,1500,2000,2500,3000};  // Tiempos de espera entre disparos
int PinEntrada=5;                                // Pin pulsador inicio
int X;                                           // Auxiliar bucles
boolean Ejecutado=false;                         // Hemos ejecutado ya?

void setup()
{
  pinMode(PinEntrada, INPUT);                    // Establecer el pin del pulsador como entrada
  for (X=0;X<Salidas;X++)                        // 1 por cada salida
  {
    pinMode(PinSalida[X], OUTPUT);               // Establecer el pin como salida         
  }
}

void loop()
{
  if (!Ejecutado)                                // Si no hemos ejecutado
  {
    if (digitalRead(PinEntrada))                 // Si pulsamos boton inicio
    {
      Ejecutado=true;                            // Para que no ejecute de nuevo
      for (X=0;X<Salidas;X++)                    // 1 por cada salida
      {
        digitalWrite(PinSalida[X], HIGH);        // Activar salida
        delay(TiempoSenal);                      // Mantenemos señal el tiempo selecionado
        digitalWrite(PinSalida[X], LOW);         // Desactivar salida       
        delay(TiemposEspera[X]);                 // Esperamos el tiempo selecionado entre salidas     
      }
    }
  }
}
Logged

Pages: [1]   Go Up
Jump to: