kubtss / Mbed 2 deprecated BIRD2017

Dependencies:   mbed-rtos mbed

Committer:
naoya1687
Date:
Wed Mar 01 14:34:27 2017 +0000
Revision:
34:770a6bbb4d63
Parent:
33:d939479e7b13
Child:
35:63ccdae58da4
ServoSend.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
naoya1687 30:6d3a78bc1925 1 #include "mbed.h"
naoya1687 30:6d3a78bc1925 2 #include "Global.h"
naoya1687 31:cef6ee7af014 3 #include "TweLite_Sensors.h"
naoya1687 30:6d3a78bc1925 4 #include <string>
naoya1687 33:d939479e7b13 5 #define CADENCEHEADER 0xf
naoya1687 33:d939479e7b13 6 #define ULTSONICHEADER 0xe
naoya1687 33:d939479e7b13 7 #define CADENCE 0
naoya1687 30:6d3a78bc1925 8 #define ULTSONIC 1
naoya1687 33:d939479e7b13 9
naoya1687 33:d939479e7b13 10 std::string TweLite_Sensors::str;
naoya1687 33:d939479e7b13 11
naoya1687 34:770a6bbb4d63 12 TweLite_Sensors::TweLite_Sensors(PinName tx, PinName rx) : twelite(tx,rx){
naoya1687 33:d939479e7b13 13 receivef=0;
naoya1687 33:d939479e7b13 14 request=0;
naoya1687 33:d939479e7b13 15 size=0;
naoya1687 34:770a6bbb4d63 16 twelite.baud(9600);
naoya1687 33:d939479e7b13 17 twelite.attach(this,&TweLite_Sensors::twelite_rx,Serial::RxIrq);
naoya1687 33:d939479e7b13 18 flipper.attach(this,&TweLite_Sensors::flip, 0.25);
naoya1687 30:6d3a78bc1925 19 }
naoya1687 30:6d3a78bc1925 20
naoya1687 33:d939479e7b13 21 void TweLite_Sensors::scan(){
naoya1687 33:d939479e7b13 22 while(size<9){wait_ms(1);}//ここを空にするとループを抜けなくなる
naoya1687 33:d939479e7b13 23 if(str[0]==CADENCEHEADER){//ヘッダ
naoya1687 33:d939479e7b13 24 for(int i=0;i<8;i++){
naoya1687 33:d939479e7b13 25 data[i]=str[i+1];
naoya1687 33:d939479e7b13 26 }
naoya1687 33:d939479e7b13 27 for(int i=0;i<=size-9;i++) str[i]=str[i+9];
naoya1687 33:d939479e7b13 28 size-=9;
naoya1687 33:d939479e7b13 29 cadencevalue = *(float*) data;
naoya1687 33:d939479e7b13 30 cadenceBattery = *(float*) (data+4);
naoya1687 33:d939479e7b13 31 Global::setcadence(cadencevalue);
naoya1687 33:d939479e7b13 32 Global::setcadencevolt(cadenceBattery);
naoya1687 33:d939479e7b13 33 }else if(str[0]==ULTSONICHEADER){
naoya1687 33:d939479e7b13 34 for(int i=0;i<8;i++){
naoya1687 33:d939479e7b13 35 data[i]=str[i+1];
naoya1687 33:d939479e7b13 36 }
naoya1687 33:d939479e7b13 37 for(int i=0;i<=size-9;i++) str[i]=str[i+9];
naoya1687 33:d939479e7b13 38 size-=9;
naoya1687 33:d939479e7b13 39 ultsonicvalue = *(float*) data;
naoya1687 33:d939479e7b13 40 ultsonicBattery = *(float*) (data+4);
naoya1687 33:d939479e7b13 41 Global::setultsonic(ultsonicvalue);
naoya1687 33:d939479e7b13 42 Global::setultsonicvolt(ultsonicBattery);
naoya1687 33:d939479e7b13 43 }else{
naoya1687 33:d939479e7b13 44 for(int i=0;i<=size-9;i++) str[i]=str[i+9];
naoya1687 33:d939479e7b13 45 size-=9;
naoya1687 33:d939479e7b13 46 }
naoya1687 33:d939479e7b13 47 //pc.printf("%d",size);//45以上になるとRTX error code: 0x00000001, task ID: 0x20000540
naoya1687 31:cef6ee7af014 48 }
naoya1687 31:cef6ee7af014 49
naoya1687 33:d939479e7b13 50 void TweLite_Sensors::twelite_rx() {
naoya1687 33:d939479e7b13 51 while(twelite.readable()==1){
naoya1687 33:d939479e7b13 52 if(receivef==0) {
naoya1687 33:d939479e7b13 53 char c=twelite.getc();
naoya1687 33:d939479e7b13 54 if(c==CADENCEHEADER){
naoya1687 33:d939479e7b13 55 receivef=1;
naoya1687 34:770a6bbb4d63 56 str[size]=CADENCEHEADER;//pushできない size()は0のまま//両方できるっぽい
naoya1687 33:d939479e7b13 57 size++;
naoya1687 33:d939479e7b13 58 }else if(c==ULTSONICHEADER){
naoya1687 33:d939479e7b13 59 receivef=1;
naoya1687 33:d939479e7b13 60 str[size]=ULTSONICHEADER;
naoya1687 33:d939479e7b13 61 size++;
naoya1687 33:d939479e7b13 62 }
naoya1687 33:d939479e7b13 63 }else if(receivef==1) {
naoya1687 33:d939479e7b13 64 str[size]=twelite.getc();
naoya1687 33:d939479e7b13 65 size++;
naoya1687 33:d939479e7b13 66 } else {}//先頭がheaderではないとき
naoya1687 33:d939479e7b13 67 if(size%9==0) receivef=0;
naoya1687 33:d939479e7b13 68 }
naoya1687 33:d939479e7b13 69 }
naoya1687 33:d939479e7b13 70
naoya1687 33:d939479e7b13 71 void TweLite_Sensors::flip(){
naoya1687 33:d939479e7b13 72 if(request==CADENCE){
naoya1687 33:d939479e7b13 73 twelite.putc(CADENCE);
naoya1687 33:d939479e7b13 74 request=ULTSONIC;
naoya1687 33:d939479e7b13 75 }else if(request==ULTSONIC){
naoya1687 33:d939479e7b13 76 twelite.putc(ULTSONIC);
naoya1687 33:d939479e7b13 77 request=CADENCE;
naoya1687 33:d939479e7b13 78 }
naoya1687 33:d939479e7b13 79 Global::led=!Global::led;
naoya1687 33:d939479e7b13 80 }
naoya1687 33:d939479e7b13 81
naoya1687 33:d939479e7b13 82 void TweLite_Sensors::update(){
naoya1687 33:d939479e7b13 83 scan();
naoya1687 30:6d3a78bc1925 84 }