pines
Dependencies: HMC5883L111 RF24 RF24Network mbed motoresDC
Fork of RF24Network_Send by
main.cpp
00001 #define MAPLE_MINI 00002 #include "pines.h" 00003 #include "mbed.h" 00004 #include <HMC5883L.h> 00005 #include <RF24Network.h> 00006 #include <RF24.h> 00007 #include <motoresDC.h> 00008 00009 Serial pc(TX3_PIN, RX3_PIN); 00010 HMC5883L brujula; 00011 InterruptIn boton(PB_8); 00012 00013 //motores D27 D31 D30 D26 D29 D28 00014 MotoresDC carro(PWM_L, CTRL1_L, CTRL2_L, PWM_R, CTRL1_R, CTRL2_R); 00015 00016 PwmOut led(PB_1); 00017 DigitalOut status(PB_2); 00018 00019 RF24 radio(spi_MOSI, spi_MISO, spi_SCK, nrf_CE, nrf_CSN ); 00020 00021 // Network uses that radio 00022 RF24Network network(radio); 00023 00024 // Address of our node 00025 const uint16_t this_node = 01; 00026 // Address of the other node 00027 const uint16_t other_node = 00; 00028 // How often to send payload packet to the other unit 00029 const unsigned long interval = 100; //ms 00030 // When did we last send? 00031 unsigned long last_sent; 00032 Timer t; 00033 // How many have we sent already 00034 unsigned long packets_sent; 00035 Timer t_packet; 00036 // Structure of our payload 00037 struct payload_t 00038 { 00039 unsigned long ms; 00040 unsigned long counter; 00041 double heading; 00042 }; 00043 00044 volatile double heading; 00045 volatile unsigned int flag = 0; 00046 // functions 00047 void toggle(void) 00048 { 00049 flag = 1; 00050 heading = brujula.getHeading(); 00051 } 00052 00053 void initP() 00054 { 00055 led = 1; 00056 boton.fall(toggle); 00057 brujula.init(); 00058 carro.conducir(1); 00059 wait_ms(1000); 00060 carro.conducir(0); 00061 led = 0; 00062 wait_ms(500); 00063 led = 1; 00064 radio.begin(); 00065 network.begin(/*channel*/ 90, /*node address*/ this_node); 00066 carro.conducir(-1); 00067 wait_ms(2000); 00068 t.start(); 00069 t_packet.start(); 00070 status = 0; 00071 led = 0; 00072 carro.conducir(0); 00073 } 00074 00075 void checkMessage() 00076 { 00077 while ( network.available() ) 00078 { 00079 // If so, grab it and print it out 00080 RF24NetworkHeader header_rx; 00081 payload_t payload_rx; 00082 network.read(header_rx,&payload_rx,sizeof(payload_rx)); 00083 carro.conducir(payload_rx.heading / 360.0); 00084 status = abs(payload_rx.heading) < 5.0 ? 1 : 0; 00085 } 00086 } 00087 //------ 00088 00089 bool sendMessage(double angulo) 00090 { 00091 led = !led; 00092 t.reset(); 00093 00094 payload_t payload_tx; 00095 payload_tx.ms = t_packet.read_ms(); 00096 payload_tx.counter = packets_sent++; 00097 payload_tx.heading = angulo; 00098 00099 RF24NetworkHeader header_tx(/*to node*/ other_node); 00100 bool ok = network.write(header_tx,&payload_tx,sizeof(payload_tx)); 00101 flag = 0; 00102 led = 0; 00103 return ok; 00104 } 00105 int main() 00106 { 00107 initP(); 00108 00109 00110 while(1) 00111 { 00112 // Pump the network regularly 00113 network.update(); 00114 checkMessage(); 00115 /* If it's time to send a message, send it! */ 00116 double angulo = brujula.getHeading(); 00117 led = angulo / 360.0; 00118 unsigned long now = t.read_ms(); 00119 if ( (now - last_sent) > interval ) 00120 { 00121 last_sent = now; 00122 bool ok = sendMessage(angulo); 00123 } 00124 00125 /* 00126 if(abs(angulo) < 4) 00127 { 00128 led = 1; 00129 } 00130 else 00131 { 00132 led = 0; 00133 } 00134 */ 00135 } 00136 00137 }
Generated on Thu Jul 14 2022 00:40:42 by 1.7.2