Ohnishi_Gundan / Mbed 2 deprecated Master-FM

Dependencies:   MODSERIAL mbed-rtos mbed

Fork of Master by Ohnishi_Gundan

Committer:
9uS7
Date:
Fri Sep 12 08:08:21 2014 +0000
Revision:
4:aaaadb45cbd9
Parent:
3:12e1f116ea42
Child:
5:37733f175430
09/12/17

Who changed what in which revision?

UserRevisionLine numberNew contents of line
9uS7 0:4f07ba929908 1 #include "mbed.h"
9uS7 0:4f07ba929908 2 #include "bluetooth.h"
9uS7 2:c610e1a7fbcd 3 #include "control.h"
9uS7 0:4f07ba929908 4
9uS7 3:12e1f116ea42 5 //master
9uS7 1:e1cfb5850088 6 Serial bt(p13, p14); // tx, rx
9uS7 3:12e1f116ea42 7 //slave
9uS7 3:12e1f116ea42 8 //Serial bt(p28, p27);
9uS7 3:12e1f116ea42 9
9uS7 4:aaaadb45cbd9 10 Serial pc(USBTX, USBRX); // tx, rx
9uS7 4:aaaadb45cbd9 11
9uS7 3:12e1f116ea42 12 DigitalOut l1(LED1);
9uS7 4:aaaadb45cbd9 13 DigitalOut l2(LED2);
9uS7 4:aaaadb45cbd9 14 DigitalOut l4(LED4);
9uS7 0:4f07ba929908 15
9uS7 1:e1cfb5850088 16 void btSetup(int role)
9uS7 0:4f07ba929908 17 {
9uS7 1:e1cfb5850088 18 if( role==BT_MASTER ){
9uS7 1:e1cfb5850088 19 //if this device is the master
9uS7 1:e1cfb5850088 20 bt.baud(9600);
9uS7 1:e1cfb5850088 21 bt.printf("$$$");
9uS7 1:e1cfb5850088 22 wait(0.5);
9uS7 1:e1cfb5850088 23 bt.printf("C\r");
9uS7 1:e1cfb5850088 24 wait(0.5);
9uS7 1:e1cfb5850088 25 }
9uS7 1:e1cfb5850088 26 else{
9uS7 1:e1cfb5850088 27 //if this device is the slave
9uS7 3:12e1f116ea42 28 bt.attach( slaveRecieve, Serial::RxIrq );
9uS7 3:12e1f116ea42 29 }
9uS7 2:c610e1a7fbcd 30 }
9uS7 3:12e1f116ea42 31
9uS7 3:12e1f116ea42 32 void sync(char option, char* b_data, float* f_data)
9uS7 2:c610e1a7fbcd 33 {
9uS7 4:aaaadb45cbd9 34 char pac[PACK_SIZE]={};
9uS7 3:12e1f116ea42 35 Cvt temp;
9uS7 3:12e1f116ea42 36
9uS7 3:12e1f116ea42 37 //making pac
9uS7 3:12e1f116ea42 38 pac[0] = option;
9uS7 3:12e1f116ea42 39 if( option==SYNC_MOTOR ){
9uS7 3:12e1f116ea42 40 //PACK: [option/function/pwm*4]
9uS7 3:12e1f116ea42 41 //function
9uS7 3:12e1f116ea42 42 pac[1]=b_data[0];
9uS7 3:12e1f116ea42 43 //pwm
9uS7 3:12e1f116ea42 44 temp.fl = f_data[0];
9uS7 3:12e1f116ea42 45 for( int i=0 ; i<4 ; i++ ){
9uS7 3:12e1f116ea42 46 pac[2+i] = temp.byte[i];
9uS7 3:12e1f116ea42 47 }
9uS7 3:12e1f116ea42 48 }
9uS7 3:12e1f116ea42 49 else if( option==SYNC_FM ){
9uS7 3:12e1f116ea42 50 //PACK: [option/request]
9uS7 3:12e1f116ea42 51 pac[1]=b_data[0]; //request
9uS7 1:e1cfb5850088 52 }
9uS7 2:c610e1a7fbcd 53 else{
9uS7 3:12e1f116ea42 54 ;
9uS7 3:12e1f116ea42 55 }
9uS7 3:12e1f116ea42 56
9uS7 3:12e1f116ea42 57 //send pac
9uS7 3:12e1f116ea42 58 for( int i=0 ; i<PACK_SIZE ; i++ ){
9uS7 4:aaaadb45cbd9 59 bt.putc( pac[i] );
9uS7 4:aaaadb45cbd9 60 pc.printf("%02x ",pac[i]);
9uS7 2:c610e1a7fbcd 61 }
9uS7 4:aaaadb45cbd9 62 pc.printf("\n");
9uS7 2:c610e1a7fbcd 63 }
9uS7 3:12e1f116ea42 64
9uS7 3:12e1f116ea42 65 void slaveRecieve(void)
9uS7 3:12e1f116ea42 66 {
9uS7 4:aaaadb45cbd9 67 static int i=0;
9uS7 4:aaaadb45cbd9 68 char buf[PACK_SIZE]={};
9uS7 4:aaaadb45cbd9 69 char pac[PACK_SIZE]={};
9uS7 4:aaaadb45cbd9 70 float val[PACK_SIZE/4+1]={};
9uS7 3:12e1f116ea42 71 Cvt temp;
9uS7 3:12e1f116ea42 72
9uS7 3:12e1f116ea42 73 wait(1/1000.0);
9uS7 3:12e1f116ea42 74
9uS7 4:aaaadb45cbd9 75 l1=( l1 ? 0 : 1 );
9uS7 3:12e1f116ea42 76
9uS7 3:12e1f116ea42 77 for( int i=0 ; i<PACK_SIZE ; i++ ){
9uS7 3:12e1f116ea42 78 buf[i]=bt.getc();
9uS7 3:12e1f116ea42 79 }
9uS7 3:12e1f116ea42 80
9uS7 3:12e1f116ea42 81 if( buf[0]==SYNC_MOTOR ){
9uS7 3:12e1f116ea42 82 //PACK: [option/function/pwm*4]
9uS7 3:12e1f116ea42 83 //pwm
9uS7 3:12e1f116ea42 84 for( int i=0 ; i<4 ; i++ ){
9uS7 3:12e1f116ea42 85 temp.byte[i]=buf[1+i];
9uS7 3:12e1f116ea42 86 }
9uS7 3:12e1f116ea42 87 motor( buf[1], temp.fl );
9uS7 3:12e1f116ea42 88 }
9uS7 3:12e1f116ea42 89 else if( buf[0]==SYNC_FM ){
9uS7 3:12e1f116ea42 90 //PACK: [option/request]
9uS7 3:12e1f116ea42 91 ; //not yet
9uS7 3:12e1f116ea42 92 }
9uS7 3:12e1f116ea42 93 else if( buf[0]==SYNC_SENSOR ){
9uS7 3:12e1f116ea42 94 getSensor( &(val[0]), &(val[1]) );
9uS7 3:12e1f116ea42 95 //PACK: [option/ir*4/fsr*4];
9uS7 3:12e1f116ea42 96 //option
9uS7 3:12e1f116ea42 97 pac[0] = SYNC_SENSOR;
9uS7 3:12e1f116ea42 98 //ir
9uS7 3:12e1f116ea42 99 temp.fl = val[0];
9uS7 3:12e1f116ea42 100 temp.fl = ++i%2;
9uS7 3:12e1f116ea42 101 for( int i=0 ; i<4 ; i++ ){
9uS7 3:12e1f116ea42 102 pac[1+i] = temp.byte[i];
9uS7 3:12e1f116ea42 103 }
9uS7 3:12e1f116ea42 104 //fsr
9uS7 3:12e1f116ea42 105 temp.fl = val[1];
9uS7 3:12e1f116ea42 106 for( int i=0 ; i<4 ; i++ ){
9uS7 3:12e1f116ea42 107 pac[5+i] = temp.byte[i];
9uS7 3:12e1f116ea42 108 }
9uS7 3:12e1f116ea42 109
9uS7 3:12e1f116ea42 110 //send pac
9uS7 3:12e1f116ea42 111 for( int i=0 ; i<PACK_SIZE ; i++ ){
9uS7 3:12e1f116ea42 112 bt.putc( pac[i] );
9uS7 4:aaaadb45cbd9 113 pc.printf("%02x ",pac[i]);
9uS7 3:12e1f116ea42 114 }
9uS7 4:aaaadb45cbd9 115 pc.printf("\n");
9uS7 4:aaaadb45cbd9 116
9uS7 4:aaaadb45cbd9 117 l2 = l2 ? 0 : 1;
9uS7 3:12e1f116ea42 118 }
9uS7 3:12e1f116ea42 119 else if( buf[0]==SYNC_FM ){
9uS7 3:12e1f116ea42 120 ; //not yet
9uS7 3:12e1f116ea42 121
9uS7 3:12e1f116ea42 122 //send pac
9uS7 3:12e1f116ea42 123 for( int i=0 ; i<PACK_SIZE ; i++ ){
9uS7 3:12e1f116ea42 124 bt.putc( pac[i] );
9uS7 3:12e1f116ea42 125 }
9uS7 3:12e1f116ea42 126 }
9uS7 3:12e1f116ea42 127 }
9uS7 3:12e1f116ea42 128
9uS7 3:12e1f116ea42 129 void receiveSensor(float* _ir, float* _fsr)
9uS7 3:12e1f116ea42 130 {
9uS7 4:aaaadb45cbd9 131 char buf[PACK_SIZE]={};
9uS7 3:12e1f116ea42 132 Cvt temp;
9uS7 3:12e1f116ea42 133
9uS7 4:aaaadb45cbd9 134 wait(0.05);
9uS7 4:aaaadb45cbd9 135
9uS7 4:aaaadb45cbd9 136 l1= l1 ? 0 : 1;
9uS7 3:12e1f116ea42 137
9uS7 4:aaaadb45cbd9 138 for( int i=0 ; ; i++ ){
9uS7 4:aaaadb45cbd9 139 if( bt.readable() ){
9uS7 4:aaaadb45cbd9 140 pc.printf("readable\n");
9uS7 4:aaaadb45cbd9 141 break;
9uS7 4:aaaadb45cbd9 142 }
9uS7 4:aaaadb45cbd9 143 else if( i>5 ){
9uS7 4:aaaadb45cbd9 144 l4 = 0;
9uS7 4:aaaadb45cbd9 145 pc.printf("enable\n");
9uS7 4:aaaadb45cbd9 146 return;
9uS7 4:aaaadb45cbd9 147 }
9uS7 4:aaaadb45cbd9 148 }
9uS7 4:aaaadb45cbd9 149
9uS7 4:aaaadb45cbd9 150 l4 = 1;
9uS7 4:aaaadb45cbd9 151
9uS7 3:12e1f116ea42 152 //Read
9uS7 3:12e1f116ea42 153 for( int i=0 ; i<PACK_SIZE ; i++ ){
9uS7 3:12e1f116ea42 154 buf[i]=bt.getc();
9uS7 3:12e1f116ea42 155 }
9uS7 3:12e1f116ea42 156
9uS7 4:aaaadb45cbd9 157 return;
9uS7 4:aaaadb45cbd9 158
9uS7 3:12e1f116ea42 159 //PACK: [option/ir*4/fsr*4];
9uS7 3:12e1f116ea42 160 //option
9uS7 3:12e1f116ea42 161 if( buf[0]!=SYNC_SENSOR ){
9uS7 3:12e1f116ea42 162 return;
9uS7 3:12e1f116ea42 163 }
9uS7 3:12e1f116ea42 164
9uS7 3:12e1f116ea42 165 //ir
9uS7 3:12e1f116ea42 166 for( int i=0 ; i<4 ; i++ ){
9uS7 3:12e1f116ea42 167 temp.byte[i]=buf[1+i];
9uS7 3:12e1f116ea42 168 }
9uS7 3:12e1f116ea42 169 *_ir = temp.fl;
9uS7 3:12e1f116ea42 170
9uS7 3:12e1f116ea42 171 //fsr
9uS7 3:12e1f116ea42 172 for( int i=0 ; i<4 ; i++ ){
9uS7 3:12e1f116ea42 173 temp.byte[i] = buf[5+i];
9uS7 3:12e1f116ea42 174 }
9uS7 3:12e1f116ea42 175 *_fsr = temp.fl;
9uS7 3:12e1f116ea42 176
9uS7 3:12e1f116ea42 177 }