Use a Sparkfun Blackberry Trackball Breakout Board as a mouse.

Dependencies:   mbed BBTrackball

Committer:
AdamGreen
Date:
Sun Dec 11 05:38:54 2011 +0000
Revision:
0:26bb60735515
Initial version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AdamGreen 0:26bb60735515 1 /* Copyright 2011 Adam Green (http://mbed.org/users/AdamGreen/)
AdamGreen 0:26bb60735515 2
AdamGreen 0:26bb60735515 3 Licensed under the Apache License, Version 2.0 (the "License");
AdamGreen 0:26bb60735515 4 you may not use this file except in compliance with the License.
AdamGreen 0:26bb60735515 5 You may obtain a copy of the License at
AdamGreen 0:26bb60735515 6
AdamGreen 0:26bb60735515 7 http://www.apache.org/licenses/LICENSE-2.0
AdamGreen 0:26bb60735515 8
AdamGreen 0:26bb60735515 9 Unless required by applicable law or agreed to in writing, software
AdamGreen 0:26bb60735515 10 distributed under the License is distributed on an "AS IS" BASIS,
AdamGreen 0:26bb60735515 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AdamGreen 0:26bb60735515 12 See the License for the specific language governing permissions and
AdamGreen 0:26bb60735515 13 limitations under the License.
AdamGreen 0:26bb60735515 14 */
AdamGreen 0:26bb60735515 15 /* Classes to apply acceleration to input from Sparkfun's Blackberry Trackball
AdamGreen 0:26bb60735515 16 Breakout board.
AdamGreen 0:26bb60735515 17 */
AdamGreen 0:26bb60735515 18 #ifndef _ACCELERATION_H_
AdamGreen 0:26bb60735515 19 #define _ACCELERATION_H_
AdamGreen 0:26bb60735515 20
AdamGreen 0:26bb60735515 21 #include <mbed.h>
AdamGreen 0:26bb60735515 22 #include <limits.h>
AdamGreen 0:26bb60735515 23 #include "BBTrackball.h"
AdamGreen 0:26bb60735515 24
AdamGreen 0:26bb60735515 25
AdamGreen 0:26bb60735515 26
AdamGreen 0:26bb60735515 27 /* Class which can apply acceleration to each of the roller inputs from the
AdamGreen 0:26bb60735515 28 Sparkfun Blackberry Trackball device.
AdamGreen 0:26bb60735515 29 */
AdamGreen 0:26bb60735515 30 template<size_t SampleCount,
AdamGreen 0:26bb60735515 31 int DecelerateThreshold,
AdamGreen 0:26bb60735515 32 int AccelerateThreshold,
AdamGreen 0:26bb60735515 33 int MaxAcceleration>
AdamGreen 0:26bb60735515 34 class CAcceleratedRoller
AdamGreen 0:26bb60735515 35 {
AdamGreen 0:26bb60735515 36 public:
AdamGreen 0:26bb60735515 37 CAcceleratedRoller(void)
AdamGreen 0:26bb60735515 38 {
AdamGreen 0:26bb60735515 39 m_Acceleration = 1;
AdamGreen 0:26bb60735515 40 m_VelocitySum = 0;
AdamGreen 0:26bb60735515 41 m_SampleIndex = 0;
AdamGreen 0:26bb60735515 42 memset(m_Samples, 0, sizeof(m_Samples));
AdamGreen 0:26bb60735515 43 }
AdamGreen 0:26bb60735515 44
AdamGreen 0:26bb60735515 45 void AccumulateSample(short CurrVelocity);
AdamGreen 0:26bb60735515 46 int Acceleration(void) const
AdamGreen 0:26bb60735515 47 {
AdamGreen 0:26bb60735515 48 return m_Acceleration;
AdamGreen 0:26bb60735515 49 }
AdamGreen 0:26bb60735515 50
AdamGreen 0:26bb60735515 51 protected:
AdamGreen 0:26bb60735515 52 unsigned char ClampToUChar(short Value);
AdamGreen 0:26bb60735515 53 int m_Acceleration;
AdamGreen 0:26bb60735515 54 int m_VelocitySum;
AdamGreen 0:26bb60735515 55 size_t m_SampleIndex;
AdamGreen 0:26bb60735515 56 unsigned char m_Samples[SampleCount];
AdamGreen 0:26bb60735515 57 };
AdamGreen 0:26bb60735515 58
AdamGreen 0:26bb60735515 59
AdamGreen 0:26bb60735515 60 class CAcceleratedTrackball : public CBBTrackball
AdamGreen 0:26bb60735515 61 {
AdamGreen 0:26bb60735515 62 public:
AdamGreen 0:26bb60735515 63 CAcceleratedTrackball(PinName BluePin,
AdamGreen 0:26bb60735515 64 PinName RedPin,
AdamGreen 0:26bb60735515 65 PinName GreenPin,
AdamGreen 0:26bb60735515 66 PinName WhitePin,
AdamGreen 0:26bb60735515 67 PinName UpPin,
AdamGreen 0:26bb60735515 68 PinName DownPin,
AdamGreen 0:26bb60735515 69 PinName LeftPin,
AdamGreen 0:26bb60735515 70 PinName RightPin,
AdamGreen 0:26bb60735515 71 PinName ButtonPin) : CBBTrackball(BluePin,
AdamGreen 0:26bb60735515 72 RedPin,
AdamGreen 0:26bb60735515 73 GreenPin,
AdamGreen 0:26bb60735515 74 WhitePin,
AdamGreen 0:26bb60735515 75 UpPin,
AdamGreen 0:26bb60735515 76 DownPin,
AdamGreen 0:26bb60735515 77 LeftPin,
AdamGreen 0:26bb60735515 78 RightPin,
AdamGreen 0:26bb60735515 79 ButtonPin),
AdamGreen 0:26bb60735515 80 m_IterationsSinceLastMotion(INT_MAX)
AdamGreen 0:26bb60735515 81 {
AdamGreen 0:26bb60735515 82 }
AdamGreen 0:26bb60735515 83 void GetState(int& DeltaX, int& DeltaY, int& ButtonPressed);
AdamGreen 0:26bb60735515 84
AdamGreen 0:26bb60735515 85 protected:
AdamGreen 0:26bb60735515 86 void UpdateLEDColourBasedOnMotion(int VelocityX,
AdamGreen 0:26bb60735515 87 int VelocityY,
AdamGreen 0:26bb60735515 88 int ButtonPressed);
AdamGreen 0:26bb60735515 89
AdamGreen 0:26bb60735515 90 int m_IterationsSinceLastMotion;
AdamGreen 0:26bb60735515 91 CAcceleratedRoller<250, 4, 4, 40> m_UpAcceleration;
AdamGreen 0:26bb60735515 92 CAcceleratedRoller<250, 4, 4, 40> m_DownAcceleration;
AdamGreen 0:26bb60735515 93 CAcceleratedRoller<250, 4, 4, 30> m_LeftAcceleration;
AdamGreen 0:26bb60735515 94 CAcceleratedRoller<250, 4, 4, 30> m_RightAcceleration;
AdamGreen 0:26bb60735515 95 };
AdamGreen 0:26bb60735515 96
AdamGreen 0:26bb60735515 97 #endif // _ACCELERATION_H_