Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
LoRa modul i arduino
#1
Pozdrav svima.Sklopio sam dva arduina i dva LoRa modula i za probu ubacio obican program da sa jednim tasterom upali led na prijemnom arduinu i sa drugim tasterom ugasi led.To sve radi ali samo 5 do 6 puta upali i ugasi led i vise ni da pipne dok ponovo neubacim programe,isto se desi i kad iskljucim oba arduina tj izvucembusb kablove i kad ih ukljucim ponovo nece da radi dok neubacim programe.Arduino je uredu i jedan i drugi,sa drugim programima radi normalno.Da li je neko imao te probleme?
To su XL1278 LoRa moduli,bas malecki sa kontaktima samo na jednoj strani.Tesko mi nesto izbacuje sliku pa ih zato opisujem,probacu neku adresu da postavim da se vide ti moduli.
Reply
#2
Nisu u ptanju moduli nego neka funkcija verovatno nije dobra, okaci KOD da pogledamo mozda se nesto da ispraviti
Reply
#3
Hocu kasnije kad budem pored kompjutera.Nesto citam kao da moze i napajanje sa arduina,na predajnom UNO imam 4.2V a na prijemnom NANO imam 3,5v
Neznam da li je do toga ali postavicu ovde oba programa,mozda je i do njih
Reply
#4
Pa ne verujem da moze da radi na 3.7V posto on ima u sebi LM1117 koji ima dropout od 1.2V, treba ti minimum 4.2V da bi taj regulator mogao da proizvede 3.3V za nano, verovatno je to problem.
Reply
#5
Evo kodava sa kojima sam probao,ovo je bilo nrsto drugo ali sam zbog probe izmenio da bude najprostije moguce.

Send:

#include <LoRa.h>

const int buttonPin1 = 7;
const int buttonPin2 = 6;

int buttonState1 = 0;
int lastButtonState1 = 0;

int buttonState2 = 0;
int lastButtonState2 = 0;

void setup() {
Serial.begin(9600);
while (!Serial);

pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);

Serial.println("LoRa Sender");

if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
}

void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);


if (buttonState1 == LOW ) {
delay(50);
Serial.println("Taster 1 pritisnut, šaljem: LED1_ON");
LoRa.beginPacket();
LoRa.print("LED1_ON");
LoRa.endPacket();

}

if (buttonState2 == LOW ) {
delay(50);
Serial.println("Taster 2 pritisnut, šaljem: LED1_OFF");
LoRa.beginPacket();
LoRa.print("LED1_OFF");
LoRa.endPacket();

}


lastButtonState1 = buttonState1;
lastButtonState2 = buttonState2;

delay(50);
}

_____________________________________

Rec:

#include <SPI.h>
#include <LoRa.h>

const int ledPin1 = 7; // Prva LED


String inString = "";
String MyMessage = "";

void setup() {
pinMode(ledPin1, OUTPUT);


Serial.begin(9600);
while (!Serial);

Serial.println("LoRa Receiver");

if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
}

void loop() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
while (LoRa.available()) {
int inChar = LoRa.read();
inString += (char)inChar;
MyMessage = inString;
}
inString = "";

Serial.print("Primljena poruka: ");
Serial.println(MyMessage);


if (MyMessage == "LED1_ON") {
digitalWrite(ledPin1, HIGH);
}
if (MyMessage == "LED1_OFF") {
digitalWrite(ledPin1, LOW);
}


}

delay(100);
}
Reply
#6
Ne znam ne svidja mi se kodiranje, doduse nisam radio na arduino pa ne znam koji je to jezik na njemu, to je naka mesavina C i ne znam cega jos, ali ovo gore u rec "String inString" pa konverzija iz interval u char pa lepljenje tog char nazad u string stvrno ne znam dali to tako ide ali ne svidja mi se kodiranje verovatno zato i nisam probao arduino. Pokusao sam pomoci, verovatno ce neko dodatno da se ukljuci da prekontrolise i da ti savet! Mogu pokusati:

probaj da zamenis
int inChar = LoRa.read();
u
char inChar = LoRa.read();

jer pogresno je konvertovati interval u char, i verovatno i nije u pitanju interval u funkciji LoRa.read nego je char u pitanju, razlika je 4 puta je duzi int od char a ti citas sa LoRa.read bajt po bajt i lepis u inString, znaci mora da bude inChar da bude definisan kao char.

Edit: da evo nadjoh https://github.com/sandeepmistry/arduino...ter/API.md , funkcija lora.read je bajt, znaci moras definisati ovako kako cu ti sad predloziti i nadji napajanje i trebalo bi da proradi.

