Divon Jay / Mbed 2 deprecated Group10_Prj2

Dependencies:   HCSR04 mbed nRF24L01P

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?

UserRevisionLine numberNew 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 }