VirtualWire versturen van een waarde
4 berichten
• Pagina 1 van 1
- guusdikker
- Berichten: 2
- Geregistreerd: 13 Mrt 2016, 12:11
VirtualWire versturen van een waarde
Beste,
Ik ben al een tijdje bezig om uit te zoeken hoe je een waarde kan versturen van de transmitter naar de reciever. Het lukt al wel om "Hallo" te versturen en te ontvangen zodanig dat ik het kan lezen.
Dit is de hardware die ik gebruik: RF 434 Mhz Link Kit (http://www.hackerstore.nl/Artikel/99)
Ik gebruik hiervoor de vrijwel standaard sketch van Mohannad Rawashdeh (http://www.genotronex.com/)
Ik denk dat ik iets moet aanpassen aan deze regel van de transmitter:
const char *msg = "hallo guus gaat ie goed 13-3-2016";
Ik wil dat msg niet alleen een tekst bevat maar ook de waarde van de lichtmeting.
Ik heb al iets bij de reciever aangepast om de teksts leesbaar te maken:
Serial.print(buf[i], char()); // ik heb char() toegevoegd (in plaats van HEX, dat leest wat moeilijker).
Ik heb echter geen idee hoe ik dat moet doen. Ik denk dat er een array gemaakt van moet worden maar hoe weet ik niet. Ik ben slechts een knip en plak programeur.
Wie kan me hier mee helpen?
Hieronder de volledige sketches
Transmitter: (Arduino Duemilanova)
cpp code
Reciever: (Arduino Yun)
cpp code
Ik ben al een tijdje bezig om uit te zoeken hoe je een waarde kan versturen van de transmitter naar de reciever. Het lukt al wel om "Hallo" te versturen en te ontvangen zodanig dat ik het kan lezen.
Dit is de hardware die ik gebruik: RF 434 Mhz Link Kit (http://www.hackerstore.nl/Artikel/99)
Ik gebruik hiervoor de vrijwel standaard sketch van Mohannad Rawashdeh (http://www.genotronex.com/)
Ik denk dat ik iets moet aanpassen aan deze regel van de transmitter:
const char *msg = "hallo guus gaat ie goed 13-3-2016";
Ik wil dat msg niet alleen een tekst bevat maar ook de waarde van de lichtmeting.
Ik heb al iets bij de reciever aangepast om de teksts leesbaar te maken:
Serial.print(buf[i], char()); // ik heb char() toegevoegd (in plaats van HEX, dat leest wat moeilijker).
Ik heb echter geen idee hoe ik dat moet doen. Ik denk dat er een array gemaakt van moet worden maar hoe weet ik niet. Ik ben slechts een knip en plak programeur.
Wie kan me hier mee helpen?
Hieronder de volledige sketches
Transmitter: (Arduino Duemilanova)
cpp code
//simple Tx on pin D12
//Written By : Mohannad Rawashdeh
// 3:00pm , 13/6/2013
//http://www.genotronex.com/
//..................................
#include <VirtualWire.h>
int licht = 0; // analog pin used to connect the lichtsensor
int l;
void setup() {
Serial.begin(9600); // Debugging only
Serial.println("setup");
vw_set_ptt_inverted(true); //
vw_set_tx_pin(12);
vw_setup(2000);// speed of data transfer Kbps
}
void loop(){
l = map(l, 0, 1023, 0, 255);
const char *msg = "hallo guus gaat ie goed 13-3-2016";
digitalWrite(13, true); // Flash a light to show transmitting
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, false);
Serial.println(l);
delay(500);
}
Reciever: (Arduino Yun)
cpp code
//simple Tx on pin D12
//Written By : Mohannad Rawashdeh
// 3:00pm , 13/6/2013
//http://www.genotronex.com/
//..................................
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("setup");
vw_set_ptt_inverted(true); // Required for DR3100
vw_set_rx_pin(12);
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], char());
Serial.print("");
}
Serial.println("");
digitalWrite(13, false);
}
}
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: VirtualWire versturen van een waarde
Ik zou de functie sprintf() nader onderzoeken en als je floating points wil gebruiken dan ook nog eens dtostrf().
Voorbeeld van zo'n message string zou kunnen zijn:
cpp code
De %d wordt hier vervangen door 123.
Voorbeeld van zo'n message string zou kunnen zijn:
cpp code
char msg[100];
sprintf(msg, "Dit is de boodschap die je wilt versturen met hier de waarde : %d\n", 123);
De %d wordt hier vervangen door 123.
- guusdikker
- Berichten: 2
- Geregistreerd: 13 Mrt 2016, 12:11
Re: VirtualWire versturen van een waarde
Ha Nico,
Bedankt voor je antwoord. ik ben hiermee aan de slag gegaan maar helemaal lukken doet het nog niet:
De sprintf functie werkt, maar de waarde veranderd niet, met het veranderen van de lichtintensiteit.
als ik onderstaande skets laat draaien dan krijg ik in de monitor:
637.00
637
Dit is de boodschap: 316
De bovenste twee waardes veranderen, de onderste niet. Hoe kan ik "316"de juiste waarde laten zijn en dat deze mee veranderd?
int lichtpin = 0;
char temp[25];
float licht;
void setup() {
Serial.begin(9600);
}
void loop(){
licht=(analogRead(lichtpin));
dtostrf(licht,3, 0, temp);
char msg[100];
sprintf(msg, "Dit is de boodschap : %d\n", temp);
Serial.println(licht);
Serial.println(temp);
Serial.println(msg);
delay(500);
}
Bedankt voor je antwoord. ik ben hiermee aan de slag gegaan maar helemaal lukken doet het nog niet:
De sprintf functie werkt, maar de waarde veranderd niet, met het veranderen van de lichtintensiteit.
als ik onderstaande skets laat draaien dan krijg ik in de monitor:
637.00
637
Dit is de boodschap: 316
De bovenste twee waardes veranderen, de onderste niet. Hoe kan ik "316"de juiste waarde laten zijn en dat deze mee veranderd?
int lichtpin = 0;
char temp[25];
float licht;
void setup() {
Serial.begin(9600);
}
void loop(){
licht=(analogRead(lichtpin));
dtostrf(licht,3, 0, temp);
char msg[100];
sprintf(msg, "Dit is de boodschap : %d\n", temp);
Serial.println(licht);
Serial.println(temp);
Serial.println(msg);
delay(500);
}
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: VirtualWire versturen van een waarde
temp is een char. Dan moet je die %d veranderen in %s. Ik zou echt ff die documentatie doorlezen over sprintf (zie printf = print formatted)
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: ixhogucuwikep en 92 gasten