kubtss / Mbed 2 deprecated BIRD2017

Dependencies:   mbed-rtos mbed

Committer:
shimogamo
Date:
Sat Mar 25 07:09:30 2017 +0000
Revision:
41:013df90be273
Parent:
38:18ac0f8628bf
marge

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