es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Arduino: Cómo repetir una tarea hasta que se reciba nuevos datos por Bluetooth.

Estoy tratando de encender y apagar leds en un bucle cuando recibo datos del BT.

Pero cuando envío “r” a través de BT, la tira de LED se enciende y apaga y lo hace en un bucle, pero cuando envío “b” o “g” o “o”, no cambia ni se apaga, sino que sigue dando vueltas en la primera función.

Necesito una forma de detener el “for int” y cambiar a otra función.

todas las funciones necesitan estar siempre en bucle hasta que las cambie a través de BT.

Espero que lo entiendan.

BT = Bluetooth

“`

include "FastLED.h" // biblioteca FastLED.

// Las definiciones fijas no pueden cambiarse sobre la marcha.

define LED_DT 7 // Pin de datos para conectar a la tira.

define COLOR_ORDER GRB // Es GRB para WS2812 y BGR para APA102.

define LED_TYPE WS2812B // Usando APA102, WS2812, WS2801. No olvide cambiar LEDS.addLeds.

define NUM_LEDS 23 // Número de LED's.

struct CRGB leds[NUM_LEDS]; // Inicializar nuestro array de LED.
int val;

void setup() {

Serial.begin(9600); // Inicializar el puerto serie para la depuración.
delay(1000); // Inicio suave para facilitar el flujo de electrones.

LEDS.addLeds<ledtype, leddt,="" colororder="">(leds, NUMLEDS);

}

void loop () {
if (Serial.available())
{
val = Serial.read();

if (val == 'r') // rojo
{
red();
}

if (val == 'g') // verde
{
green();<br />
}

<pre><code>if (val == 'b') // azul
</code></pre>

{
blue();
}
if (val == 'o') //apagado
{
FastLED.clear ();
}

}

}
void red()
{

<pre><code>fill_solid(leds, NUM_LEDS, CRGB::Red);
FastLED.show(); // pantalla de administración de energía
FastLED.delay(1000);
FastLED.clear ();
FastLED.delay(1000);
</code></pre>

}

void green()
{
for(int i = 0; i < 1000; i++)
{
fillsolid(leds, NUMLEDS, CRGB::Green);
FastLED.show(); // pantalla de administración de energía
FastLED.delay(1000);
FastLED.clear ();
FastLED.delay(1000);
}

}

void blue()
{
for(int i = 0; i < 1000; i++)
{
fillsolid(leds, NUMLEDS, CRGB::Blue);
FastLED.show(); // pantalla de administración de energía
FastLED.delay(1000);
FastLED.clear ();
FastLED.delay(1000);
}

}
“`</ledtype,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que necesitas agregar una declaración de break al bucle for en cada una de tus funciones. Esto permitirá que se interrumpa el bucle cuando se cumpla la condición y el programa pasará a la siguiente función. Por ejemplo, en la función red(), podrías agregar la siguiente línea:


    if (val == 'r') {
    break;
    }

    Esto hará que el bucle se interrumpa cuando el valor de val sea 'r', y el programa pasará a la siguiente función. Puedes agregar declaraciones de break similares a las otras funciones también.

Comments are closed.