pines

Dependencies:   HMC5883L111 RF24 RF24Network mbed motoresDC

Fork of RF24Network_Send by Akash Vibhute

Committer:
tabris2015
Date:
Fri Jun 10 22:16:34 2016 +0000
Revision:
4:6341e80540be
Parent:
3:d605536db315
pines maple;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tabris2015 4:6341e80540be 1 #define MAPLE_MINI
tabris2015 4:6341e80540be 2 #include "pines.h"
akashvibhute 0:3982c0e9eda1 3 #include "mbed.h"
tabris2015 4:6341e80540be 4 #include <HMC5883L.h>
akashvibhute 0:3982c0e9eda1 5 #include <RF24Network.h>
akashvibhute 2:926b93a68399 6 #include <RF24.h>
tabris2015 4:6341e80540be 7 #include <motoresDC.h>
akashvibhute 0:3982c0e9eda1 8
tabris2015 4:6341e80540be 9 Serial pc(TX3_PIN, RX3_PIN);
tabris2015 4:6341e80540be 10 HMC5883L brujula;
tabris2015 4:6341e80540be 11 InterruptIn boton(PB_8);
akashvibhute 0:3982c0e9eda1 12
tabris2015 4:6341e80540be 13 //motores D27 D31 D30 D26 D29 D28
tabris2015 4:6341e80540be 14 MotoresDC carro(PWM_L, CTRL1_L, CTRL2_L, PWM_R, CTRL1_R, CTRL2_R);
tabris2015 4:6341e80540be 15
tabris2015 4:6341e80540be 16 PwmOut led(PB_1);
tabris2015 4:6341e80540be 17 DigitalOut status(PB_2);
akashvibhute 0:3982c0e9eda1 18
akashvibhute 3:d605536db315 19 RF24 radio(spi_MOSI, spi_MISO, spi_SCK, nrf_CE, nrf_CSN );
akashvibhute 0:3982c0e9eda1 20
akashvibhute 0:3982c0e9eda1 21 // Network uses that radio
akashvibhute 0:3982c0e9eda1 22 RF24Network network(radio);
akashvibhute 0:3982c0e9eda1 23
akashvibhute 0:3982c0e9eda1 24 // Address of our node
akashvibhute 3:d605536db315 25 const uint16_t this_node = 01;
akashvibhute 0:3982c0e9eda1 26 // Address of the other node
akashvibhute 3:d605536db315 27 const uint16_t other_node = 00;
akashvibhute 2:926b93a68399 28 // How often to send payload packet to the other unit
akashvibhute 3:d605536db315 29 const unsigned long interval = 100; //ms
akashvibhute 0:3982c0e9eda1 30 // When did we last send?
akashvibhute 0:3982c0e9eda1 31 unsigned long last_sent;
akashvibhute 1:5be48a9550c3 32 Timer t;
akashvibhute 0:3982c0e9eda1 33 // How many have we sent already
akashvibhute 0:3982c0e9eda1 34 unsigned long packets_sent;
akashvibhute 1:5be48a9550c3 35 Timer t_packet;
akashvibhute 0:3982c0e9eda1 36 // Structure of our payload
akashvibhute 2:926b93a68399 37 struct payload_t
akashvibhute 0:3982c0e9eda1 38 {
akashvibhute 2:926b93a68399 39 unsigned long ms;
akashvibhute 2:926b93a68399 40 unsigned long counter;
tabris2015 4:6341e80540be 41 double heading;
akashvibhute 0:3982c0e9eda1 42 };
akashvibhute 0:3982c0e9eda1 43
tabris2015 4:6341e80540be 44 volatile double heading;
tabris2015 4:6341e80540be 45 volatile unsigned int flag = 0;
tabris2015 4:6341e80540be 46 // functions
tabris2015 4:6341e80540be 47 void toggle(void)
akashvibhute 0:3982c0e9eda1 48 {
tabris2015 4:6341e80540be 49 flag = 1;
tabris2015 4:6341e80540be 50 heading = brujula.getHeading();
tabris2015 4:6341e80540be 51 }
tabris2015 4:6341e80540be 52
tabris2015 4:6341e80540be 53 void initP()
tabris2015 4:6341e80540be 54 {
tabris2015 4:6341e80540be 55 led = 1;
tabris2015 4:6341e80540be 56 boton.fall(toggle);
tabris2015 4:6341e80540be 57 brujula.init();
tabris2015 4:6341e80540be 58 carro.conducir(1);
akashvibhute 0:3982c0e9eda1 59 wait_ms(1000);
tabris2015 4:6341e80540be 60 carro.conducir(0);
tabris2015 4:6341e80540be 61 led = 0;
tabris2015 4:6341e80540be 62 wait_ms(500);
tabris2015 4:6341e80540be 63 led = 1;
akashvibhute 0:3982c0e9eda1 64 radio.begin();
akashvibhute 0:3982c0e9eda1 65 network.begin(/*channel*/ 90, /*node address*/ this_node);
tabris2015 4:6341e80540be 66 carro.conducir(-1);
akashvibhute 0:3982c0e9eda1 67 wait_ms(2000);
akashvibhute 1:5be48a9550c3 68 t.start();
akashvibhute 1:5be48a9550c3 69 t_packet.start();
tabris2015 4:6341e80540be 70 status = 0;
tabris2015 4:6341e80540be 71 led = 0;
tabris2015 4:6341e80540be 72 carro.conducir(0);
tabris2015 4:6341e80540be 73 }
tabris2015 4:6341e80540be 74
tabris2015 4:6341e80540be 75 void checkMessage()
tabris2015 4:6341e80540be 76 {
tabris2015 4:6341e80540be 77 while ( network.available() )
tabris2015 4:6341e80540be 78 {
tabris2015 4:6341e80540be 79 // If so, grab it and print it out
tabris2015 4:6341e80540be 80 RF24NetworkHeader header_rx;
tabris2015 4:6341e80540be 81 payload_t payload_rx;
tabris2015 4:6341e80540be 82 network.read(header_rx,&payload_rx,sizeof(payload_rx));
tabris2015 4:6341e80540be 83 carro.conducir(payload_rx.heading / 360.0);
tabris2015 4:6341e80540be 84 status = abs(payload_rx.heading) < 5.0 ? 1 : 0;
tabris2015 4:6341e80540be 85 }
tabris2015 4:6341e80540be 86 }
tabris2015 4:6341e80540be 87 //------
tabris2015 4:6341e80540be 88
tabris2015 4:6341e80540be 89 bool sendMessage(double angulo)
tabris2015 4:6341e80540be 90 {
tabris2015 4:6341e80540be 91 led = !led;
tabris2015 4:6341e80540be 92 t.reset();
tabris2015 4:6341e80540be 93
tabris2015 4:6341e80540be 94 payload_t payload_tx;
tabris2015 4:6341e80540be 95 payload_tx.ms = t_packet.read_ms();
tabris2015 4:6341e80540be 96 payload_tx.counter = packets_sent++;
tabris2015 4:6341e80540be 97 payload_tx.heading = angulo;
tabris2015 4:6341e80540be 98
tabris2015 4:6341e80540be 99 RF24NetworkHeader header_tx(/*to node*/ other_node);
tabris2015 4:6341e80540be 100 bool ok = network.write(header_tx,&payload_tx,sizeof(payload_tx));
tabris2015 4:6341e80540be 101 flag = 0;
tabris2015 4:6341e80540be 102 led = 0;
tabris2015 4:6341e80540be 103 return ok;
tabris2015 4:6341e80540be 104 }
tabris2015 4:6341e80540be 105 int main()
tabris2015 4:6341e80540be 106 {
tabris2015 4:6341e80540be 107 initP();
tabris2015 4:6341e80540be 108
tabris2015 4:6341e80540be 109
akashvibhute 2:926b93a68399 110 while(1)
akashvibhute 0:3982c0e9eda1 111 {
akashvibhute 0:3982c0e9eda1 112 // Pump the network regularly
akashvibhute 0:3982c0e9eda1 113 network.update();
tabris2015 4:6341e80540be 114 checkMessage();
akashvibhute 1:5be48a9550c3 115 /* If it's time to send a message, send it! */
tabris2015 4:6341e80540be 116 double angulo = brujula.getHeading();
tabris2015 4:6341e80540be 117 led = angulo / 360.0;
akashvibhute 1:5be48a9550c3 118 unsigned long now = t.read_ms();
tabris2015 4:6341e80540be 119 if ( (now - last_sent) > interval )
akashvibhute 1:5be48a9550c3 120 {
tabris2015 4:6341e80540be 121 last_sent = now;
tabris2015 4:6341e80540be 122 bool ok = sendMessage(angulo);
akashvibhute 2:926b93a68399 123 }
tabris2015 4:6341e80540be 124
tabris2015 4:6341e80540be 125 /*
tabris2015 4:6341e80540be 126 if(abs(angulo) < 4)
tabris2015 4:6341e80540be 127 {
tabris2015 4:6341e80540be 128 led = 1;
tabris2015 4:6341e80540be 129 }
tabris2015 4:6341e80540be 130 else
tabris2015 4:6341e80540be 131 {
tabris2015 4:6341e80540be 132 led = 0;
tabris2015 4:6341e80540be 133 }
tabris2015 4:6341e80540be 134 */
akashvibhute 0:3982c0e9eda1 135 }
akashvibhute 2:926b93a68399 136
akashvibhute 0:3982c0e9eda1 137 }