Pages: [1]   Go Down
Author Topic: Ayuda novato  (Read 1705 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola , mando un saludo a los miembros de este foro al que me uno.Muchas Gracias a todos de antemano.Me estoy iniciando en arduino utilizó el simulador virtualbreadboard 4.2 .Estoy intentando modificar ejemplos,para soltarme un poco y programa con ayuda de los tutos de este foro.Estoy intentando hacer una secuencia de 3 leds en la que pueda ampliar los tiempos de encendido y apagado de los leds cambiando en 1 segundo mas cada vez que pulso un pulsador .Pero cada vez que intento compilarlo me sale el error "Unexpected end of file. Os pongo el programa para que me aconsejeis.
   
 // blink 3 Leds


    int pin = 2;   //Pulsador entrada 2
   
   const int ledPin = 11;   // LED conectado a pin 11

   const int ledPin1 = 12;   // LED conectado a pin 12
   
   const int ledPin2 = 13;   // LED conectado a pin 13
   
     int variableEntrada;     // Variable para aumentar tiempos
   
   
   //

   void setup()   {               
      // initializa entradas y salidas
      pinMode(pin, INPUT);
      pinMode(ledPin, OUTPUT);
      pinMode(ledPin1, OUTPUT);
      pinMode(ledPin2, OUTPUT);

   }

   // the loop()bucle secuencia

void loop()                     

{
   digitalRead(pin, HIGH)  // Lee pin pulsado
   {
   if (pin == 1)          // si lee 1
   {
      variableEntrada = variableEntrada + 1000;   //Aumenta la variable de tiempo 1seg por pulsacion
      delay(4000);      //Separa la seccion de la variable de tiempo de la secuencia
      digitalWrite(ledPin, HIGH);   // Enciende el primer Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin, LOW);    // Apaga el Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin1, HIGH);   // Enciende el segundo Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin1, LOW);    // Apaga el Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin2, HIGH);   // Enciende el tercer Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin2, LOW);    // Apaga el Led
      delay(variableEntrada);                  // Espera segun sea la variable
      
}
     }




Otro problema  es que no encuentro los pulsador y algunas determinadas para simularlo.Os agradezco vuestra atención.Gracias
Logged

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola cocoludro, bienvenido.

El error te indica que no tiene un final de fichero puesto que has abierto una llave más de las que has cerrado. En concreto te sobra la llave de la línea siguiente a "digitalRead(pin, HIGH)". Por cierto que esa instrucción tampoco está bien, debería darte un error. La instrucción digitalRead sólo admite un parámetro, el número de PIN y te devolverá el estado de ese PIN sobre la variable que quieras. Debes poner algo así:

EstadoPulsador = digitalRead(pin);

El resto en lugar de tantos delay sería mejor que lo hicieras con la función millis(), puedes ver un ejemplo de su uso en el ejemplo del IDE "Blink Without Delay" http://arduino.cc/en/Tutorial/BlinkWithoutDelay

Y para que al pulsar el pulsador (valga la redundancia) sólo te cuente "un paso" (sólo sume 1 segundo) tendrás que hacer una detección del flanco de subida.

A ver si con esto eres capaz de avanzar, con lo que trabajes vuelve a poner tus avances y te explicaré lo que haga falta.
Logged


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

Muchas Gracias voy a intentarlo.
Logged

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

Gracias, ya no me da error, pero no encuentro donde simular el pulsador o donde encontrar un virtualbreadboard mas completo con mas toolbox,tengo el 4.2.7.

 
   
 // blink 3 Leds


    int pin = 2;   //Pulsador entrada 2
   
   const int ledPin = 11;   // LED conectado a pin 11

   const int ledPin1 = 12;   // LED conectado a pin 12
   
   const int ledPin2 = 13;   // LED conectado a pin 13
   
     int variableEntrada;     // Variable para aumentar tiempos
   
   
   //

   void setup()   {                
      // initializa entradas y salidas
      pinMode(pin, INPUT);
      pinMode(ledPin, OUTPUT);
      pinMode(ledPin1, OUTPUT);
      pinMode(ledPin2, OUTPUT);

   }

   // the loop()bucle secuencia

void loop()                    

{
      variableEntrada = digitalRead(2);  // Lee pin pulsado y almacena
   {
      variableEntrada = variableEntrada + 1000;   //Aumenta la variable de tiempo 1seg por pulsacion
      delay(4000);      //Separa la seccion de la variable de tiempo de la secuencia
      digitalWrite(ledPin, HIGH);   // Enciende el primer Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin, LOW);    // Apaga el Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin1, HIGH);   // Enciende el segundo Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin1, LOW);    // Apaga el Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin2, HIGH);   // Enciende el tercer Led
      delay(variableEntrada);                  // Espera segun sea la variable
      digitalWrite(ledPin2, LOW);    // Apaga el Led
      delay(variableEntrada);                  // Espera segun sea la variable
      
}
     }
   
   
      
   
      Thanks.
 
« Last Edit: July 05, 2012, 05:18:36 am by cocoludro » Logged

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La variable "variableEntrada" la estás usando ahora para dos cosas, el pin del pulsador y el tiempo, debes declarar una variable para cada cosa.
Puedes empezar el código haciéndolo para un sólo led y con delays, así te será más sencillo. Después lo podemos ampliar usando millis() y a tres leds.
Perdona pero ahora no tengo tiempo de explicártelo más detenidamente.
Logged


Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A lo que llamas variableEntrada yo lo llamaría algo como TiempoLEDon. Para poder sumar un tiempo determinado al tiempo de encendido de los LED cada vez que activas el pulsador tienes que declarar las variables EstadoPulsador y EstadoAnteriorPulsador.

En el loop pseudocódigo:

EstadoPulsador = digitalRead(2);
Si EstadoPulsador == HIGH y EstadoAnteriorPulsador == LOW entonces sumo un tiempo a TiempoLEDon
EstadoAnteriorPulsador = EstadoPulsador

Podrías hacer lo mismo con otro pulsador para bajar el tiempo
A continuación enciendes los LED según el ejemplo "Blink Without Delay" http://arduino.cc/en/Tutorial/BlinkWithoutDelay
Logged


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

Para soltarme un poco con los contadores he puesto este ejemplo que encontre en la red
/*
 ---------------------------------------------
  Contador de pulsos
 ---------------------------------------------
 
  Programa que muestra por pantalla (consola serial) el número
   de veces que el pulsador ha sido presionado, se realiza un
   proceso que de acuerdo al número de pulsaciones se enciende
   un LED,
 
 Cosas de Mecatrónica y Tienda de Robótica
 
*/
 
//--------------------------------------------------
//Declara puertos de entradas y salidas y variables
//--------------------------------------------------
int conta = 0;  //Variable para guardar el conteo de los pulsos
 
//------------------------------------
//Funcion principal
//------------------------------------
void setup() // Se ejecuta cada vez que el Arduino se inicia
{
  Serial.begin(9600);   //Inicia comunicación serial
  pinMode(2,INPUT);     //Configura el pin 2 como una entrada, pulsador
  pinMode(13,OUTPUT);   //Configura el pin 13 como una salida, LED
}
 
//------------------------------------
//Funcion ciclicla
//------------------------------------
void loop() // Esta funcion se mantiene ejecutando
{           //  cuando este energizado el Arduino
 
  // Si el pulsador esta oprimido
  if ( digitalRead(2) == HIGH )
  {
      // Si el pulsador no esta oprimido, flanco de bajada
      if ( digitalRead(2) == LOW )
      {
         conta++;               //Incrementa el contador
         Serial.println(conta); //Imprime el valor por consola
         delay (100);           // Retardo
      }
  }
 
  // Si el valor del contador es 5
  if (conta==5)
  {
    digitalWrite(13,HIGH);  //Enciende el LED
  }
 
  // Si el valor del contador es 8
  if (conta==8)
  {
    digitalWrite(13,LOW);  // Apaga el LED
  }
 
}
  Pero al compilarlo me da 2 fallo  == boolean int
Logged

Spain
Offline Offline
Full Member
***
Karma: 0
Posts: 191
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No se de dónde has sacado este último ejemplo, pero aunque te compilase, no te va a funcionar.

No es una forma correcta de detectar el suelte del pulsador, ya que solo detectará pulsación si el paso de alto a bajo se produce justo en el momento en el que el micro pasa entre los dos if, cosa realmente improbable.

En cuanto al fallo de compilación que te da, ¿podrías explicarlo mejor y copiar exactamente el fallo que te da el IDE?

PD: Utiliza la etiqueta/botón INSERT CODE (#) para añadir código a los post, está justo encima del smiley smiley-wink
« Last Edit: July 06, 2012, 06:55:32 am by jorgepl » Logged

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

Exactamente este es el error que me marca virtualbreadboard:
Cannot apply "=="operator  to "boolean" and "int"
Y van referidas a las lineas:
if (digitalRead(2) == HIGH )
if (digitalRead(2) == LOW )
Logged

Pages: [1]   Go Up
Jump to: