Draadloos tussen UNO en MEGA

Ik heb een 433 zender op een UNO aangesloten en een 433 ontvanger op een MEGA2560. I£n eerste instantie is de bedoeling om de UNO te laten tellen van 0 tot 99 en telkens deze waarde doorzenden naar de MEGA. Ik gebruik de volgende code voor de zender:

/*
SimpleSend
This sketch transmits a short text message using the VirtualWire library
connect the Transmitter data pin to Arduino pin 12
*/
#include <VirtualWire.h>
int waarde = 0;
char message[2];

void setup()
{
// For Debug
Serial.begin(9600);
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
}

void loop()
{
Serial.println(message);
//send("#Hello");
//delay(250);
itoa(waarde,message,10);
delay(50);
send(message);
waarde++;
if (waarde > 99)  {waarde = 0;}

}

void send (char *message)
{
vw_send((uint8_t *)message, 2); //strlen(message));
vw_wait_tx(); // Wait until the whole message is gone
}

Voor de ontvanger heb ik deze code:

 /*
SimpleReceive
This sketch displays text strings received using VirtualWire
Connect the Receiver data pin to Arduino pin 11
*/
#include <VirtualWire.h>
uint8_t messageLength = VW_MAX_MESSAGE_LEN; // the size of the message
uint8_t message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages

void setup()
{
Serial.begin(9600);
Serial.println("Device is ready");
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
vw_set_rx_pin(11);
vw_rx_start(); // Start the receiver
}
void loop()
{
uint8_t messageLength = VW_MAX_MESSAGE_LEN; // the size of the message
uint8_t message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages

if (vw_get_message(message, &messageLength)) // Non-blocking
{
Serial.print("Ontvangen: ");
for (int i = 0; i < messageLength; i++)
{
Serial.print(message[i]);

}
Serial.println();

}
}

Er vind een overdracht plaats tussen de 2 arduino's maar de waardes kloppen niet. Hieronder staat wat ik op de ontvanger binnenkrijg nadat ik op de RESET knop heb gedrukt.

Wat doe ik fout?

Eh..
Druk ALT-printScrn, dan word alleen het actieve venster naar het klembord gekopieerd en hoef je m niet meer te knippen ?

Ja ik weet het, flauw, maar kon het niet laten.

Wat je laat zien klopt precies.
Je stuurt namelijk een ASCII en geen variabele.
Ik weet niet waarom dat zo is, maar wat je ontvangt en uitgeprint krijgt bevestigt dat.

Als je ontvangt en dat dan afrukt, dan druk je dus ASCII codes (decimaal) af.
Decimaal 53 is in de ASCII tabel het teken "5".
En 48 is "0".
De eerst geprinte waarde is dus 50.
Als je dat vertaalt naar wat je zendt, dan komt het overeen met wat je dacht te doen.
Maar je moet dus eerst de getallen die je ontvangt omzetten.
Je kunt ook die getallen in een string (array) stoppen.
Die string moet dan wel altijd eindigen met een nul (de waarde nul, niet het teken 0) om aan te geven dat het einde bereikt is.
De lengte van een string is dus altijd de af te beelden lengte plus 1 voor die nul, in dit geval dus 3 tekens.

:slight_smile: Met je opmerking kan ik wel lachen hoor! (Zouden mensen wat meer moeten doen :%)

Maar als ik het goed begrijp:

In de zender:
Ik zet mijn variabele 'waarde' mbv het commando 'itoa' van integer naar array om naar 'message' omdat ik enkel een string kan zenden.

In de ontvanger:
Ik moet mijn string 'message' naar een integer (int) gaan omzetten?

Kan ik deze omzetting ook weglaten? M.a.w. is het mogelijk om de variabele 'waarde' rechtstreeks te zenden zonder die om te zetten naar een string?

Je kunt eens proberen om in plaats van print (dat uitgaat van ASCII), write te proberen.
Maar omdat je dus ASCII hebt, kan het zijn dat je dan onleesbare tekens naar je terminal scherm stuurt (teken 5, teken 0, teken 4, teken 8 ).
Je zou dan dus teken 50, teken 48 moeten sturen.
Ik zou zeggen gewoon ff proberen.

Het is opgelost door in de ontvanger-code het commando 'atoi' te gebruiken. Ik zet de ontvangen array weer om naar een int.