Browse Source

Initial commit

Thorsten Riess 2 years ago
commit
b4d63ab18a
1 changed files with 150 additions and 0 deletions
  1. 150
    0
      schliesssystem.ino

+ 150
- 0
schliesssystem.ino View File

@@ -0,0 +1,150 @@
1
+// basiert auf
2
+// http://gameonstage.blogspot.de/2013/08/level-3-tutorial1-arduino-kusst-telefon.html
3
+// und
4
+// http://www.instructables.com/id/Nintendo-Keyless-Entry-System/?ALLSTEPS
5
+
6
+int cdromPin = 5;
7
+int dialPin = 0; // Analog 0 für Messung am Telefon
8
+int dialVal = 0;
9
+int dialValStat = 0;
10
+
11
+int nummer = 0;
12
+int taste = 10;
13
+
14
+unsigned long int signalstart = 0;
15
+unsigned long int signalstop = 0;
16
+
17
+unsigned long int signalzeit = 0;
18
+unsigned long int keinsignalzeit = 0;
19
+
20
+unsigned long int auszeit = 250; // 200
21
+unsigned long int zwischenzeit = 170; // 100
22
+
23
+int midValue = 400; // der Schwellenwert um aufgelegt (LOW) von abgenommen (HIGH) zu unterscheiden
24
+
25
+boolean dialing = false;
26
+boolean aufgelegt = false;
27
+
28
+int code[4] = {1,2,3,4};
29
+int codepos = 0;
30
+bool correctCode = false;
31
+
32
+void setup() {
33
+  // put your setup code here, to run once:
34
+  pinMode(cdromPin, OUTPUT);
35
+  pinMode(dialPin, INPUT);
36
+  //Serial.begin(9600);
37
+}
38
+
39
+void loop() {
40
+  if (analogRead(dialPin) > midValue)
41
+  {
42
+    dialVal = 1;
43
+  } else {
44
+    dialVal = 0;
45
+  }
46
+
47
+  /*
48
+  *  Wahlvorgang
49
+   */
50
+
51
+  if ( dialVal != dialValStat )
52
+  {
53
+    dialValStat = dialVal;
54
+
55
+    // bei hochziehen der Waehlscheibe kommt einmalig ein Signal
56
+    if (dialVal == HIGH)
57
+    {
58
+      dialing = true;
59
+      if (aufgelegt)
60
+      {
61
+        //Serial.print("telefon ");
62
+        //Serial.print("abgehoben");
63
+        //Serial.println();
64
+        aufgelegt = false;
65
+        signalstop = millis();
66
+      }
67
+    } 
68
+
69
+    else if (dialVal == LOW)
70
+    {
71
+      signalstop = millis();
72
+      nummer++;
73
+    }
74
+  }
75
+
76
+  /*
77
+  *   Abfrage ob waehlscheibe runtergelaufen
78
+  */
79
+  keinsignalzeit = millis() - signalstop;
80
+  
81
+  if ( dialing == true )
82
+  {
83
+
84
+    if ( keinsignalzeit > zwischenzeit )
85
+    {
86
+      if (nummer == 10) 
87
+      {
88
+        taste = 0;
89
+      } 
90
+      else if (nummer > 0) {
91
+        taste = nummer;
92
+      }
93
+      if (taste < 10) 
94
+      {
95
+        if(codepos == 0 && code[0] == taste) {
96
+          correctCode = true;
97
+        } else {
98
+          if(codepos <= 3 ) {
99
+            if(code[codepos] != taste) {
100
+              correctCode = false;
101
+            }
102
+          } else {
103
+            //correctCode = false;
104
+            // ignore additional numbers
105
+          }
106
+        }
107
+
108
+        if(codepos < 4) {
109
+          codepos++;
110
+        }
111
+      }
112
+
113
+      dialing = false;
114
+      nummer = 0;
115
+      taste = 10;
116
+    }
117
+  }
118
+
119
+  /*
120
+  *   abfrage ob hoerer aufgelegt
121
+   */
122
+  if ( dialVal == LOW )
123
+  {
124
+    if ( keinsignalzeit > auszeit && aufgelegt == false)
125
+    {
126
+      //Serial.print("telefon ");
127
+      //Serial.print("aufgelegt");
128
+      //Serial.println();
129
+      aufgelegt = true;
130
+      dialing = false;
131
+      nummer = 0;
132
+      taste = 10;
133
+      if(correctCode && codepos == 4) {
134
+        //Serial.println("Oeffnen");
135
+        
136
+        digitalWrite(cdromPin, HIGH);
137
+        delay(500);
138
+        digitalWrite(cdromPin, LOW);
139
+        delay(5000);
140
+        digitalWrite(cdromPin, HIGH);
141
+        delay(500);
142
+        digitalWrite(cdromPin, LOW);
143
+        
144
+      }
145
+      correctCode = false;
146
+      codepos = 0;
147
+    }
148
+  }
149
+
150
+}

Loading…
Cancel
Save