| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2019-05-24 12:23:39 +00:00
										 |  |  |    RadioLib SX126x Transmit with Interrupts Example | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    This example transmits LoRa packets with one second delays | 
					
						
							|  |  |  |    between them. Each packet contains up to 256 bytes | 
					
						
							|  |  |  |    of data, in the form of: | 
					
						
							|  |  |  |     - Arduino String | 
					
						
							|  |  |  |     - null-terminated char array (C-string) | 
					
						
							|  |  |  |     - arbitrary binary data (byte array) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Other modules from SX126x family can also be used. | 
					
						
							| 
									
										
										
										
											2019-06-02 13:03:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    For full API reference, see the GitHub Pages | 
					
						
							|  |  |  |    https://jgromes.github.io/RadioLib/
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // include the library
 | 
					
						
							|  |  |  | #include <RadioLib.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-02 13:03:21 +00:00
										 |  |  | // SX1262 has the following connections:
 | 
					
						
							|  |  |  | // NSS pin:   10
 | 
					
						
							|  |  |  | // DIO1 pin:  2
 | 
					
						
							| 
									
										
										
										
											2019-12-27 12:21:21 +00:00
										 |  |  | // NRST pin:  3
 | 
					
						
							| 
									
										
										
										
											2019-06-02 13:03:21 +00:00
										 |  |  | // BUSY pin:  9
 | 
					
						
							| 
									
										
										
										
											2019-12-27 12:21:21 +00:00
										 |  |  | SX1262 lora = new Module(10, 2, 3, 9); | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  | // save transmission state between loops
 | 
					
						
							|  |  |  | int transmissionState = ERR_NONE; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | void setup() { | 
					
						
							|  |  |  |   Serial.begin(9600); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // initialize SX1262 with default settings
 | 
					
						
							|  |  |  |   Serial.print(F("[SX1262] Initializing ... ")); | 
					
						
							|  |  |  |   // carrier frequency:           434.0 MHz
 | 
					
						
							|  |  |  |   // bandwidth:                   125.0 kHz
 | 
					
						
							|  |  |  |   // spreading factor:            9
 | 
					
						
							|  |  |  |   // coding rate:                 7
 | 
					
						
							| 
									
										
										
										
											2020-02-02 10:20:01 +00:00
										 |  |  |   // sync word:                   0x12 (private network)
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |   // output power:                14 dBm
 | 
					
						
							|  |  |  |   // current limit:               60 mA
 | 
					
						
							|  |  |  |   // preamble length:             8 symbols
 | 
					
						
							| 
									
										
										
										
											2019-11-26 20:22:47 +00:00
										 |  |  |   // TCXO voltage:                1.6 V (set to 0 to not use TCXO)
 | 
					
						
							| 
									
										
										
										
											2020-01-28 16:17:28 +00:00
										 |  |  |   // regulator:                   DC-DC (set to true to use LDO)
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |   // CRC:                         enabled
 | 
					
						
							|  |  |  |   int state = lora.begin(); | 
					
						
							|  |  |  |   if (state == ERR_NONE) { | 
					
						
							|  |  |  |     Serial.println(F("success!")); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     Serial.print(F("failed, code ")); | 
					
						
							|  |  |  |     Serial.println(state); | 
					
						
							|  |  |  |     while (true); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 12:23:39 +00:00
										 |  |  |   // set the function that will be called
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |   // when packet transmission is finished
 | 
					
						
							|  |  |  |   lora.setDio1Action(setFlag); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // start transmitting the first packet
 | 
					
						
							|  |  |  |   Serial.print(F("[SX1262] Sending first packet ... ")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // you can transmit C-string or Arduino string up to
 | 
					
						
							|  |  |  |   // 256 characters long
 | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  |   transmissionState = lora.startTransmit("Hello World!"); | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // you can also transmit byte array up to 256 bytes long
 | 
					
						
							|  |  |  |   /*
 | 
					
						
							| 
									
										
										
										
											2020-03-22 07:12:38 +00:00
										 |  |  |     byte byteArr[] = {0x01, 0x23, 0x45, 0x67, | 
					
						
							|  |  |  |                       0x89, 0xAB, 0xCD, 0xEF}; | 
					
						
							|  |  |  |     state = lora.startTransmit(byteArr, 8); | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |   */ | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  | // flag to indicate that a packet was sent
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | volatile bool transmittedFlag = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  | // disable interrupt when it's not needed
 | 
					
						
							|  |  |  | volatile bool enableInterrupt = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // this function is called when a complete packet
 | 
					
						
							|  |  |  | // is transmitted by the module
 | 
					
						
							|  |  |  | // IMPORTANT: this function MUST be 'void' type
 | 
					
						
							|  |  |  | //            and MUST NOT have any arguments!
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | void setFlag(void) { | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  |   // check if the interrupt is enabled
 | 
					
						
							|  |  |  |   if(!enableInterrupt) { | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // we sent a packet, set the flag
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |   transmittedFlag = true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void loop() { | 
					
						
							|  |  |  |   // check if the previous transmission finished
 | 
					
						
							|  |  |  |   if(transmittedFlag) { | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  |     // disable the interrupt service routine while
 | 
					
						
							|  |  |  |     // processing the data
 | 
					
						
							|  |  |  |     enableInterrupt = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // reset flag
 | 
					
						
							|  |  |  |     transmittedFlag = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (transmissionState == ERR_NONE) { | 
					
						
							|  |  |  |       // packet was successfully sent
 | 
					
						
							|  |  |  |       Serial.println(F("transmission finished!")); | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  |       // NOTE: when using interrupt-driven transmit method,
 | 
					
						
							|  |  |  |       //       it is not possible to automatically measure
 | 
					
						
							|  |  |  |       //       transmission data rate using getDataRate()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       Serial.print(F("failed, code ")); | 
					
						
							|  |  |  |       Serial.println(transmissionState); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // wait a second before transmitting again
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |     delay(1000); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  |     // send another one
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |     Serial.print(F("[SX1262] Sending another packet ... ")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // you can transmit C-string or Arduino string up to
 | 
					
						
							|  |  |  |     // 256 characters long
 | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  |     transmissionState = lora.startTransmit("Hello World!"); | 
					
						
							| 
									
										
										
										
											2019-05-24 12:23:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |     // you can also transmit byte array up to 256 bytes long
 | 
					
						
							|  |  |  |     /*
 | 
					
						
							| 
									
										
										
										
											2020-03-22 07:12:38 +00:00
										 |  |  |       byte byteArr[] = {0x01, 0x23, 0x45, 0x67, | 
					
						
							|  |  |  |                         0x89, 0xAB, 0xCD, 0xEF}; | 
					
						
							|  |  |  |       int state = lora.startTransmit(byteArr, 8); | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |     */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  |     // we're ready to send more packets,
 | 
					
						
							|  |  |  |     // enable interrupt service routine
 | 
					
						
							|  |  |  |     enableInterrupt = true; | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |   } | 
					
						
							|  |  |  | } |