Hola
Mira, segun lo veo en tu codigo, podemos:
Por un lado eliminar la funcion "Prenderled()" que no te hace falta, esa puede ir dentro del "void loop"
Por otro lado tienes si "band==0" que supongo sera la variable del pulsador, (aqui habria que hacer algo para evitar el tema de los rebotes de pulsadores, por las lecturas extras que te puede dar.
En el condicional, pones "if serial available() > 0" {y aqui englobas unas instrucciones} pero tienes puesto que "else" {imrimir contraseña erronea y lectura}
Por el puerto serie lees lo que venga pero que puede ser contra (o sea 1) o cero pero y ¿los retornos de carro o los line feed que puede enviar el serial?
Aparte te imprime tanto si hay "serial available como si no"
Mi consejo: no pongas el condicional en serial available, ponlo en la comprobacion del dato simplemente comprueba si hay datos en el serial, sean los que sean, y si coincide con lo que quieres entonces si imprimes.
A ver si me explico mejor: que la instruccion sea algo asi:
if (Serial.available() > 0)
{
int lectura = Serial.read();
if(lectura==contra)
{
val=digitalRead(ledPin);
if(val==HIGH)
{
digitalWrite(ledPin, LOW);
Serial.println("\n Led apagado");
Serial.println("\nContrasena correcta"); // lo he incluido aqui pero no se si este es contraseña que quieres o no, cambialo a tu gusto
band=0;
Serial.println(lectura);
}
else
{
digitalWrite(ledPin, HIGH);
Serial.println("\n Led prendido");
Serial.println("\nContrasena erronea"); // lo he incluido aqui pero no se si este es contraseña que quieres o no, cambialo a tu gusto
Serial.println(lectura);
}
}
No he comprobado tu codigo, solo he insertado para que veas donde pongo el serial print.
Lo que no se es ¿para que pones \n antes de imprimir el texto?
A ver si mas o menos he podido aclararte lo que queria decirte...
Ya diras....
Un saludo.
PD: Igual el ejemplo del IDE de arduino 1.0.1 de "serialevent" te ayuda un poco:
/*
Serial Event example
When new serial data arrives, this sketch adds it to a String.
When a newline is received, the loop prints the string and
clears it.
A good test for this is to try it with a GPS receiver
that sends out NMEA 0183 sentences.
Created 9 May 2011
by Tom Igoe
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/SerialEvent
*/
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
void setup() {
// initialize serial:
Serial.begin(9600);
// reserve 200 bytes for the inputString:
inputString.reserve(200);
}
void loop() {
// print the string when a newline arrives:
if (stringComplete) {
Serial.println(inputString);
// clear the string:
inputString = "";
stringComplete = false;
}
}
/*
SerialEvent occurs whenever a new data comes in the
hardware serial RX. This routine is run between each
time loop() runs, so using delay inside loop can delay
response. Multiple bytes of data may be available.
*/
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
}