This project explain how to use Nucleo-L152RE and AUREL RTX-MID-3V for create a intelligent radio control. In another words, there is two transceivers that send data and an ACK if the reception is correct.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
emcu
Date:
Mon Jun 02 18:38:35 2014 +0000
Commit message:
This project explain how to use Nucleo-L152RE and AUREL RTX-MID-3V for create a intelligent radio control.; In another words, there is two transceivers that send data and an ACK if the reception is correct.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r e3fc2197fe07 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jun 02 18:38:35 2014 +0000
@@ -0,0 +1,289 @@
+/*
+
+  By: www.emcu.it
+
+  NUCLEO-L152RE and AUREL RTX-MID-3V 
+
+  AUREL RTX-MID-3V 
+  Italian AUREL manual is here: http://www.aurelwireless.com/wp-content/uploads/manuale-uso/650201033G_mu.pdf
+  English AUREL manual is here: http://www.aurelwireless.com/en/radiomodem-data-transceivers/ 
+  https://www.futurashop.it/index.php?route=product/product&filter_name=RTX-MID-3V&product_id=2788
+
+  CONNECTIONS from AUREL RTX-MID-3V to NUCLEO L152RE
+  PIN1    Antenna 17cm
+  PIN2    GND
+  PIN4    TX connected to TX on NUCLEO L152RE
+  PIN5    Tx/Rx connected to PA_10 on NUCLEO L152RE 
+  PIN6    ENABLE connected to PB_3 on NUCLEO L152RE
+  PIN7    GND
+  PIN8    Analog Out not connected
+  PIN9    RX connected to RX on NUCLEO L152RE
+  PIN10   VCC connected to 3,3V on NUCLEO L152RE
+  
+  NOTE: from GND and VCC put a capacitor of 0,1uF and a second capacitor of 10uF
+
+    
+    ********** IMPORTANT IMPORTANT IMPORTANT IMPORTANT **********
+    
+    This project use the USART for this reason you must do the below modifications 
+    on NUCLEO-L152RE, more info are here:
+    http://www.emcu.it/NUCLEOevaBoards/U2andL152/U2andL152.html#USART2_for_communication_with_shield_or
+    
+    Put a jumper on SB62 and another on SB63
+    Remove a 0 ohm resistor from SB13 and SB14
+    
+    After this modifications, you lost the possibility to use the virtual comm to connect 
+    the NUCLEO to the PC.
+
+    *************************************************************  
+  
+    
+    ********** EXPLANATIONS:
+    
+    If you build two boards identically when you press a Blue button on the board n.1, 
+    the green LED flashing, release the Blue button and the transmission is started.
+    On the board n.2 the green LED is turn on (for 3 sec) and an ACK is send to board n.1.
+    After some second, on the board n.1, the green LED is turn on (for 3 sec) to indicate 
+    that the command sent to the board n.2 was received correctly.
+    
+
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ 
+ 
+ */
+
+
+#include "mbed.h"
+
+Serial pc(SERIAL_TX, SERIAL_RX);    // tx, rx
+DigitalOut RTX_DIR(PA_10);          // 1 == TX  0 == RX
+DigitalOut RTX_Enable(PB_3);        // 1 == RTX enable  0 == RTX disable
+
+DigitalOut myled(LED1);                 // This LED is on NUCLEO-L152RE
+DigitalIn BlueButton(USER_BUTTON);      // This is Blue-Button and is on NUCLEO-L153RE
+
+#define Pressed 0
+#define NotPressed 1
+#define Enable 1
+#define Disable 0
+#define ACK 2
+#define OK 1
+#define FAIL 0
+
+#define ON  1
+#define OFF 0
+#define TX 1
+#define RX 0
+
+int Car='\0';
+int RisultatoRX=FAIL;
+
+
+int TestRX_Data(void);
+void RTX_StartUp(void);
+void RTX_PowerDown(void);
+void RTX_PowerON(void);
+void RTX_TX(void);
+void RTX_RX(void);
+
+int CarStr[3];
+int PuntCar = 0;
+
+void callback() {
+    // Note: you need to actually read from the serial to clear the RX interrupt
+    Car = pc.getc();
+    if (PuntCar < 3)
+        {
+        CarStr[PuntCar] = Car;
+        PuntCar++;
+        }
+}
+
+
+int main()
+{
+    int n=0;
+    
+    pc.baud(1200);
+    pc.attach(&callback, pc.RxIrq); // It is for reading under Interrupt the RX from USART
+    
+    // Start Up of the RTX-MID and put it in RX mode
+    RTX_StartUp();
+    
+    while (1)
+    {
+       
+        if (BlueButton == Pressed)
+            { 
+            while (BlueButton == Pressed)
+                {
+                myled = !myled;
+                wait(0.2);
+                }
+            myled = OFF;
+            
+            for (n=0; n<20; n++)
+                {    
+                RTX_TX();           // RTX-MID on TX mode        
+                // Send Message
+                pc.printf("#?@");   // Send Command
+                wait_ms(100); 
+                RTX_RX();           // RTX-MID on RX mode
+                
+                // Test if the Message is arrived
+                RisultatoRX = TestRX_Data();
+                if (RisultatoRX == OK)
+                    {
+                    myled = ON;
+                    wait(3);
+                    }
+                else
+                    myled = OFF;                
+                }           
+            RTX_RX(); // RTX-MID on RX mode
+            }
+        
+        // Decode Message
+        // 0==FAIL  1==OK  2==ACK
+        RisultatoRX = TestRX_Data();
+        if (RisultatoRX == OK)
+            {
+            myled = ON;
+            // Send ACK
+            for (n=0; n<10; n++)
+                {
+                RTX_TX();           // RTX-MID on TX mode
+                pc.printf("#K@");   // Send ACK
+                wait_ms(100);              
+                }
+            wait(1);
+            // Send ACK
+            for (n=0; n<20; n++)
+                {
+                RTX_TX();           // RTX-MID on TX mode           
+                pc.printf("#K@");   // Send ACK
+                wait_ms(100);              
+                }
+            RTX_RX();   // RTX-MID on RX mod
+            }
+        else if (RisultatoRX == ACK)
+            { 
+            myled = ON;
+            wait(3);
+            RTX_RX();   // RTX-MID on RX mod
+            }                       
+        else
+            myled = OFF;   
+                      
+    }
+}
+
+//
+// *************************************************************
+//
+
+
+//
+// Decode Message
+//
+// REMEMBER: 
+// before to use this function must put in RX mode the RTX
+//
+int TestRX_Data(void)
+    {
+    int OkFail=0; // 0==FAIL  1==OK  2==ACK
+    
+    if (CarStr[0]=='#' & CarStr[1]=='?' & CarStr[2]=='@')   
+        OkFail=1; // OK                
+    else if (CarStr[0]=='#' & CarStr[1]=='K' & CarStr[2]=='@') 
+        OkFail=2; // ACK 
+    else;
+         
+    if (PuntCar >= 3) // Reset the CarStr & PuntCar
+        { 
+        CarStr[0] = '0';
+        CarStr[1] = '1';
+        CarStr[2] = '2';
+        PuntCar = 0;                  
+        }
+        
+    return OkFail;         
+    }
+    
+    
+    
+void RTX_StartUp(void)
+    {
+    RTX_Enable = Disable;
+    wait_ms(10);        
+    RTX_Enable = Enable;
+    wait_ms(1); 
+    RTX_DIR = TX;     // RTX-MID in TX mode
+    wait_ms(1);       // Wait the stabilizzation of the transceiver
+    RTX_Enable = Disable;
+    wait_ms(10);        
+    RTX_Enable = Enable;
+    wait_ms(1);                                            
+    RTX_DIR = RX;     // RTX-MID in RX mode
+    wait_ms(1);       // Wait the stabilizzation of the transceiver             
+    RTX_Enable = Disable;
+    wait_ms(1);
+    RTX_Enable = Enable;
+    wait_ms(1);         
+    }
+
+void RTX_PowerDown(void)
+    {
+    RTX_Enable = Disable;
+    wait_ms(10);
+    }
+    
+void RTX_PowerON(void)
+    {
+    RTX_Enable = Disable;
+    wait_ms(1);
+    }    
+    
+void RTX_TX(void)
+    {
+    RTX_Enable = Disable;
+    wait_ms(10); 
+    RTX_Enable = Enable;
+    wait_ms(1);        
+    RTX_DIR = TX;     // RTX-MID in TX mode
+    wait_ms(10);      // Wait the stabilizzation of the transceiver     
+    }        
+
+void RTX_RX(void)
+    {
+    RTX_Enable = Disable;
+    wait_ms(10); 
+    RTX_Enable = Enable;
+    wait_ms(1);  
+    RTX_DIR = TX;     // RTX-MID in TX mode
+    wait_ms(1);       // Wait the stabilizzation of the transceiver
+    RTX_DIR = RX;     // RTX-MID in RX mode
+    wait_ms(1);
+    RTX_Enable = Disable;
+    wait_ms(10);       
+    RTX_Enable = Enable; 
+    wait_ms(1);                                                             
+    }
+    
diff -r 000000000000 -r e3fc2197fe07 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Jun 02 18:38:35 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/0b3ab51c8877
\ No newline at end of file