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.
Sensor/TweLite_Sensors.cpp@41:013df90be273, 2017-03-25 (annotated)
- Committer:
- shimogamo
- Date:
- Sat Mar 25 07:09:30 2017 +0000
- Revision:
- 41:013df90be273
- Parent:
- 38:18ac0f8628bf
marge
Who changed what in which revision?
User | Revision | Line number | New 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 | } |