SmartWheels self-driving race car. Designed for NXP Cup. Uses FRDM-KL25Z, area-scan camera, and simple image processing to detect and navigate any NXP spec track.

Dependencies:   TSI USBDevice mbed-dev

Fork of SmartWheels by haofan Zheng

Committer:
Bobymicjohn
Date:
Tue Feb 14 19:51:57 2017 +0000
Revision:
15:eb6a274b3dfb
Child:
21:60377d6f1cc2
Finished wheelEncoder class.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bobymicjohn 15:eb6a274b3dfb 1 #include "WheelEncoder.h"
Bobymicjohn 15:eb6a274b3dfb 2 #include "Core.h"
Bobymicjohn 15:eb6a274b3dfb 3 #include "SWUSBServer.h"
Bobymicjohn 15:eb6a274b3dfb 4
Bobymicjohn 15:eb6a274b3dfb 5 #include "PinAssignment.h"
Bobymicjohn 15:eb6a274b3dfb 6 #include "SWUSBServer.h"
Bobymicjohn 15:eb6a274b3dfb 7
Bobymicjohn 15:eb6a274b3dfb 8 #include "mbed.h"
Bobymicjohn 15:eb6a274b3dfb 9
Bobymicjohn 15:eb6a274b3dfb 10
Bobymicjohn 15:eb6a274b3dfb 11 WheelEncoder::WheelEncoder(SW::Core& core) :
Bobymicjohn 15:eb6a274b3dfb 12 m_core(core),
Bobymicjohn 15:eb6a274b3dfb 13 m_intRL(InterruptIn(PIN_WE_RL)),
Bobymicjohn 15:eb6a274b3dfb 14 m_intRR(InterruptIn(PIN_WE_RR))
Bobymicjohn 15:eb6a274b3dfb 15 {
Bobymicjohn 15:eb6a274b3dfb 16 m_rrightTimer.start();
Bobymicjohn 15:eb6a274b3dfb 17 m_rleftTimer.start();
Bobymicjohn 15:eb6a274b3dfb 18 m_intRL.rise(callback(this, &WheelEncoder::pulseInRLeft));
Bobymicjohn 15:eb6a274b3dfb 19 m_intRR.rise(callback(this, &WheelEncoder::pulseInRRight));
Bobymicjohn 15:eb6a274b3dfb 20
Bobymicjohn 15:eb6a274b3dfb 21 }
Bobymicjohn 15:eb6a274b3dfb 22
Bobymicjohn 15:eb6a274b3dfb 23
Bobymicjohn 15:eb6a274b3dfb 24 void WheelEncoder::Update(float deltaTime)
Bobymicjohn 15:eb6a274b3dfb 25 {
Bobymicjohn 15:eb6a274b3dfb 26 int rrHz = 1 / m_rrDuration;
Bobymicjohn 15:eb6a274b3dfb 27 int rlHz = 1 / m_rlDuration;
Bobymicjohn 15:eb6a274b3dfb 28
Bobymicjohn 15:eb6a274b3dfb 29 char buf[5];
Bobymicjohn 15:eb6a274b3dfb 30 sprintf(buf, "RR: %d", rrHz);
Bobymicjohn 15:eb6a274b3dfb 31 m_core.GetUSBServer().PushUnreliableMsg('D', buf);
Bobymicjohn 15:eb6a274b3dfb 32 sprintf(buf, "RL: %d", rlHz);
Bobymicjohn 15:eb6a274b3dfb 33 m_core.GetUSBServer().PushUnreliableMsg('D', buf);
Bobymicjohn 15:eb6a274b3dfb 34 }
Bobymicjohn 15:eb6a274b3dfb 35
Bobymicjohn 15:eb6a274b3dfb 36 void WheelEncoder::pulseInRRight()
Bobymicjohn 15:eb6a274b3dfb 37 {
Bobymicjohn 15:eb6a274b3dfb 38 m_rrDuration = m_rrightTimer.read();
Bobymicjohn 15:eb6a274b3dfb 39 m_rrightTimer.stop();
Bobymicjohn 15:eb6a274b3dfb 40 m_rrightTimer.reset();
Bobymicjohn 15:eb6a274b3dfb 41 m_rrightTimer.start();
Bobymicjohn 15:eb6a274b3dfb 42 }
Bobymicjohn 15:eb6a274b3dfb 43
Bobymicjohn 15:eb6a274b3dfb 44 void WheelEncoder::pulseInRLeft()
Bobymicjohn 15:eb6a274b3dfb 45 {
Bobymicjohn 15:eb6a274b3dfb 46 m_rlDuration = m_rleftTimer.read();
Bobymicjohn 15:eb6a274b3dfb 47 m_rleftTimer.stop();
Bobymicjohn 15:eb6a274b3dfb 48 m_rleftTimer.reset();
Bobymicjohn 15:eb6a274b3dfb 49 m_rleftTimer.start();
Bobymicjohn 15:eb6a274b3dfb 50 }
Bobymicjohn 15:eb6a274b3dfb 51
Bobymicjohn 15:eb6a274b3dfb 52