pines
Dependencies: HMC5883L111 RF24 RF24Network mbed motoresDC
Fork of RF24Network_Send by
main.cpp@4:6341e80540be, 2016-06-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |