NIT Fukui / Serial6050Yaw

Dependents:   R1Arobo_Maika_B 2021Arobo_UMAPYOI 2021Arobo_YUMIPYOI

Committer:
Suzutomo
Date:
Wed Sep 18 07:52:24 2019 +0000
Revision:
4:413d60ebdcf2
Parent:
3:601cfc41e50a
add Device Reset

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yopcyuuu 0:c3d09c97649b 1 #include "Serial6050.h"
yopcyuuu 0:c3d09c97649b 2
yopcyuuu 0:c3d09c97649b 3 Serial6050::Serial6050(PinName tx, PinName rx, PinName resetPin)
yopcyuuu 2:00a8daf9203b 4 : serial(tx, rx, 38400), rst(resetPin), Deg(0), Bias(0)
yopcyuuu 0:c3d09c97649b 5 {
Suzutomo 4:413d60ebdcf2 6 if (resetPin == NC) useResetPin = false;
Suzutomo 4:413d60ebdcf2 7 else useResetPin = true;
yopcyuuu 0:c3d09c97649b 8 }
yopcyuuu 0:c3d09c97649b 9
yopcyuuu 0:c3d09c97649b 10 void Serial6050::init()
yopcyuuu 0:c3d09c97649b 11 {
Suzutomo 4:413d60ebdcf2 12 if (useResetPin) {
Suzutomo 4:413d60ebdcf2 13 rst = 1;
Suzutomo 4:413d60ebdcf2 14 wait(0.1);
Suzutomo 4:413d60ebdcf2 15 rst = 0;
Suzutomo 4:413d60ebdcf2 16 }
yopcyuuu 0:c3d09c97649b 17 while(1) {
yopcyuuu 0:c3d09c97649b 18 serial.putc(100);
yopcyuuu 0:c3d09c97649b 19 if(serial.readable()) {
yopcyuuu 1:97a3a91ce950 20 if(serial.getc()) break;
yopcyuuu 0:c3d09c97649b 21 }
yopcyuuu 0:c3d09c97649b 22 }
yopcyuuu 0:c3d09c97649b 23 serial.attach(this, &Serial6050::intReceive, RawSerial::RxIrq);
Suzutomo 4:413d60ebdcf2 24 wait(1);
yopcyuuu 0:c3d09c97649b 25 reset();
yopcyuuu 0:c3d09c97649b 26 }
yopcyuuu 0:c3d09c97649b 27
yopcyuuu 2:00a8daf9203b 28 void Serial6050::intReceive()
yopcyuuu 2:00a8daf9203b 29 {
yopcyuuu 2:00a8daf9203b 30 data = serial.getc();
yopcyuuu 2:00a8daf9203b 31 static uint8_t old = data;
yopcyuuu 2:00a8daf9203b 32
yopcyuuu 2:00a8daf9203b 33 if(data > old && data - old > 127) {
yopcyuuu 2:00a8daf9203b 34 Bias -= 255;
yopcyuuu 2:00a8daf9203b 35 } else if(data < old && old - data > 127) {
yopcyuuu 2:00a8daf9203b 36 Bias += 255;
yopcyuuu 2:00a8daf9203b 37 } else {
Suzutomo 3:601cfc41e50a 38
yopcyuuu 2:00a8daf9203b 39 }
yopcyuuu 2:00a8daf9203b 40 Deg = data + Bias;
yopcyuuu 2:00a8daf9203b 41 old = data;
yopcyuuu 2:00a8daf9203b 42 }
yopcyuuu 2:00a8daf9203b 43
yopcyuuu 0:c3d09c97649b 44 void Serial6050::reset()
yopcyuuu 0:c3d09c97649b 45 {
yopcyuuu 2:00a8daf9203b 46 resetValue = Deg;
yopcyuuu 0:c3d09c97649b 47 }
yopcyuuu 0:c3d09c97649b 48
yopcyuuu 0:c3d09c97649b 49
yopcyuuu 0:c3d09c97649b 50
yopcyuuu 0:c3d09c97649b 51 float Serial6050::read()
yopcyuuu 0:c3d09c97649b 52 {
yopcyuuu 2:00a8daf9203b 53 return (Deg - resetValue) / 10.0;
yopcyuuu 0:c3d09c97649b 54 }