void loop() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
while (LoRa.available()) {
byte inChar = LoRa.read();
if (inChar != -1)
{
inString += (char)inChar;
MyMessage = inString;
}
}
Reply
#7
I ja mislim da nije do napajanja,neopada nesto mnogo dokbsalje,probacu to sutra nekako da skockam ponovo,i ovo sam jedva nekako,kad nije htelo da radi gledao sam da sto prostije bude radi probe.
Reply
#8
Nema tu greske integer (int) i char. Jedino sto se malo razbcujemo sa memorijskim prostorom ali kod jednostavnih primera nemari. Oba smestaju celobrojni podatak samo sto je int 4 bajta, a char je 1bajt. U njegovom primeru ako LoRa.read() cita bajtnu vrednost, a mi je smestimo u int variablu angazovacemo 3 bajta "uzalud".
Inace arduino ako programiras u Arduino IDE koristi, na neki nacin, malo modifikovani C++ ali cist c++ je poptpuno podrzan. Mozes da imas i programske delove (blokove) u c-u.
Sve standardne C i C++ konstrukcije, koje podržava avr-g++ kompajler, trebalo bi da rade u Arduinu.
Reply
#9
Evo ovako.Ovaj program radi bez problema,bas kako treba,ubacis jednom i to je to.Probao sam sve sta mi je palo napamet ada radi sa tasterima ali nece.Ako moze pomoc da se samo ubace tasteri kao na primeru u prvoj temi,meni neide nikako a nevidim zasto.
Send:

#include <SPI.h>
#include <LoRa.h>

void setup() {
Serial.begin(9600);
while (!Serial);

Serial.println("LoRa Sender");

if (!LoRa.begin(433E6)) { // 433 MHz modul
Serial.println("Starting LoRa failed!");
while (1);
}
}

void loop() {
String MyMessage = "Hello World, this is Electronic Clinic";

LoRa.beginPacket();
LoRa.print(MyMessage);
LoRa.endPacket();

Serial.println("Poslato: " + MyMessage);

delay(1000); // šalje poruku na svake 1 sekundu
}
_______________________________
Rec:

#include <SPI.h>
#include <LoRa.h>

const int ledPin = 7; // LED na pinu 7
String inString = ""; // string za dolazne karaktere
String MyMessage = ""; // cela poruka
String noo = "";

void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);

while (!Serial);
Serial.println("LoRa Receiver");

if (!LoRa.begin(433E6)) { // obavezno ista frekvencija kao kod sendera
Serial.println("Starting LoRa failed!");
while (1);
}
}

void loop() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
while (LoRa.available()) {
int inChar = LoRa.read();
inString += (char)inChar;
MyMessage = inString;
}
inString = "";

Serial.print("Primljena poruka: ");
Serial.println(MyMessage);

// Ako poruka sadrži određeni tekst, blinka LED
if (MyMessage.indexOf("Hello World") >= 0) {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
}
}

