/elec/propeller-clock

To get this branch, use:
bzr branch http://bzr.ed.am/elec/propeller-clock
16 by edam
finished first revision of propeller-clock code (can display clock and test); added Bounce library
1
2
// Please read Bounce.h for information about the liscence and authors
3
4
#include "WProgram.h"
5
#include "Bounce.h"
6
7
8
Bounce::Bounce(uint8_t pin,unsigned long interval_millis)
9
{
10
	interval(interval_millis);
11
	previous_millis = millis();
12
	state = digitalRead(pin);
13
    this->pin = pin;
14
}
15
16
17
void Bounce::write(int new_state)
18
       {
19
       	this->state = new_state;
20
       	digitalWrite(pin,state);
21
       }
22
23
24
void Bounce::interval(unsigned long interval_millis)
25
{
26
  this->interval_millis = interval_millis;
27
  this->rebounce_millis = 0;
28
}
29
30
void Bounce::rebounce(unsigned long interval)
31
{
32
	 this->rebounce_millis = interval;
33
}
34
35
36
37
int Bounce::update()
38
{
39
	if ( debounce() ) {
40
        rebounce(0);
41
        return stateChanged = 1;
42
    }
43
44
     // We need to rebounce, so simulate a state change
45
     
46
	if ( rebounce_millis && (millis() - previous_millis >= rebounce_millis) ) {
47
        previous_millis = millis();
48
		 rebounce(0);
49
		 return stateChanged = 1;
50
	}
51
52
	return stateChanged = 0;
53
}
54
55
56
unsigned long Bounce::duration()
57
{
58
  return millis() - previous_millis;
59
}
60
61
62
int Bounce::read()
63
{
64
	return (int)state;
65
}
66
67
68
// Protected: debounces the pin
69
int Bounce::debounce() {
70
	
71
	uint8_t newState = digitalRead(pin);
72
	if (state != newState ) {
73
  		if (millis() - previous_millis >= interval_millis) {
74
  			previous_millis = millis();
75
  			state = newState;
76
  			return 1;
77
	}
78
  }
79
  
80
  return 0;
81
	
82
}
83
84
// The risingEdge method is true for one scan after the de-bounced input goes from off-to-on.
85
bool  Bounce::risingEdge() { return stateChanged && state; }
86
// The fallingEdge  method it true for one scan after the de-bounced input goes from on-to-off. 
87
bool  Bounce::fallingEdge() { return stateChanged && !state; }
88