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.
Revision 1:a89ab6413920, committed 2018-09-10
- Comitter:
- spin7ion
- Date:
- Mon Sep 10 20:11:12 2018 +0000
- Parent:
- 0:fb01b60e139b
- Commit message:
- Communication works
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r fb01b60e139b -r a89ab6413920 main.cpp
--- a/main.cpp Tue Aug 28 16:57:38 2018 +0000
+++ b/main.cpp Mon Sep 10 20:11:12 2018 +0000
@@ -4,6 +4,9 @@
#define CHANNELS_NUMBER 12
#define CMD_VALUE 65535
#define CMD_GET_STATUS 1
+#define CMD_INITIALIZE 2
+
+#define RCV_TIMEOUT_MS 150
nRF24L01P radio( PB_5, // MOSI
PB_4, // MISO
@@ -25,6 +28,17 @@
uint16_t channels[CHANNELS_NUMBER];
uint16_t buffer [CHANNELS_NUMBER];
+Timer t;
+int timeOffsetMs=0;
+
+int getSubmarineTimeMs(){
+ return t.read_ms()+timeOffsetMs;
+}
+
+void updateTimeOffset(int subTime){
+ timeOffsetMs = subTime-t.read_ms();
+}
+
void readChannels() {
channels[0]=(uint16_t)(1024*CH1.read());
channels[1]=(uint16_t)(1024*CH2.read());
@@ -32,10 +46,34 @@
channels[3]=(uint16_t)(1024*CH4.read());
}
+bool isInitializated(uint16_t state) {
+ if((state>>8) & 0x01) return true;
+ return false;
+}
+
void zeroBuffer(){
memset(buffer, 0, sizeof(buffer));
}
+bool receiveBuffer(){
+ radio.setReceiveMode();
+
+ int startTime=t.read_ms();
+
+ while( !radio.readable() && t.read_ms()-startTime < RCV_TIMEOUT_MS);
+
+ if(radio.readable())
+ {
+ pc.printf("Availiable %d\r\n",radio.readable());
+ zeroBuffer();
+ int rxDataCnt = radio.read( NRF24L01P_PIPE_P0, (char*)buffer, sizeof( buffer ) );
+
+
+ return true;
+ }
+ return false;
+}
+
void askFor(uint16_t query) {
zeroBuffer();
buffer[0] = CMD_VALUE;
@@ -53,7 +91,7 @@
}
int main() {
-
+ myled=0;
pc.baud(115200);
pc.format();
pc.printf("Hello world\r\n");
@@ -73,10 +111,12 @@
radio.setTransferSize( CHANNELS_NUMBER*sizeof(uint16_t) );
radio.enable();
- //CH1.read()
- //CH2.read()
- //CH3.read()
- //CH4.read()
+ for(int i=4;i>0;i--){
+ myled=!myled;
+ wait(0.5);
+ }
+
+ t.start();
while(1) {
readChannels();
@@ -87,22 +127,32 @@
if (bytesWritten<2*CHANNELS_NUMBER){
pc.printf("Transmit error");
}
+
askFor(CMD_GET_STATUS);
- //wait(0.1);
- radio.setReceiveMode();
- //wait(0.1);
- while( !radio.readable() );
- {
- pc.printf("Availiable %d\r\n",radio.readable());
- zeroBuffer();
- int rxDataCnt = radio.read( NRF24L01P_PIPE_P0, (char*)buffer, sizeof( buffer ) );
- pc.printf("Telem %s\r\n",(char*)buffer);
+ if (!receiveBuffer()) {
+ pc.printf("Timeout\r\n",(char*)buffer);
+ myled=1;
+ continue;
}
- //wait(0.5);
+ myled=0;
+ pc.printf("Received telemetry: %s\r\n",(char*)buffer);
+ if (!isInitializated(buffer[0])){
+ pc.printf("Need initialization\r\n");
+ updateTimeOffset(buffer[1]);
+ askFor(CMD_INITIALIZE);
+ if (!receiveBuffer()) {
+ pc.printf("Timeout\r\n",(char*)buffer);
+ continue;
+ }
+
+ } else {
+
+ }
- /*myled = 1;
- wait(0.01);
- myled = 0;
- wait(0.01);*/
+ /*
+ value & 0xff;
+ (value >> 8) & 0xff;
+ */
+ //pc.printf("Telem %s\r\n",(char*)buffer);
}
}