Sziasztok!
Egy mozgásérzékelőt kötöttem egy Nano-ra, s a kapott adatokat RF24 rádióval átlőni egy másik RF24-gyel felszerelt Uno-ra. A következő kódom van adó oldalon:
void loop()
{
xtengely=(analogRead(xpin));
ytengely=(analogRead(ypin));
ztengely=(analogRead(zpin));
helyzet=(xtengely/3+ytengely/3+ztengely/3);
riaszt=abs(helyzet-x);
if (riaszt > erzekenyseg) // csak mozgás esetén küld rádiójelet
{
joystick[0] = 1;
joystick[1] = riaszt;
joystick[2] = ztengely;
radio.write( joystick, sizeof(joystick) );
}
// 2 másodperces eltolással vizsgálja a helyzetet - lassú mozgásokra
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > 2000) {
previousMillis = currentMillis;
riaszt=abs(longhelyzet-x);
if (riaszt > erzekenyseg)
{
joystick[0] = 2;
joystick[1] = riaszt;
joystick[2] = ztengely;
radio.write( joystick, sizeof(joystick) );
}
longhelyzet=(xtengely/3+ytengely/3+ztengely/3);
}
// Bejelentkezés 2 másodpercenként
if(currentMillis - previousMillis2 > 2000) {
previousMillis2 = currentMillis;
joystick[0] = 3;
joystick[1] = riaszt;
joystick[2] = ztengely;
radio.write( joystick, sizeof(joystick) );
}
x = helyzet+1;
}//--(end main loop )---
Az a gondom vele, hogy a mozgást simán átlövi, és annak megfelelően a vevő rendesen megkapja az adatokat. Tehát az első if lefut. A második és harmadik feltétel is lefut, de ott a rádió már nem küld jelet. A Nano-n látom felvillanni a 13. kimenethez csatlakozó ledet, ami jelzi, hogy rádiókommunikáció van. A vevő mégis csak az első feltétel teljesülése esetén fogadja az adatokat. A vevő lényes kódja:
done = radio.read( joystick, sizeof(joystick) );
Ugyanazt a tömböt használom, a tömb minden eleme mindig integer, mégsem kapom meg a két másodpercenkénti bejelentkező jelet. A bejelentkezést néha akkor kapom meg véletlenszerűen, ha megmozgatom a szenzort, s akkor több csomag között esetleg megy egy bejelentkezés is. Van valakinek esetleg ötlete? Próbáljak más libraryt a rádiókhoz?