kubtss / Mbed 2 deprecated BIRD2017

Dependencies:   mbed-rtos mbed

Committer:
naoya1687
Date:
Wed Mar 01 08:05:52 2017 +0000
Revision:
33:d939479e7b13
Parent:
31:cef6ee7af014
Child:
34:770a6bbb4d63
BatteryChecker.h???twelite_sensors??

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