Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HCSR04 mbed nRF24L01P
mian.cpp@0:e8f4e84196c5, 2018-04-22 (annotated)
- Committer:
- divonjin
- Date:
- Sun Apr 22 20:18:52 2018 +0000
- Revision:
- 0:e8f4e84196c5
- Child:
- 1:fca5426ac19e
group 10 ece595
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| divonjin | 0:e8f4e84196c5 | 1 | /******************************************************************************* |
| divonjin | 0:e8f4e84196c5 | 2 | ECE 595 2018 Spring |
| divonjin | 0:e8f4e84196c5 | 3 | Project 2 |
| divonjin | 0:e8f4e84196c5 | 4 | Group 10 |
| divonjin | 0:e8f4e84196c5 | 5 | last Update 4/22/2018 |
| divonjin | 0:e8f4e84196c5 | 6 | memo: |
| divonjin | 0:e8f4e84196c5 | 7 | *******************************************************************************/ |
| divonjin | 0:e8f4e84196c5 | 8 | |
| divonjin | 0:e8f4e84196c5 | 9 | #include "mbed.h" |
| divonjin | 0:e8f4e84196c5 | 10 | #include "HCSR04.h" |
| divonjin | 0:e8f4e84196c5 | 11 | #include "nRF24L01P.h" |
| divonjin | 0:e8f4e84196c5 | 12 | |
| divonjin | 0:e8f4e84196c5 | 13 | |
| divonjin | 0:e8f4e84196c5 | 14 | |
| divonjin | 0:e8f4e84196c5 | 15 | #define PIN_TRIGGER (D10) |
| divonjin | 0:e8f4e84196c5 | 16 | #define PIN_ECHO (D9) |
| divonjin | 0:e8f4e84196c5 | 17 | #define PIN_PICTURE (D7) |
| divonjin | 0:e8f4e84196c5 | 18 | |
| divonjin | 0:e8f4e84196c5 | 19 | #define TRANSFER_SIZE 4 |
| divonjin | 0:e8f4e84196c5 | 20 | |
| divonjin | 0:e8f4e84196c5 | 21 | //rf reciever module setting |
| divonjin | 0:e8f4e84196c5 | 22 | nRF24L01P my_nrf24l01p(PTD2, PTD3, PTD1, PTD0, PTC4, PTC12); // mosi, miso, sck, csn, ce, irq |
| divonjin | 0:e8f4e84196c5 | 23 | |
| divonjin | 0:e8f4e84196c5 | 24 | DigitalOut myled1(LED_GREEN); |
| divonjin | 0:e8f4e84196c5 | 25 | DigitalOut myled2(LED_RED); |
| divonjin | 0:e8f4e84196c5 | 26 | |
| divonjin | 0:e8f4e84196c5 | 27 | |
| divonjin | 0:e8f4e84196c5 | 28 | |
| divonjin | 0:e8f4e84196c5 | 29 | HCSR04 rangeFinder(PIN_TRIGGER, PIN_ECHO); |
| divonjin | 0:e8f4e84196c5 | 30 | DigitalOut buzzer(D2); |
| divonjin | 0:e8f4e84196c5 | 31 | DigitalIn soundDete(D8); |
| divonjin | 0:e8f4e84196c5 | 32 | DigitalIn touch(D4); |
| divonjin | 0:e8f4e84196c5 | 33 | DigitalOut Picamera(PIN_PICTURE); |
| divonjin | 0:e8f4e84196c5 | 34 | Serial pc(USBTX,USBRX); |
| divonjin | 0:e8f4e84196c5 | 35 | |
| divonjin | 0:e8f4e84196c5 | 36 | float range; |
| divonjin | 0:e8f4e84196c5 | 37 | float tooClose=0.3; |
| divonjin | 0:e8f4e84196c5 | 38 | int warning = 0; |
| divonjin | 0:e8f4e84196c5 | 39 | int newevent =0; |
| divonjin | 0:e8f4e84196c5 | 40 | |
| divonjin | 0:e8f4e84196c5 | 41 | void blink(){ |
| divonjin | 0:e8f4e84196c5 | 42 | buzzer = 1; |
| divonjin | 0:e8f4e84196c5 | 43 | wait(.3); |
| divonjin | 0:e8f4e84196c5 | 44 | buzzer = 0; |
| divonjin | 0:e8f4e84196c5 | 45 | } |
| divonjin | 0:e8f4e84196c5 | 46 | |
| divonjin | 0:e8f4e84196c5 | 47 | void takePic(){ |
| divonjin | 0:e8f4e84196c5 | 48 | Picamera = 1; |
| divonjin | 0:e8f4e84196c5 | 49 | wait(.5); |
| divonjin | 0:e8f4e84196c5 | 50 | Picamera = 0; |
| divonjin | 0:e8f4e84196c5 | 51 | pc.printf("takephoto\n\r"); |
| divonjin | 0:e8f4e84196c5 | 52 | } |
| divonjin | 0:e8f4e84196c5 | 53 | |
| divonjin | 0:e8f4e84196c5 | 54 | void detectedsound(){ |
| divonjin | 0:e8f4e84196c5 | 55 | if( soundDete == 1){ |
| divonjin | 0:e8f4e84196c5 | 56 | if(warning == 0){ |
| divonjin | 0:e8f4e84196c5 | 57 | warning = 1; |
| divonjin | 0:e8f4e84196c5 | 58 | newevent = 1; |
| divonjin | 0:e8f4e84196c5 | 59 | } |
| divonjin | 0:e8f4e84196c5 | 60 | } |
| divonjin | 0:e8f4e84196c5 | 61 | } |
| divonjin | 0:e8f4e84196c5 | 62 | |
| divonjin | 0:e8f4e84196c5 | 63 | void checkrange(){ |
| divonjin | 0:e8f4e84196c5 | 64 | rangeFinder.startMeas(); |
| divonjin | 0:e8f4e84196c5 | 65 | wait(0.1); |
| divonjin | 0:e8f4e84196c5 | 66 | if ( rangeFinder.getMeas(range) == RANGE_MEAS_VALID ) |
| divonjin | 0:e8f4e84196c5 | 67 | { |
| divonjin | 0:e8f4e84196c5 | 68 | if ( range < tooClose ){ |
| divonjin | 0:e8f4e84196c5 | 69 | if(warning == 0){ |
| divonjin | 0:e8f4e84196c5 | 70 | warning = 1; |
| divonjin | 0:e8f4e84196c5 | 71 | newevent = 1; |
| divonjin | 0:e8f4e84196c5 | 72 | } |
| divonjin | 0:e8f4e84196c5 | 73 | } |
| divonjin | 0:e8f4e84196c5 | 74 | else{ |
| divonjin | 0:e8f4e84196c5 | 75 | if (soundDete == 0){ |
| divonjin | 0:e8f4e84196c5 | 76 | warning = 0; |
| divonjin | 0:e8f4e84196c5 | 77 | } |
| divonjin | 0:e8f4e84196c5 | 78 | } |
| divonjin | 0:e8f4e84196c5 | 79 | } |
| divonjin | 0:e8f4e84196c5 | 80 | } |
| divonjin | 0:e8f4e84196c5 | 81 | |
| divonjin | 0:e8f4e84196c5 | 82 | void shutter() |
| divonjin | 0:e8f4e84196c5 | 83 | { |
| divonjin | 0:e8f4e84196c5 | 84 | if ( touch == 1){ |
| divonjin | 0:e8f4e84196c5 | 85 | takePic(); |
| divonjin | 0:e8f4e84196c5 | 86 | } |
| divonjin | 0:e8f4e84196c5 | 87 | } |
| divonjin | 0:e8f4e84196c5 | 88 | |
| divonjin | 0:e8f4e84196c5 | 89 | int main() |
| divonjin | 0:e8f4e84196c5 | 90 | { |
| divonjin | 0:e8f4e84196c5 | 91 | |
| divonjin | 0:e8f4e84196c5 | 92 | |
| divonjin | 0:e8f4e84196c5 | 93 | char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; |
| divonjin | 0:e8f4e84196c5 | 94 | int txDataCnt = 0; |
| divonjin | 0:e8f4e84196c5 | 95 | int rxDataCnt = 0; |
| divonjin | 0:e8f4e84196c5 | 96 | |
| divonjin | 0:e8f4e84196c5 | 97 | my_nrf24l01p.powerUp(); |
| divonjin | 0:e8f4e84196c5 | 98 | |
| divonjin | 0:e8f4e84196c5 | 99 | // Display the (default) setup of the nRF24L01+ chip |
| divonjin | 0:e8f4e84196c5 | 100 | pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); |
| divonjin | 0:e8f4e84196c5 | 101 | pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); |
| divonjin | 0:e8f4e84196c5 | 102 | pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); |
| divonjin | 0:e8f4e84196c5 | 103 | pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); |
| divonjin | 0:e8f4e84196c5 | 104 | pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); |
| divonjin | 0:e8f4e84196c5 | 105 | |
| divonjin | 0:e8f4e84196c5 | 106 | pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); |
| divonjin | 0:e8f4e84196c5 | 107 | |
| divonjin | 0:e8f4e84196c5 | 108 | my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); |
| divonjin | 0:e8f4e84196c5 | 109 | |
| divonjin | 0:e8f4e84196c5 | 110 | my_nrf24l01p.setReceiveMode(); |
| divonjin | 0:e8f4e84196c5 | 111 | my_nrf24l01p.enable(); |
| divonjin | 0:e8f4e84196c5 | 112 | |
| divonjin | 0:e8f4e84196c5 | 113 | |
| divonjin | 0:e8f4e84196c5 | 114 | |
| divonjin | 0:e8f4e84196c5 | 115 | while (1) |
| divonjin | 0:e8f4e84196c5 | 116 | { |
| divonjin | 0:e8f4e84196c5 | 117 | pc.printf("init\n\r"); |
| divonjin | 0:e8f4e84196c5 | 118 | detectedsound(); |
| divonjin | 0:e8f4e84196c5 | 119 | checkrange(); |
| divonjin | 0:e8f4e84196c5 | 120 | if ( warning == 1 ){ |
| divonjin | 0:e8f4e84196c5 | 121 | blink(); |
| divonjin | 0:e8f4e84196c5 | 122 | if ( newevent == 1){ |
| divonjin | 0:e8f4e84196c5 | 123 | takePic(); |
| divonjin | 0:e8f4e84196c5 | 124 | newevent =0; |
| divonjin | 0:e8f4e84196c5 | 125 | } |
| divonjin | 0:e8f4e84196c5 | 126 | else{ |
| divonjin | 0:e8f4e84196c5 | 127 | shutter(); |
| divonjin | 0:e8f4e84196c5 | 128 | } |
| divonjin | 0:e8f4e84196c5 | 129 | } |
| divonjin | 0:e8f4e84196c5 | 130 | |
| divonjin | 0:e8f4e84196c5 | 131 | |
| divonjin | 0:e8f4e84196c5 | 132 | //this is for the transmission part of the code |
| divonjin | 0:e8f4e84196c5 | 133 | // If we've received anything over the host serial link... |
| divonjin | 0:e8f4e84196c5 | 134 | if ( pc.readable() ) { |
| divonjin | 0:e8f4e84196c5 | 135 | |
| divonjin | 0:e8f4e84196c5 | 136 | // ...add it to the transmit buffer |
| divonjin | 0:e8f4e84196c5 | 137 | |
| divonjin | 0:e8f4e84196c5 | 138 | if (warning == 1){ |
| divonjin | 0:e8f4e84196c5 | 139 | txData[txDataCnt++]= 'W'; |
| divonjin | 0:e8f4e84196c5 | 140 | } |
| divonjin | 0:e8f4e84196c5 | 141 | // If the transmit buffer is full |
| divonjin | 0:e8f4e84196c5 | 142 | if ( txDataCnt >= sizeof( txData ) ) { |
| divonjin | 0:e8f4e84196c5 | 143 | |
| divonjin | 0:e8f4e84196c5 | 144 | // Send the transmitbuffer via the nRF24L01+ |
| divonjin | 0:e8f4e84196c5 | 145 | my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt ); |
| divonjin | 0:e8f4e84196c5 | 146 | |
| divonjin | 0:e8f4e84196c5 | 147 | txDataCnt = 0; |
| divonjin | 0:e8f4e84196c5 | 148 | } |
| divonjin | 0:e8f4e84196c5 | 149 | |
| divonjin | 0:e8f4e84196c5 | 150 | // Toggle LED1 (to help debug Host -> nRF24L01+ communication) |
| divonjin | 0:e8f4e84196c5 | 151 | myled1 = !myled1; |
| divonjin | 0:e8f4e84196c5 | 152 | } |
| divonjin | 0:e8f4e84196c5 | 153 | |
| divonjin | 0:e8f4e84196c5 | 154 | |
| divonjin | 0:e8f4e84196c5 | 155 | ////this is for the recieving part of the code part of the code |
| divonjin | 0:e8f4e84196c5 | 156 | // If we've received anything in the nRF24L01+... |
| divonjin | 0:e8f4e84196c5 | 157 | if ( my_nrf24l01p.readable() ) { |
| divonjin | 0:e8f4e84196c5 | 158 | |
| divonjin | 0:e8f4e84196c5 | 159 | // ...read the data into the receive buffer |
| divonjin | 0:e8f4e84196c5 | 160 | rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) ); |
| divonjin | 0:e8f4e84196c5 | 161 | |
| divonjin | 0:e8f4e84196c5 | 162 | // Display the receive buffer contents via the host serial link |
| divonjin | 0:e8f4e84196c5 | 163 | for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) { |
| divonjin | 0:e8f4e84196c5 | 164 | |
| divonjin | 0:e8f4e84196c5 | 165 | pc.putc( rxData[i] ); |
| divonjin | 0:e8f4e84196c5 | 166 | } |
| divonjin | 0:e8f4e84196c5 | 167 | |
| divonjin | 0:e8f4e84196c5 | 168 | // Toggle LED2 (to help debug nRF24L01+ -> Host communication) |
| divonjin | 0:e8f4e84196c5 | 169 | myled2 = !myled2; |
| divonjin | 0:e8f4e84196c5 | 170 | } |
| divonjin | 0:e8f4e84196c5 | 171 | |
| divonjin | 0:e8f4e84196c5 | 172 | |
| divonjin | 0:e8f4e84196c5 | 173 | |
| divonjin | 0:e8f4e84196c5 | 174 | |
| divonjin | 0:e8f4e84196c5 | 175 | |
| divonjin | 0:e8f4e84196c5 | 176 | |
| divonjin | 0:e8f4e84196c5 | 177 | } |
| divonjin | 0:e8f4e84196c5 | 178 | } |