SHOW:
|
|
- or go back to the newest paste.
1 | /* | |
2 | * Project: nRF905 AVR/Arduino Library/Driver | |
3 | * Author: Zak Kemble, contact@zakkemble.co.uk | |
4 | * Copyright: (C) 2013 by Zak Kemble | |
5 | * License: GNU GPL v3 (see License.txt) | |
6 | * Web: http://blog.zakkemble.co.uk/nrf905-avrarduino-librarydriver/ | |
7 | */ | |
8 | ||
9 | /* | |
10 | * Turn the nRF905 on to transmit some data, wait for a reply, | |
11 | * turn off and wait for a second. | |
12 | * Output power is set to the lowest setting, receive sensitivity is | |
13 | * lowered and uses the power up/down feature of the nRF905. | |
14 | * | |
15 | * 7 -> CE | |
16 | * 8 -> PWR | |
17 | * 9 -> TXE | |
18 | * 2 -> CD | |
19 | * 3 -> DR | |
20 | * 10 -> CSN | |
21 | * 12 -> SO | |
22 | * 11 -> SI | |
23 | * 13 -> SCK | |
24 | */ | |
25 | ||
26 | #include <nRF905.h> | |
27 | #include <SPI.h> | |
28 | ||
29 | #define RXADDR {0xFE, 0x4C, 0xA6, 0xE5} // Address of this device (4 bytes) | |
30 | #define TXADDR {0x58, 0x6F, 0x2E, 0x10} // Address of device to send to (4 bytes) | |
31 | ||
32 | #define TIMEOUT 1000 // 1 second ping timeout | |
33 | ||
34 | void setup() | |
35 | { | |
36 | // Start up | |
37 | nRF905_init(); | |
38 | ||
39 | // Set address of this device | |
40 | byte addr[] = RXADDR; | |
41 | nRF905_setRXAddress(addr); | |
42 | ||
43 | // Lowest transmit level -10db | |
44 | nRF905_setTransmitPower(NRF905_PWR_n10); | |
45 | ||
46 | // Reduce receive sensitivity to save a few mA | |
47 | nRF905_setLowRxPower(NRF905_LOW_RX_ENABLE); | |
48 | ||
49 | // Put into receive mode | |
50 | nRF905_receive(); | |
51 | ||
52 | Serial.begin(9600); | |
53 | ||
54 | Serial.println(F("Client started")); | |
55 | } | |
56 | ||
57 | void loop() | |
58 | { | |
59 | static byte counter; | |
60 | ||
61 | // Make data | |
62 | char data[NRF905_MAX_PAYLOAD] = "test test"; | |
63 | ||
64 | // Turn on module | |
65 | nRF905_powerUp(); | |
66 | ||
67 | unsigned long startTime = millis(); | |
68 | ||
69 | // Set address of device to send to | |
70 | byte addr[] = TXADDR; | |
71 | nRF905_setTXAddress(addr); | |
72 | ||
73 | // Set payload data | |
74 | nRF905_setData(data, sizeof(data)); | |
75 | - | nRF905_setData((byte*)data, sizeof(data)); |
75 | + | |
76 | // Send payload (send fails if other transmissions are going on, keep trying until success) | |
77 | while(!nRF905_send()); | |
78 | ||
79 | // Put into receive mode | |
80 | nRF905_receive(); | |
81 | ||
82 | // Make buffer for reply | |
83 | char buffer[NRF905_MAX_PAYLOAD]; | |
84 | bool success; | |
85 | ||
86 | // Wait for reply with timeout | |
87 | unsigned long sendStartTime = millis(); | |
88 | while(1) | |
89 | { | |
90 | success = nRF905_getData(buffer, sizeof(buffer)); | |
91 | if(success)// Got data | |
92 | break; | |
93 | ||
94 | // Timeout | |
95 | if(millis() - sendStartTime > TIMEOUT) | |
96 | break; | |
97 | } | |
98 | ||
99 | // Turn off module | |
100 | nRF905_powerDown(); | |
101 | ||
102 | if(success) | |
103 | { | |
104 | unsigned int totalTime = millis() - startTime; | |
105 | Serial.print(F("Ping time: ")); | |
106 | Serial.print(totalTime); | |
107 | Serial.println(F("ms")); | |
108 | ||
109 | // Show raw data | |
110 | Serial.print(F("Raw: ")); | |
111 | Serial.write((byte*)buffer, sizeof(buffer)); | |
112 | - | nRF905_getData(buffer, sizeof(buffer)); |
112 | + | Serial.println(); |
113 | - | if(strcmp((char*)buffer, "test test") == 0) |
113 | + | |
114 | // Printout ping contents | |
115 | - | Serial.println("OK"); |
115 | + | |
116 | if(strncmp(buffer, "test test", sizeof(buffer)) == 0) | |
117 | - | else |
117 | + | Serial.println("OK"); |
118 | else | |
119 | - | Serial.println("Fail"); |
119 | + | Serial.println("Fail"); |
120 | } | |
121 | else | |
122 | Serial.println(F("Ping timed out")); | |
123 | ||
124 | delay(1000); | |
125 | } |