Komunikace na 433Mhz
Úvodní stránka › Fórum › Hardware › Arduino › Komunikace na 433Mhz
- Toto téma obsahuje celkem 3 odpovědi. Do diskuze (3 diskutující) se naposledy zapojil uživatel
bot a poslední změna proběhla před 10 roky.
-
AutorPříspěvky
-
27.9.2016 v 13:08 #8554
bot
ÚčastníkDobrý den,
chci pochopit a zprovoznit komunikaci pomocí těchto modulů MX-FS-03V & MX-05.
Myslím, že tuto problematiku do určité míry chápu, zatím to zkouším na primitivním programu:
Vysílač:
void setup() { pinMode(2, OUTPUT); pinMode(3, INPUT); digitalWrite(3, LOW); } void loop() { if (digitalRead(3)){ String packet = "10011100"; sendOneByte(packet); } } void sendOneByte(String message){ for(int i = 0; i < 8; i++){ if (message[i] == '0'){ digitalWrite(2, HIGH); // 0 delayMicroseconds(400); digitalWrite(2, LOW); // break delayMicroseconds(600); } else { digitalWrite(2, HIGH); // 1 delayMicroseconds(1000); digitalWrite(2, LOW); // break delayMicroseconds(600); } } digitalWrite(2, LOW); // One byte break delayMicroseconds(1500); }Přijímač:
volatile byte packet; void setup() { pinMode(13, OUTPUT); digitalWrite(13, LOW); pinMode(2, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(2), flash, CHANGE); } void loop() { if (packet == 0b10011100){ digitalWrite(13, HIGH); delay(2000); digitalWrite(13, LOW); packet = 0b00000000; } } void flash(){ if(pulseIn(2, HIGH) > 500){ packet <<= 1; // 1 packet |= 0b00000001; } else { packet <<= 1; // 0 packet &= 0b11111110; } }Pokud odešlu byte, ledka(pin 13) se rozsvítí, ale arduino jako by se zaseklo a lediodu nevypne, i když dle mého by mělo, ať se děje co se děje.
Nevíte prosím, kde by mohla být chyba?
Děkuji.
27.9.2016 v 16:37 #8557Zbyšek Voda
ÚčastníkZkuste postupovat například pomocí tohoto návodu: http://www.instructables.com/id/Arduino-Tutorials-part-3-17-Tutorial-Pack/step6/Arduino-and-RF-Transmitter-MX-FS-03V-and-Receiver-/ ?
27.9.2016 v 21:13 #8558posjirka
Účastníkjak píše Zbyšek je vhodné vyzkoušet nějáký prověřený řešení a ideálně s použitím knihoven virtualwire nebo LW. chybu v tvem kodu nevidím, ale určitě bych použil i nulování proměnné , když tlačítko není stisknuté. Už jen pro test co to udělá.
Jinak jestli chceš něco česky:
http://arduino8.webnode.cz/news/lekce-20-arduino-a-vyuziti-433-92-mhz/
28.9.2016 v 22:43 #8579bot
ÚčastníkDěkuji za Vaše rady.
Pomocí těchto návodů jsem to již předtím zprovoznil.
Teď bych si chtěl napsat něco svého jednoduchého, jelikož to poté chci přepsat do Cečka pro attiny13a. Potřebuji spínat vysílačem 3 nezávislé relé(každé bude mít svůj přijímač). Tedy dle sepnutého tlačítka se odešle patřičný paket, který dešifruje jeden zvolený přijímač (jedno relé). Vesměs jsem našel i hotové řešení a odzkoušené na attiny13a, ale mě zcela nefunguje korektně (vysílač musím držet v prstech ve správné poloze, až poté začne vysílat)
Co jsem tak zkoušel, tak je problém s funkcí delay(). Po odstranění, se již arduino „nezasekne“, ale i tak se chová divně. Nehledě na to, že by měla fungovat bez problému pokud se nepoužije přímo v ISR.
Zkoušel jsem vypnout i přerušení poté co přijme správný packet(„10011100“) a opět ho poté zapnout. To bohužel také nezabralo. Zdá se mi, že je problém s časovači, nejspíše někde přetečou, a proto se arduino chová divně(náhodně), ale vůbec se v tom nevyznám a nevím, kde může být chyba.
Vysílač je dle mě správný, oba signály (z vysílače i přijímače) sleduji na osciloskopu – paket se vždy odešle a přijme správně, ale problém je se zpracováním(u přijímače). -
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.
