Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Meta en 17 Noviembre 2015, 16:06 pm



Título: Se repite el mensaje de salida
Publicado por: Meta en 17 Noviembre 2015, 16:06 pm
Hola:

Hice un código de prueba sobre encender y apagar un Led 13 con Arduino UNO r3, con un pulsador en entrada digital número 8. Este es su código.

Código:
int estadoBoton=0; // Guardará el estado del botón HIGH o LOW.
char caracter;
String comando;

void setup()
{
  pinMode(13,OUTPUT); // Donde está el Led 13.
  pinMode(8,INPUT); // Entrada digital donde está el pulsador.
  Serial.begin(115200);
}

void loop()
{
    estadoBoton=digitalRead(8); // Leer entrada digital número 8.
    // Si el pulsador está pulsado, se enciende el Led 13 y
    // envía comando HIGH por el puerto serie.
 if (estadoBoton == HIGH)
    {
      digitalWrite(13,HIGH);
      Serial.println("HIGH");
    }
 // De lo contrario, Led 13 epagado y envía LOW al puerto serie.
 else
    {
      digitalWrite(13,LOW);
      Serial.println("LOW");
    }
}


He intentado hacer la misma función pero sigue con el mismo problema de enviar mensajes a lo loco como si fuera un bucle.

Código:
int estadoBoton=0; // Guardará el estado del botón HIGH o LOW.
char caracter;
String comando;

void setup()
{
  pinMode(13,OUTPUT); // Donde está el Led 13.
  pinMode(8,INPUT); // Entrada digital donde está el pulsador.
  Serial.begin(115200);
}

void loop()
{
    estadoBoton=digitalRead(8); // Leer entrada digital número 8.
    // Si el pulsador está pulsado, se enciende el Led 13 y
    // envía comando HIGH por el puerto serie.
     
    switch (estadoBoton)
{
  case 0:
      digitalWrite(13,HIGH);
      Serial.println("HIGH");
      break;
     
  case 1:
      digitalWrite(13,LOW);
      Serial.println("LOW");     
      break;
      default:
      Serial.println("Error desconocido");
}
}

Para quitar el bucle, hice esto de otra manera pero no funciona nada de nada.
Código:
int estadoBoton=0; // Guardará el estado del botón HIGH o LOW.
char caracter;
String comando;

void setup()
{
  pinMode(13,OUTPUT); // Donde está el Led 13.
  pinMode(8,INPUT); // Entrada digital donde está el pulsador.
  Serial.begin(115200);


     
    switch (estadoBoton)
{
  case 0:
      digitalWrite(13,HIGH);
      Serial.println("HIGH");
      break;
     
  case 1:
      digitalWrite(13,LOW);
      Serial.println("LOW");     
      break;
      default:
      Serial.println("Error desconocido");
}
}

void loop()
{
        estadoBoton=digitalRead(8); // Leer entrada digital número 8.
    // Si el pulsador está pulsado, se enciende el Led 13 y
    // envía comando HIGH por el puerto serie.
}

A parte de encender un Led, no hay ningún problema, si al enviar mensaje de texto como HIGH o LOW de forma muy repetitiva hasta colapsar el otro programa que tengo al recibir mensajes. El otro programa en un ordenador de sobre mesa con Visual Studio 2015.

¿Hay alguna solución?

Un cordial saludo.


Título: Re: Se repite el mensaje de salida
Publicado por: Meta en 20 Noviembre 2015, 07:54 am
Hola

Me respondo a mi mismo.

Código
  1. int estadoBoton=0; // Guardará el estado del botón HIGH o LOW.
  2. char caracter;
  3. String comando;
  4. int flag = 0;
  5.  
  6. void setup()
  7. {
  8.  pinMode(13,OUTPUT); // Donde está el Led 13.
  9.  pinMode(8,INPUT); // Entrada digital donde está el pulsador.
  10.  Serial.begin(115200);
  11. }
  12.  
  13. void loop()
  14. {
  15.    estadoBoton=digitalRead(8); // Leer entrada digital número 8.
  16.    switch (estadoBoton)
  17. {
  18.  case 0:
  19.      if(flag == 1){
  20.      flag= 0;
  21.      digitalWrite(13,HIGH);
  22.      Serial.println("HIGH");
  23.      }
  24.      break;
  25.  
  26.  case 1:
  27.      if(flag == 0){
  28.      flag= 1;
  29.      digitalWrite(13,LOW);
  30.      Serial.println("LOW");
  31.    }
  32.      break;
  33.      default:
  34.      Serial.println("Error desconocido");
  35. }
  36. }

O este otro.
Código
  1. byte estadoBoton = 0; // Guardará el estado del botón HIGH o LOW.
  2. byte estadoBotonAnt = 0;
  3. long lastDebounceTime = 0;
  4. char caracter;
  5. String comando;
  6.  
  7. void setup(){
  8.  pinMode(13,OUTPUT); // Donde está el Led 13.
  9.  pinMode(8,INPUT);   //
  10.  Serial.begin(115200);
  11. }
  12. void loop() {
  13.    estadoBoton = digitalRead(8); // Leer entrada digital número 8.
  14.    // Si el pulsador está pulsado, se enciende el Led 13 y
  15.    // envía comando HIGH por el puerto serie.
  16.  if ((millis() - lastDebounceTime) > 100)
  17.  {
  18.    if (estadoBoton == HIGH && estadoBotonAnt == LOW) {
  19.        digitalWrite(13,HIGH);
  20.        Serial.println("HIGH");
  21.    }
  22.       // De lo contrario, Led 13 epagado y envía LOW al puerto serie.
  23.         if (estadoBoton == LOW && estadoBotonAnt == HIGH) {
  24.      digitalWrite(13,LOW);
  25.      Serial.println("LOW");   // sin el agregado de este if tendrian cientos de LOW en el MOnitor Serie
  26.    }
  27.    estadoBotonAnt = estadoBoton;
  28.  }
  29. }

Saludos, ;)