Ayuda novato

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

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.

Muchas Gracias voy a intentarlo.

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.

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.

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

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

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 ;)

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 )