delay(100);
}
Reply
#10
Pa moras kroz serijal monitor da pratis sta se desava i ne bi bilo lose da dodas vise komandi Serial.print iza svakog programskog reda i videces kad zaglavi gde je tacno stao...
Reply
#11
Nisam nikad radio sa tim modulima, tako da ne znam sta je u tom LoRa.h.
Moguce su dvije stvari>
1. Pinove koje koristis za tastere ( 6 i 7) kotristi i LoRa.h za nesto
2. Ne sacekas da se zavrsi slanje prve poruke a posaljes drugu ( sad imas 50 us pauze, ali jel to dovoljno ne znam.
Reply
#12
Ovaj drugi kod nezaglavljuje nigde a sa tasterima zaglavi posle nekoliko puta.Ti pinovi su slobodni,nijedan neide za vezu sa lora modulom.
Reply
#13
Da, vidio sam naknadno da su slobidni 6,7,8,...
Probaj staviti pauzu kad posaljes prvi karakter na slanje.
Probaj 500 ms pauze izmjedju dva obracanja LoRa modulu,
ili jos bolje sacekaj sa slanjem dok ne napravis kompletnu poruku, i onda je posalji.
Reply
#14
Okaci projekt folder arhiviran da pogledamo, taj sa tasterima, nije to dobro uradjeno, tu nesto u kodu nije kako treba. Napajanje za REC bi trebalo da bude minimum 4.2V jer na nano je linearni regulator za 3.3V sa dropout 1.2V i ne moze da proizvede 3.3V sa 3.7V koliko ti je to drugo napajanje, to moras da sredis prvo.
Reply
#15
Ubaci i tastere onako kako si pokusao, koju poruku ocekujes i koju poruku saljes da bude lakse da ti to prepravimo
Reply
#16
Ovde imas kompletan example za ovaj tvoj slucaj https://github.com/arduino/docs-content/...n-press.md
Reply
#17
Neznam kako da arhiviram projekt taj kod koji mi treba da se ispravi je u temi-poruka #5 a ovaj sto radi bez ikakvih problema je u #9
Hteo sam ono prosto,pritisnem taster na pinu 7 i ovamo ukljuci led na pinu 7 , pritisenem na pinu 6 i led se iskljuci,nista vise zasad,ako to proradi onda cu lako da dodam jos po jedan taster i diodu i to je to.
Po tome mislim sto ovaj drugi radi kako treba bez ikakvih zastoja mislim da nije do napajanja ali probacu da za oba uradim nesto stabilno po 3.3V pa ako ni tad nece...
Reply
#18
Када убацујеш код у поруки користи форматирање, читљибије је.

Code:
post #9

Send:

#include <SPI.h>
#include <LoRa.h>

void setup() {
    Serial.begin(9600);
    while (!Serial);

    Serial.println("LoRa Sender");

    if (!LoRa.begin(433E6)) { // 433 MHz modul
        Serial.println("Starting LoRa failed!");
    while (1);
    }
}

void loop() {
    String MyMessage = "Hello World, this is Electronic Clinic";

    LoRa.beginPacket();
    LoRa.print(MyMessage);
    LoRa.endPacket();

    Serial.println("Poslato: " + MyMessage);

    delay(1000); // šalje poruku na svake 1 sekundu
}
_______________________________
Rec:

#include <SPI.h>
#include <LoRa.h>

const int ledPin = 7; // LED na pinu 7
String inString = ""; // string za dolazne karaktere
String MyMessage = ""; // cela poruka
String noo = "";

void setup() {
    pinMode(ledPin, OUTPUT);
    Serial.begin(9600);

    while (!Serial);
    Serial.println("LoRa Receiver");

    if (!LoRa.begin(433E6)) { // obavezno ista frekvencija kao kod sendera
        Serial.println("Starting LoRa failed!");
    while (1);
    }
}

void loop() {
    int packetSize = LoRa.parsePacket();
    if (packetSize) {
        while (LoRa.available()) {
            int inChar = LoRa.read();
            inString += (char)inChar;
            MyMessage = inString;
        }
    inString = "";

    Serial.print("Primljena poruka: ");
    Serial.println(MyMessage);

// Ako poruka sadrži određeni tekst, blinka LED
        if (MyMessage.indexOf("Hello World") >= 0) {
            digitalWrite(ledPin, HIGH);
            delay(500);
            digitalWrite(ledPin, LOW);
        }
    }

    delay(100);
}
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.

塞爾維亞文
Reply
#19
Probaj ovako

send:
PHP Code:
#include <LoRa.h>

const int buttonPin1 7;
const 
int buttonPin2 6;

int buttonState1 0;
int lastButtonState1 0;

int buttonState2 0;
int lastButtonState2 0;

void setup() {
    Serial.begin(9600);
    while (!Serial);

    pinMode(buttonPin1INPUT_PULLUP);
    pinMode(buttonPin2INPUT_PULLUP);

    Serial.println("LoRa Sender");

    if (!LoRa.begin(433E6)) {
        Serial.println("Starting LoRa failed!");
        while (1);
    }

     delay(500);
}

void loop() {
    buttonState1 digitalRead(buttonPin1);
    buttonState2 digitalRead(buttonPin2);

    if (buttonState1 == LOW ) {
        Serial.println("Taster 1 pritisnut, šaljem: LED1_ON");
        LoRa.beginPacket();
        LoRa.print("LED1_ON");
        LoRa.endPacket();
        delay(500);
    }

    if (buttonState2 == LOW ) {
        Serial.println("Taster 2 pritisnut, šaljem: LED1_OFF");
        LoRa.beginPacket();
        LoRa.print("LED1_OFF");
        LoRa.endPacket();
        delay(500);
    }

    lastButtonState1 buttonState1;
    lastButtonState2 buttonState2;

    delay(500);


receive:
PHP Code:
#include <SPI.h>
#include <LoRa.h>

const int ledPin1 7// Prva LED

String MyMessage "";

String LEDON "LED1_ON";
String LEDOFF "LED1_OFF";

void setup() {
    pinMode(ledPin1OUTPUT);

    Serial.begin(9600);
    while (!Serial);

    Serial.println("LoRa Receiver");

    if (!LoRa.begin(433E6)) {
        Serial.println("Starting LoRa failed!");
        while (1);
    }
}

void loop() {
    int packetSize LoRa.parsePacket();

    if (packetSize) {
        while (LoRa.available()) {
            MyMessage += (char)LoRa.read();;
        }

        Serial.print("Primljena poruka: ");
        Serial.println(MyMessage);

        if (MyMessage.equals(LEDON)) {
                digitalWrite(ledPin1HIGH);
        }

        if (MyMessage.equals(LEDOFF)) {
                digitalWrite(ledPin1LOW);
        }

        MyMessage "";
    }

    delay(100);

Reply
#20
Evo sta se dogadja.Zadnja 4 sata eksperimentisem.Ovaj u #5 je mnogo nepouzdan dok ovaj sto je saven postavio radi odlicno ali desi se da se ukoci,ostane na pr ukljucena led nekoliko minuta i posle nece da se iskljuci ili obrnoto i kad u arduino ide za receive ukljucim serial monitor tad se razblokira i radi normalno,znaci ubacim programe u oba arduina,palim gasim i radi,ostavim malo da svetli led i posle negasi dok neukljucim serial monitor i onda krene.Koliko se ja mogu da primetim savenov kod je odlican a sad...neznam...mozda i ovaj moj arduino nano nije kako treba,uglavnom to se dogadja da kad se ukljuci serial motir tad se razblokira.Meni netreba serial monitor jer to nesto sto hocu radilo bi mi na adapter od 5V bez kompjutera.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)