Concordiamo quasi su tutto
Solo rimane da controllare che per il basso datarate del lora non capiti che la trasmissione duri di più della successiva pausa
Concordiamo quasi su tutto
Solo rimane da controllare che per il basso datarate del lora non capiti che la trasmissione duri di più della successiva pausa
Se ben ricordo, a seconda del chipset usato sulla scheda, che la libreria lo onori o meno ... poco importa, viene forzato dall'hardware che NON trasmette se non sono rispettate le tempistiche. Dovrebbe dare un'occhiata al datasheet per verificare come si comporta il modulo ... ![]()
Guglielmo
Beh comunque sarebbe bene testare cosa restituiscono i metodi beginpacket e endpacket
Se restituissero zero avremmo trovato
Inoltre endpacket di default è NON asincrono
Quindi il problema del tempo di trasmissione non si pone
Solo per completezza ... in QUESTA pagina tutta la documentazione possibile (datasheet, application notes, ecc.) relativa la SX1278 che l'OP sta utilizzando.
Guglielmo
Ieri sera ho tolto tutti i delay() lato trasmettitore e ho impostato la variabile volatile , e ho fatto in modo che quando premo il pulsante mi trasmetta solo in quel lasso di tempo il pacchetto "true" semplificando al massimo.
#include <SPI.h>
//Incuding LoRa library
#include <LoRa.h>
//define the pins used by the transceiver module
#define NSS 53
#define RST 9
#define DI0 8
#define BUTTON 3
//this variable is for update the status of the push button
volatile uint8_t button_status = 0;
// this function is called the Interrupt Setvice Routine (ISR).
// When button is pressed, this function will trigger.
// and, update the "button_status" variable to (1 to 0) or (0 to 1)
void isr() {
Serial.println("interrupt triggered");
//every time the interrupt is triggered,
// button_status value will inverse (0 to 1) or (1 to 0)
button_status = !button_status;
}
void setup() {
//initialize Serial Monitor
Serial.begin(9600);
//take pin 25 as INPUT with PULL-UP.
//PULLUP means pin 15 is normally high. When button pressed it gets LOW
pinMode(BUTTON, INPUT_PULLUP);
//Attaching an Interrupt to pin 25 (BUTTON pin)
// when button goes (high to low) state, then interrupt will triggered
attachInterrupt(digitalPinToInterrupt(BUTTON), isr, CHANGE);
Serial.println("LoRa Sender");
pinMode(NSS, OUTPUT);
digitalWrite(NSS, HIGH);
LoRa.setPins(NSS, RST, DI0);
//setup LoRa sender
//Select the frequency accordng to your location
//433E6 for Asia
//866E6 for Europe
//915E6 for North America
while (!LoRa.begin(433E6)) {
Serial.println(".");
delay(500);
}
// Change sync word (0xF1) to match the receiver LoRa
// This code ensure that you don't get LoRa messages
// from other LoRa transceivers
// ranges from 0-0xFF
LoRa.setSyncWord(0xF1);
Serial.println("LoRa Initializing Successful!");
}
void loop() {
Serial.print("Sending packet: ");
//If the button_status is 1, Send LoRa packet "on" to receiver LoRa
if(button_status == 1){
LoRa.beginPacket();
LoRa.print("true");
LoRa.endPacket();
Serial.println("sent lora to on");
}
}
Dal lato ricevitore stampo packetSize che è "0" quando non riceve nessun pacchetto e "5" quando riceve false ,bene ora se tengo premuto il pulsante ( ho anche provato a baipassarlo mettendo direttamente il pin a gnd e lasciando cosi per un minuto circa ) sul ricevitore leggo il pacchetto false e packrtSize =5, pero poi mi legge paketSize =0 , avendo quindi sul serial monitor una cosa del genere :
---> 5
---> 0
---> 5
---> 0
No riesco a capire il perche mi legga packetSize =0 anche se il pulsante è premuto e il trasmettitore invia sempre il pacchetto "false " equivalente a 5 .... oggi provo a leggere la trasmissione di beginpacket e endpacket come dici e vediamo cosa mi da, ovviamete provo anche la soluzione antirimbalzo del pulsante.
Poiche diciamo che sto cercando di creare un Lora gateway , che voi sappiate esite gia in commercio uno gia bello e fatto solo da programmare con ambiente arduino ?
Abbiamo capito il problema:
È alla riga 27 del programma dal ricevitore
Basta cancellarla, non serve
Appena posso posto il codice del ricevitore lora
Dai un'occhiata a questo, forse ha anche roba in più che non so se ti possa servire.
Ciao, Ale.
Come potresti leggere false se il trasmettitore (ultima versione) trasmette solo true?
Cosa c'entra il pulsante "premuto" o bypassato se usi un interrupt a change?
Devo purtroppo "arrendermi" e riconoscere che il livello di aiuto che ti posso fornire è inadeguato alle tue necessità
Facci sapere come va a finire
Ma lo OP è sparito?
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.