Pages: [1]   Go Down
Author Topic: Draadloos tussen UNO en MEGA  (Read 1202 times)
0 Members and 1 Guest are viewing this topic.
Maaseik, Belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 32
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
/*
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:

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?
Logged

The Netherlands
Online Online
Edison Member
*
Karma: 47
Posts: 1543
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Maaseik, Belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 32
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley Met je opmerking kan  ik wel lachen hoor! (Zouden mensen wat meer moeten doen  smiley-draw)

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?
Logged

The Netherlands
Online Online
Edison Member
*
Karma: 47
Posts: 1543
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Maaseik, Belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 32
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: