forked from mariunp/boks
/
Monitum.ino
119 lines (90 loc) · 3.31 KB
/
Monitum.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
const int trykkPlateKunde = 4; //Trykkplate forran kasse kobles her
const int mottakerVibrasjon = 13; //Vibrasjonskablene fra mottakerne kobles her
const int trykkPlateAnsatt = 2; //Trykkplate bak kasse kobles her
const int mottakerKnapp = 12; //Knappene fra mottakerne kobles her
//Lagrer tilstanden fra de forskjellige bryterne
int mkTilstand;
int tpkTilstand;
int tpaTilstand;
//Lagrer tilstand til vibrasjonen
int vibrasjonTilstand;
//Lagrer sist kjente tilstand fra bryterne
int forrigemkTilstand = LOW;
int forrigetpkTilstand = LOW;
int forrigetpaTilstand = LOW;
//Teller tiden siden bryterne ble trykket
unsigned long mkTid = 0;
unsigned long tpkTid = 0;
unsigned long tpaTid = 0;
unsigned long debounceDelay = 50; //Lager en forsinkelse for å unngå feil klikk
unsigned long trykkPlateKundeDelay = 3000; //Trykkplaten har et større delay
void setup() {
//Setter opp signalene
pinMode(trykkPlateKunde, INPUT);
pinMode(mottakerVibrasjon, OUTPUT);
pinMode(trykkPlateAnsatt, INPUT);
pinMode(mottakerKnapp, INPUT);
}
void loop() {
//Debounce mottakerKnapp
//Leser tilstanden fra mottakerknappene
int leseAMKnapp = digitalRead(mottakerKnapp);
//Hvis bryteren endret, på grunn av støy eller trykk
if (leseAMKnapp != forrigemkTilstand) {
//Tilbakestill mottakerknappenes tid
mkTid = millis();
}
//Vil gå videre hvis det har gått lenger tid enn debounce-forsinkelsen
if ((millis() - mkTid) > debounceDelay) {
//Hvis tilstanden har endret seg
if (leseAMKnapp != mkTilstand) {
mkTilstand = leseAMKnapp;
//Bare skift vibrasjonens tilstand hvis mottakerKnappen er HIGH
if (mkTilstand == HIGH) {
vibrasjonTilstand = LOW;
}
}
}
//Debounce trykkPlateAnsatt
//Leser tilstanden fra trykkPlateAnsatt
int leseTPAKnapp = digitalRead(trykkPlateAnsatt);
//Hvis bryteren endret, på grunn av støy eller trykk
if (leseTPAKnapp != forrigetpaTilstand) {
//Tilbakestill trykkPlateAnsatt tid
tpaTid = millis();
}
//Vil gå videre hvis det har gått lenger tid enn debounce-forsinkelsen
if ((millis() - tpaTid) > debounceDelay) {
//Hvis tilstanden har endret seg
if (leseTPAKnapp != tpaTilstand) {
tpaTilstand = leseTPAKnapp;
//Bare skift vibrasjonens tilstand hvis trykkPlateAnsatt er HIGH
if (tpaTilstand == HIGH ) {
vibrasjonTilstand = LOW;
}
}
}
//Debounce trykkPlateKunde
//Leser tilstanden fra trykkPlateKunde
int leseTPKnapp = digitalRead(trykkPlateKunde);
//Hvis bryteren endret, på grunn av støy eller trykk
if (leseTPKnapp != forrigetpkTilstand) {
//Tilbakestill trykkPlateKunde tid
tpkTid = millis();
}
//Vil gå videre hvis det har gått lenger tid enn debounce-forsinkelsen
if ((millis() - tpkTid) > trykkPlateKundeDelay) {
//Hvis tilstanden har endret seg
if (leseTPKnapp != tpkTilstand) {
tpkTilstand = leseTPKnapp;
//Vibrasjonen er på/av basert på om trykkplaten er trykket eller ikke
vibrasjonTilstand = tpkTilstand;
}
}
//Lagrer lesningen
forrigemkTilstand = leseAMKnapp;
forrigetpaTilstand = leseTPAKnapp;
forrigetpkTilstand = leseTPKnapp;
//Sett vibrasjonen
digitalWrite(mottakerVibrasjon, vibrasjonTilstand);
}