受信割り込みバージョン

Dependents:   a_team_R1370 ashimawari_sample_test 2022NHK_A_ashimawari 2022A_NHK_kikou

Committer:
highfieldsnj
Date:
Sat May 18 08:42:05 2019 +0000
Revision:
4:ffc2a55269f9
Parent:
3:2f00371553c1
Child:
5:553c02009ad0
add function getRadian()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UCHITAKE 0:243364135087 1 #include "R1370.h"
UCHITAKE 0:243364135087 2
UCHITAKE 0:243364135087 3 R1370::R1370(PinName tx, PinName rx) : RawSerial(tx, rx, 115200)
UCHITAKE 0:243364135087 4 {
UCHITAKE 0:243364135087 5 attach(callback(this, &R1370::receiveByte));
UCHITAKE 0:243364135087 6 }
UCHITAKE 0:243364135087 7
UCHITAKE 0:243364135087 8 void R1370::receiveByte()
UCHITAKE 0:243364135087 9 {
highfieldsnj 3:2f00371553c1 10 buffer[bufferPoint % R1370_BUFFER_SIZE] = getc();
highfieldsnj 3:2f00371553c1 11
highfieldsnj 3:2f00371553c1 12 if(bufferPoint != 0xff) {
highfieldsnj 3:2f00371553c1 13 ++bufferPoint;
highfieldsnj 3:2f00371553c1 14 } else {
highfieldsnj 3:2f00371553c1 15 bufferPoint = (255%R1370_BUFFER_SIZE)+1;
highfieldsnj 3:2f00371553c1 16 }
highfieldsnj 3:2f00371553c1 17
highfieldsnj 3:2f00371553c1 18 ++receivedBytes;
highfieldsnj 3:2f00371553c1 19
highfieldsnj 3:2f00371553c1 20 if(receivedBytes >= R1370_BUFFER_SIZE) checkData();
highfieldsnj 3:2f00371553c1 21 }
highfieldsnj 3:2f00371553c1 22
highfieldsnj 3:2f00371553c1 23 void R1370::checkData()
highfieldsnj 3:2f00371553c1 24 {
highfieldsnj 3:2f00371553c1 25 for(int i = 0; i < R1370_BUFFER_SIZE; i++) {
highfieldsnj 3:2f00371553c1 26 if(buffer[i % R1370_BUFFER_SIZE] == R1370_HEADER0 && buffer[(i + 1) % R1370_BUFFER_SIZE] == R1370_HEADER1) {
highfieldsnj 3:2f00371553c1 27
highfieldsnj 3:2f00371553c1 28 uint8_t checksum = 0x00;
highfieldsnj 3:2f00371553c1 29 for(int j = 0; j < R1370_BUFFER_SIZE - 3; j++) {
highfieldsnj 3:2f00371553c1 30 checksum += buffer[(i + 2 + j)% R1370_BUFFER_SIZE];
highfieldsnj 3:2f00371553c1 31
highfieldsnj 3:2f00371553c1 32 }
highfieldsnj 3:2f00371553c1 33 if(checksum == buffer[(i + R1370_BUFFER_SIZE - 1)% R1370_BUFFER_SIZE]) {
highfieldsnj 3:2f00371553c1 34 for(int j = 0; j < R1370_BUFFER_SIZE - 3; j++) {
highfieldsnj 3:2f00371553c1 35 data[j] = buffer[(i + 2 + j) % R1370_BUFFER_SIZE];
highfieldsnj 3:2f00371553c1 36 }
highfieldsnj 3:2f00371553c1 37 receivedBytes = 0;
highfieldsnj 3:2f00371553c1 38
highfieldsnj 3:2f00371553c1 39 assemble();
highfieldsnj 3:2f00371553c1 40 return;
highfieldsnj 3:2f00371553c1 41 }
highfieldsnj 3:2f00371553c1 42 }
highfieldsnj 3:2f00371553c1 43 }
UCHITAKE 0:243364135087 44 }
UCHITAKE 0:243364135087 45
UCHITAKE 0:243364135087 46 void R1370::assemble()
UCHITAKE 0:243364135087 47 {
highfieldsnj 3:2f00371553c1 48 index = data[0];
highfieldsnj 3:2f00371553c1 49 angle = (data[1] & 0xFF) | ((data[2] << 8) & 0xFF00);
highfieldsnj 3:2f00371553c1 50 rate = (data[3] & 0xFF) | ((data[4] << 8) & 0xFF00);
highfieldsnj 3:2f00371553c1 51 acc[0] = (data[5] & 0xFF) | ((data[6] << 8) & 0xFF00);
highfieldsnj 3:2f00371553c1 52 acc[1] = (data[7] & 0xFF) | ((data[8] << 8) & 0xFF00);
highfieldsnj 3:2f00371553c1 53 acc[2] = (data[9] & 0xFF) | ((data[10] << 8) & 0xFF00);
highfieldsnj 3:2f00371553c1 54 reserved = data[11];
highfieldsnj 3:2f00371553c1 55 upbit_ = data[1];
highfieldsnj 3:2f00371553c1 56 downbit_ = data[2];
UCHITAKE 0:243364135087 57 }
UCHITAKE 0:243364135087 58
UCHITAKE 0:243364135087 59 float R1370::getAngle()
UCHITAKE 0:243364135087 60 {
UCHITAKE 0:243364135087 61 return (float)(angle / 100.0);
UCHITAKE 0:243364135087 62 }
UCHITAKE 0:243364135087 63
UCHITAKE 0:243364135087 64 float R1370::getRate()
UCHITAKE 0:243364135087 65 {
UCHITAKE 0:243364135087 66 return (float)(rate / 100.0);
UCHITAKE 0:243364135087 67 }
UCHITAKE 0:243364135087 68
highfieldsnj 4:ffc2a55269f9 69 float R1370::getRadian()
highfieldsnj 4:ffc2a55269f9 70 {
highfieldsnj 4:ffc2a55269f9 71 return (float)(angle / 100.0 / 180.0 * 3.141592653589793);
highfieldsnj 4:ffc2a55269f9 72 }
highfieldsnj 4:ffc2a55269f9 73
UCHITAKE 0:243364135087 74 int16_t R1370::getAcc(char l)
UCHITAKE 0:243364135087 75 {
UCHITAKE 0:243364135087 76 if(l == 'x' || l == 'X') {
UCHITAKE 0:243364135087 77 return acc[0];
UCHITAKE 0:243364135087 78 } else if(l == 'y' || l == 'Y') {
UCHITAKE 0:243364135087 79 return acc[1];
UCHITAKE 0:243364135087 80 } else if(l == 'z' || l == 'Z') {
UCHITAKE 0:243364135087 81 return acc[2];
UCHITAKE 0:243364135087 82 } else {
UCHITAKE 0:243364135087 83 return 0;
UCHITAKE 0:243364135087 84 }
UCHITAKE 0:243364135087 85 }
UCHITAKE 0:243364135087 86
UCHITAKE 0:243364135087 87 int16_t R1370::getAcc(int i)
UCHITAKE 0:243364135087 88 {
UCHITAKE 0:243364135087 89 if(i >= 0 && i < 3) {
UCHITAKE 0:243364135087 90 return acc[i];
UCHITAKE 0:243364135087 91 } else {
UCHITAKE 0:243364135087 92 return 0;
UCHITAKE 0:243364135087 93 }
UCHITAKE 0:243364135087 94 }
UCHITAKE 0:243364135087 95
UCHITAKE 0:243364135087 96 int16_t R1370::getAccX()
UCHITAKE 0:243364135087 97 {
UCHITAKE 0:243364135087 98 return acc[0];
UCHITAKE 0:243364135087 99 }
UCHITAKE 0:243364135087 100
UCHITAKE 0:243364135087 101 int16_t R1370::getAccY()
UCHITAKE 0:243364135087 102 {
UCHITAKE 0:243364135087 103 return acc[1];
UCHITAKE 0:243364135087 104 }
UCHITAKE 0:243364135087 105
UCHITAKE 0:243364135087 106 int16_t R1370::getAccZ()
UCHITAKE 0:243364135087 107 {
UCHITAKE 0:243364135087 108 return acc[2];
highfieldsnj 3:2f00371553c1 109 }
highfieldsnj 3:2f00371553c1 110
highfieldsnj 3:2f00371553c1 111 unsigned char R1370::upbit()
highfieldsnj 3:2f00371553c1 112 {
highfieldsnj 3:2f00371553c1 113 return upbit_;
highfieldsnj 3:2f00371553c1 114 }
highfieldsnj 3:2f00371553c1 115
highfieldsnj 3:2f00371553c1 116 unsigned char R1370::downbit()
highfieldsnj 3:2f00371553c1 117 {
highfieldsnj 3:2f00371553c1 118 return downbit_;
UCHITAKE 0:243364135087 119 }