Pages: [1]   Go Down
Author Topic: Proyecto controlar varias salidas a la vez  (Read 2054 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas,

antes de nada decir que me esta costando programar en C, ya que estoy acostumbrado a programar automatas en leguaje KOP al ser mas parecidos a esquemas electricos lo entiendo mejor. Ahora os dejo mi duda:

Para empezar quiero controlar varias entradas y salidas, 3 entradas digitales y 3 salidas digitales. Ademas dos de esas entradas me gustaria poder temporizarlas para que se activen 8h al dia.

He intentado escribir el codigo pero no se como hacer bloques dentro del programa para diferenciar cada accion, a ver si alguien puede guiarme un poco.

Un saludo
Logged

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

Aqui os dejo la forma que pense para hacerlo, no se si estara bien diseñado.

Quote
int E_calentador = 2;                 // Entrada Calentador conectado al pin digital 2
int S_calentador = 3;                 // Salida Calentador conectado al pin digital 3
int E_bomba = 4;                      // Entrada bomba conectado al pin digital 4
int S_bomba = 5;                      // Salida bomba conectado al pin digital 5
int E_luz = 6;                        // Entrada luz conectado al pin digital 6
int S_luz = 7;                        // Salida luz conectado al pin digital 7


void setup()
{
  pinMode(E_calentador, INPUT);       //configura el pin del calentador como entrada
  pinMode(S_calentador, OUTPUT);      //configura el pin del calentador como salida
  pinMode(E_bomba, INPUT);            //configura el pin de la comba como entrada
  pinMode(S_bomba, OUTPUT);           //configura el pin de la bomba como salida
  pinMode(E_luz, INPUT);              //configura el pin de la luz como entrada
  pinMode(S_luz, OUTPUT);             //configura el pin de la luz como salida
}

void loop(){
 
 {
  // ***** Encender el calentador modo manual *****
  if (E_calentador = HIGH);           
  {
    digitalWrite(S_calentador, HIGH);
  } 
 }
 
 {
  // ***** Apagar el calentador modo manual *****
  if (E_calentador = LOW);           
  {
    digitalWrite(S_calentador, LOW);
  } 
 }
 
 {
  // ***** Encender bomba modo manual *****
  if (E_bomba = HIGH);           
  {
    digitalWrite(S_bomba, HIGH);
  } 
 }
 
 {
  // ***** Encender bomba modo manual *****
  if (E_bomba = LOW);           
  {
    digitalWrite(S_bomba, LOW);
  } 
 }
 
 {
  // ***** Encender luz modo manual *****
  if (E_luz = HIGH);           
  {
    digitalWrite(S_luz, HIGH);
  } 
 }
 
 {
  // ***** Apagar luz modo manual *****
  if (E_luz = LOW);           
  {
    digitalWrite(S_luz, LOW);
  } 
 }
 
}

« Last Edit: July 14, 2012, 05:51:21 am by galo » Logged

Málaga, Spain
Offline Offline
Edison Member
*
Karma: 41
Posts: 2182
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

pues el proyecto lo llevas bien encarrilado. Supongo que lo que quieres hacer que la salida siga a la entrada.

Para eso, simplemente:

Code:
int E_calentador = 2;                 // Entrada Calentador conectado al pin digital 2
int S_calentador = 3;                 // Salida Calentador conectado al pin digital 3
int E_bomba = 4;                      // Entrada bomba conectado al pin digital 4
int S_bomba = 5;                      // Salida bomba conectado al pin digital 5
int E_luz = 6;                        // Entrada luz conectado al pin digital 6
int S_luz = 7;                        // Salida luz conectado al pin digital 7


void setup()
{
  pinMode(E_calentador, INPUT);       //configura el pin del calentador como entrada
  pinMode(S_calentador, OUTPUT);      //configura el pin del calentador como salida
  pinMode(E_bomba, INPUT);            //configura el pin de la comba como entrada
  pinMode(S_bomba, OUTPUT);           //configura el pin de la bomba como salida
  pinMode(E_luz, INPUT);              //configura el pin de la luz como entrada
  pinMode(S_luz, OUTPUT);             //configura el pin de la luz como salida
}

void loop()
{
  digitalWrite ( S_calentador, digitalRead ( E_calentador ) );
  digitalWrite ( S_bomba, digitalRead ( E_bomba ) );
  digitalWrite ( S_luz, digitalRead ( E_luz ) );

  delay ( 100 );  // Esperamos 100ms antes de hacer la siguiente lectura
}

Otra forma de declara las constantes que tienes es ponerle el cualificador const delante ya que no se pueden modificar.
También habrás visto la directiva "define", lo que hace es sustituir lo que aparece delante del por lo que aparece detrás:

Code:
#define E_calentador 2                 // Entrada Calentador conectado al pin digital 2
#define S_calentador  3                 // Salida Calentador conectado al pin digital 3
#define E_bomba  4                      // Entrada bomba conectado al pin digital 4
#define S_bomba  5                      // Salida bomba conectado al pin digital 5
#define E_luz  6                        // Entrada luz conectado al pin digital 6
#define S_luz  7                        // Salida luz conectado al pin digital 7
Si sustituyes este código por las declaraciones del principio también va a funcionar.

Por último comentar que en el if, si te fijas, el operador igual lo has definido como una asignación. Es un error muy común. Una buena práctica es poner la constante antes y después la variable.

Por ejemplo:
Code:
  // ***** Apagar el calentador modo manual *****
  if (E_calentador = LOW)               // <---- no te da ningún error
  {
    digitalWrite(S_calentador, LOW);
  }

  if (LOW = E_calentador )               // <---- te da ningún error
  {
    digitalWrite(S_calentador, LOW);
  }

  if (LOW == digitalRead(E_calentador) )               // OK
  {
    digitalWrite(S_calentador, LOW);
  }

Recuerda que tienes que leer de los pines, no de la variable que siempre será el valor que le has dado.

Otro error suele ser poner ";" hasta en la sopa. En este caso, los "ifs" no lo necesitan.

Code:
  if (E_bomba == HIGH);            // <----- Ufff, no hará nada y nunca entrará en la condición,
                                            //si tienes un "else" dará error en el "else"
  {
    digitalWrite(S_bomba, HIGH);
  } 


  if (E_bomba == HIGH)            // OK
  {
    digitalWrite(S_bomba, HIGH);
  } 


  if (HIGH == E_bomba)            // Mejor
  {
    digitalWrite(S_bomba, HIGH);
  } 
En este último ejemplo, estás comprobando la variable E_bomba vale HIGH, no el pin, recuerda.

Espero que the sea de ayuda.
Logged

   

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

Gracias por tus correciones fm, las agradezco un monton ya que como siempre se dice, de los errores se aprende no?? jeje. Esta tarde estuve probando el proyecto en la placa y no funcionaba nada XDD. A ver si siguiendo tus pautas consigo echarlo a andar.

Simplemente lo que quiero hacer es usar usar conmutadores para encender/apagar una bomba, una luz y un calentador. Mas adelante quiero añadir un sensor de temperatura para controlar el calentador automaticamente (en este caso tendria 3 modos, encendido/apagado/automatico) y un temporizador para programar la luz (tambien tendria 3 modos)

No se si se me entiende, pero es lo mas sencillo que se me ocurrio para ademas de practicar darle uso.

PD: ME alegro ver un andaluz por aqui, yo soy de cadiz ;-)

Saludos
Logged

Pages: [1]   Go Up
Jump to: