Virtual Wire Control

6

Estoy ejecutando Virtual Wire entre dos Arduino y, hasta ahora, he podido enviar personajes y recibirlos por el otro lado.

El problema es, ¿cómo puedo convertir esta 'A' recibida (o lo que sea que envíe) en una acción para operar algunas salidas digitales? (es un circuito de relé configurado como un puente H)

A continuación se muestra el programa receptor de muestra incluido con VirtualWire.

// receiver.pde
//
// Simple example of how to use VirtualWire to receive messages
// Implements a simplex (one-way) receiver with an Rx-B1 module


#include <VirtualWire.h>

int twoPin = 2;     //the two pins to be used to control the relays
int fourPin = 4;

void setup()
{
  pinMode(twoPin, OUTPUT);
  pinMode(fourPIn, OUTPUT);

  Serial.begin(9600);   // Debugging only
  Serial.println("setup");

  // Initialise the IO and ISR
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);    // Bits per sec

  vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(buf, &buflen)) // Non-blocking
  {
    int i;

    digitalWrite(13, true); // Flash a light to show received good message
    // Message with a good checksum received, dump it.
    Serial.print("Got: ");

    for (i = 0; i < buflen; i++)
    {
      Serial.print(buf[i], HEX);
      Serial.print(" ");
    }
    Serial.println("");
    digitalWrite(13, false);
  }
}
    
pregunta antony.trupe

1 respuesta

6

A menos que haya entendido mal la pregunta, debería ser tan simple como extender el código donde se imprime lo que está en el búfer con algunas declaraciones si-entonces. Por ejemplo tu código:

for (i = 0; i < buflen; i++)
{
    Serial.print(buf[i], HEX);
    Serial.print(" ");
}

recorre la cadena recibida y la imprime poco a poco. Si, en cambio, desea saber si recibió una "A", puede usar:

if (buf[0] = "A")
{
  //flip bits here
}

También puedes usar un bloque de cambio de caso para definir varias letras. Hay muchas formas de mejorar este código, incluido el uso de strcmp para que pueda enviar palabras completas y no preocuparse por el caso o las terminaciones, pero es mejor preocuparse por eso una vez que esté fuera del terreno.

Si entendí mal la pregunta, me disculpo. Estaré encantado de volver a intentarlo con más información.

    
respondido por el Lou

Lea otras preguntas en las etiquetas