Monitors, weather, radiation, UV index, Natural Gas levels

Dependencies:   HTU21D

Fork of WeatherMeters by Adam Green

Committer:
sunilaluri6
Date:
Tue Jun 10 00:11:28 2014 +0000
Revision:
1:a197f86e143a
Parent:
0:457832d52954
Rev1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AdamGreen 0:457832d52954 1 /* Copyright 2012 Adam Green (http://mbed.org/users/AdamGreen/)
AdamGreen 0:457832d52954 2
AdamGreen 0:457832d52954 3 Licensed under the Apache License, Version 2.0 (the "License");
AdamGreen 0:457832d52954 4 you may not use this file except in compliance with the License.
AdamGreen 0:457832d52954 5 You may obtain a copy of the License at
AdamGreen 0:457832d52954 6
AdamGreen 0:457832d52954 7 http://www.apache.org/licenses/LICENSE-2.0
AdamGreen 0:457832d52954 8
AdamGreen 0:457832d52954 9 Unless required by applicable law or agreed to in writing, software
AdamGreen 0:457832d52954 10 distributed under the License is distributed on an "AS IS" BASIS,
AdamGreen 0:457832d52954 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AdamGreen 0:457832d52954 12 See the License for the specific language governing permissions and
AdamGreen 0:457832d52954 13 limitations under the License.
AdamGreen 0:457832d52954 14 */
AdamGreen 0:457832d52954 15 /* Implementation for wrapper class of InterruptIn used for counting falling edge
AdamGreen 0:457832d52954 16 events with specified hold off time for the purpose of debouncing.
AdamGreen 0:457832d52954 17 */
AdamGreen 0:457832d52954 18 #include <mbed.h>
AdamGreen 0:457832d52954 19 #include "DebouncedFallingEdgeCounter.h"
AdamGreen 0:457832d52954 20
AdamGreen 0:457832d52954 21
AdamGreen 0:457832d52954 22 CDebouncedFallingEdgeCounter::CDebouncedFallingEdgeCounter(PinName InterruptInPin, unsigned int IgnoreTimeForDebounceInMicroSeconds)
AdamGreen 0:457832d52954 23 : m_FallingEdgeInterruptIn(InterruptInPin)
AdamGreen 0:457832d52954 24 {
AdamGreen 0:457832d52954 25 m_Timer.start();
AdamGreen 0:457832d52954 26 m_IgnoreTimeForDebounce = IgnoreTimeForDebounceInMicroSeconds;
AdamGreen 0:457832d52954 27 InitLastFallingEdgeTime();
AdamGreen 0:457832d52954 28
AdamGreen 0:457832d52954 29 ZeroCount();
AdamGreen 0:457832d52954 30
AdamGreen 0:457832d52954 31 m_FallingEdgeInterruptIn.mode(PullUp);
AdamGreen 0:457832d52954 32 m_FallingEdgeInterruptIn.fall<CDebouncedFallingEdgeCounter>(this, &CDebouncedFallingEdgeCounter::FallingEdgeISR);
AdamGreen 0:457832d52954 33 }
AdamGreen 0:457832d52954 34
AdamGreen 0:457832d52954 35
AdamGreen 0:457832d52954 36 void CDebouncedFallingEdgeCounter::InitLastFallingEdgeTime()
AdamGreen 0:457832d52954 37 {
AdamGreen 0:457832d52954 38 InitLastFallingEdgeTime((unsigned int)m_Timer.read_us());
AdamGreen 0:457832d52954 39 }
AdamGreen 0:457832d52954 40
AdamGreen 0:457832d52954 41
AdamGreen 0:457832d52954 42 void CDebouncedFallingEdgeCounter::InitLastFallingEdgeTime(unsigned int CurrentTime)
AdamGreen 0:457832d52954 43 {
AdamGreen 0:457832d52954 44 m_LastFallingEdgeTime = CurrentTime - m_IgnoreTimeForDebounce;
AdamGreen 0:457832d52954 45 }
AdamGreen 0:457832d52954 46
AdamGreen 0:457832d52954 47
AdamGreen 0:457832d52954 48 void CDebouncedFallingEdgeCounter::FallingEdgeISR()
AdamGreen 0:457832d52954 49 {
AdamGreen 0:457832d52954 50 // UNDONE: Can I just use whatever timer the m_Timer uses under the covers?
AdamGreen 0:457832d52954 51 unsigned int CurrentTime = (unsigned int)m_Timer.read_us();
AdamGreen 0:457832d52954 52
AdamGreen 0:457832d52954 53 if (TimeSinceLastFallingEdge(CurrentTime) >= m_IgnoreTimeForDebounce)
AdamGreen 0:457832d52954 54 {
AdamGreen 0:457832d52954 55 m_FallingEdgeCount++;
AdamGreen 0:457832d52954 56 m_LastFallingEdgeTime = CurrentTime;
AdamGreen 0:457832d52954 57 }
AdamGreen 0:457832d52954 58 }
AdamGreen 0:457832d52954 59
AdamGreen 0:457832d52954 60
AdamGreen 0:457832d52954 61 unsigned int CDebouncedFallingEdgeCounter::TimeSinceLastFallingEdge(unsigned int CurrentTime)
AdamGreen 0:457832d52954 62 {
AdamGreen 0:457832d52954 63 return CurrentTime - m_LastFallingEdgeTime;
AdamGreen 0:457832d52954 64 }
AdamGreen 0:457832d52954 65
AdamGreen 0:457832d52954 66
AdamGreen 0:457832d52954 67 unsigned int CDebouncedFallingEdgeCounter::GetCountAndZero()
AdamGreen 0:457832d52954 68 {
AdamGreen 0:457832d52954 69 unsigned int CurrentCount;
AdamGreen 0:457832d52954 70
AdamGreen 0:457832d52954 71 CurrentCount = GetCount();
AdamGreen 0:457832d52954 72 ZeroCount();
AdamGreen 0:457832d52954 73 return CurrentCount;
AdamGreen 0:457832d52954 74 }
AdamGreen 0:457832d52954 75
AdamGreen 0:457832d52954 76
AdamGreen 0:457832d52954 77 unsigned int CDebouncedFallingEdgeCounter::GetCount()
AdamGreen 0:457832d52954 78 {
AdamGreen 0:457832d52954 79 RefreshTimers();
AdamGreen 0:457832d52954 80
AdamGreen 0:457832d52954 81 return m_FallingEdgeCount;
AdamGreen 0:457832d52954 82 }
AdamGreen 0:457832d52954 83
AdamGreen 0:457832d52954 84
AdamGreen 0:457832d52954 85 void CDebouncedFallingEdgeCounter::ZeroCount()
AdamGreen 0:457832d52954 86 {
AdamGreen 0:457832d52954 87 m_FallingEdgeCount = 0;
AdamGreen 0:457832d52954 88 }
AdamGreen 0:457832d52954 89
AdamGreen 0:457832d52954 90
AdamGreen 0:457832d52954 91 void CDebouncedFallingEdgeCounter::RefreshTimers()
AdamGreen 0:457832d52954 92 {
AdamGreen 0:457832d52954 93 unsigned int CurrentTime = (unsigned int)m_Timer.read_us();
AdamGreen 0:457832d52954 94
AdamGreen 0:457832d52954 95 if (TimeSinceLastFallingEdge(CurrentTime) > m_IgnoreTimeForDebounce)
AdamGreen 0:457832d52954 96 {
AdamGreen 0:457832d52954 97 // Protect from timer overflow.
AdamGreen 0:457832d52954 98 InitLastFallingEdgeTime(CurrentTime);
AdamGreen 0:457832d52954 99 }
AdamGreen 0:457832d52954 100 }