Use a Sparkfun Blackberry Trackball Breakout Board as a mouse.
Dependencies: mbed BBTrackball
Diff: acceleration.h
- Revision:
- 0:26bb60735515
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acceleration.h Sun Dec 11 05:38:54 2011 +0000 @@ -0,0 +1,97 @@ +/* Copyright 2011 Adam Green (http://mbed.org/users/AdamGreen/) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +/* Classes to apply acceleration to input from Sparkfun's Blackberry Trackball + Breakout board. +*/ +#ifndef _ACCELERATION_H_ +#define _ACCELERATION_H_ + +#include <mbed.h> +#include <limits.h> +#include "BBTrackball.h" + + + +/* Class which can apply acceleration to each of the roller inputs from the + Sparkfun Blackberry Trackball device. +*/ +template<size_t SampleCount, + int DecelerateThreshold, + int AccelerateThreshold, + int MaxAcceleration> +class CAcceleratedRoller +{ +public: + CAcceleratedRoller(void) + { + m_Acceleration = 1; + m_VelocitySum = 0; + m_SampleIndex = 0; + memset(m_Samples, 0, sizeof(m_Samples)); + } + + void AccumulateSample(short CurrVelocity); + int Acceleration(void) const + { + return m_Acceleration; + } + +protected: + unsigned char ClampToUChar(short Value); + int m_Acceleration; + int m_VelocitySum; + size_t m_SampleIndex; + unsigned char m_Samples[SampleCount]; +}; + + +class CAcceleratedTrackball : public CBBTrackball +{ +public: + CAcceleratedTrackball(PinName BluePin, + PinName RedPin, + PinName GreenPin, + PinName WhitePin, + PinName UpPin, + PinName DownPin, + PinName LeftPin, + PinName RightPin, + PinName ButtonPin) : CBBTrackball(BluePin, + RedPin, + GreenPin, + WhitePin, + UpPin, + DownPin, + LeftPin, + RightPin, + ButtonPin), + m_IterationsSinceLastMotion(INT_MAX) + { + } + void GetState(int& DeltaX, int& DeltaY, int& ButtonPressed); + +protected: + void UpdateLEDColourBasedOnMotion(int VelocityX, + int VelocityY, + int ButtonPressed); + + int m_IterationsSinceLastMotion; + CAcceleratedRoller<250, 4, 4, 40> m_UpAcceleration; + CAcceleratedRoller<250, 4, 4, 40> m_DownAcceleration; + CAcceleratedRoller<250, 4, 4, 30> m_LeftAcceleration; + CAcceleratedRoller<250, 4, 4, 30> m_RightAcceleration; +}; + +#endif // _ACCELERATION_H_