| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-04 09:32:44 +00:00
										 |  |  |    For default module settings, see the wiki page | 
					
						
							|  |  |  |    https://github.com/jgromes/RadioLib/wiki/Default-configuration#sx126x---lora-modem
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							| 
									
										
										
										
											2020-07-04 09:32:44 +00:00
										 |  |  | SX1262 radio = new Module(10, 2, 3, 9); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // or using RadioShield
 | 
					
						
							|  |  |  | // https://github.com/jgromes/RadioShield
 | 
					
						
							|  |  |  | //SX1262 radio = RadioShield.ModuleA;
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  | // save transmission state between loops
 | 
					
						
							| 
									
										
										
										
											2021-11-14 10:41:53 +00:00
										 |  |  | int transmissionState = RADIOLIB_ERR_NONE; | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | void setup() { | 
					
						
							|  |  |  |   Serial.begin(9600); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // initialize SX1262 with default settings
 | 
					
						
							|  |  |  |   Serial.print(F("[SX1262] Initializing ... ")); | 
					
						
							| 
									
										
										
										
											2020-07-04 09:32:44 +00:00
										 |  |  |   int state = radio.begin(); | 
					
						
							| 
									
										
										
										
											2021-11-14 10:41:53 +00:00
										 |  |  |   if (state == RADIOLIB_ERR_NONE) { | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  |     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
 | 
					
						
							| 
									
										
										
										
											2020-07-04 09:32:44 +00:00
										 |  |  |   radio.setDio1Action(setFlag); | 
					
						
							| 
									
										
										
										
											2019-05-18 11:27:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // 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
 | 
					
						
							| 
									
										
										
										
											2020-07-04 09:32:44 +00:00
										 |  |  |   transmissionState = radio.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}; | 
					
						
							| 
									
										
										
										
											2020-07-04 09:32:44 +00:00
										 |  |  |     state = radio.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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-14 10:41:53 +00:00
										 |  |  |     if (transmissionState == RADIOLIB_ERR_NONE) { | 
					
						
							| 
									
										
										
										
											2019-09-17 06:38:07 +00:00
										 |  |  |       // 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
 | 
					
						
							| 
									
										
										
										
											2020-07-04 09:32:44 +00:00
										 |  |  |     transmissionState = radio.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}; | 
					
						
							| 
									
										
										
										
											2020-07-04 09:32:44 +00:00
										 |  |  |       int state = radio.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
										 |  |  |   } | 
					
						
							|  |  |  | } |