Pārlūkot izejas kodu

Initial commit

master
Thorsten Riess pirms 3 gadiem
revīzija
b4d63ab18a
1 mainītis faili ar 150 papildinājumiem un 0 dzēšanām
  1. 150
    0
      schliesssystem.ino

+ 150
- 0
schliesssystem.ino Parādīt failu

@@ -0,0 +1,150 @@
// basiert auf
// http://gameonstage.blogspot.de/2013/08/level-3-tutorial1-arduino-kusst-telefon.html
// und
// http://www.instructables.com/id/Nintendo-Keyless-Entry-System/?ALLSTEPS

int cdromPin = 5;
int dialPin = 0; // Analog 0 für Messung am Telefon
int dialVal = 0;
int dialValStat = 0;

int nummer = 0;
int taste = 10;

unsigned long int signalstart = 0;
unsigned long int signalstop = 0;

unsigned long int signalzeit = 0;
unsigned long int keinsignalzeit = 0;

unsigned long int auszeit = 250; // 200
unsigned long int zwischenzeit = 170; // 100

int midValue = 400; // der Schwellenwert um aufgelegt (LOW) von abgenommen (HIGH) zu unterscheiden

boolean dialing = false;
boolean aufgelegt = false;

int code[4] = {1,2,3,4};
int codepos = 0;
bool correctCode = false;

void setup() {
// put your setup code here, to run once:
pinMode(cdromPin, OUTPUT);
pinMode(dialPin, INPUT);
//Serial.begin(9600);
}

void loop() {
if (analogRead(dialPin) > midValue)
{
dialVal = 1;
} else {
dialVal = 0;
}

/*
* Wahlvorgang
*/

if ( dialVal != dialValStat )
{
dialValStat = dialVal;

// bei hochziehen der Waehlscheibe kommt einmalig ein Signal
if (dialVal == HIGH)
{
dialing = true;
if (aufgelegt)
{
//Serial.print("telefon ");
//Serial.print("abgehoben");
//Serial.println();
aufgelegt = false;
signalstop = millis();
}
}

else if (dialVal == LOW)
{
signalstop = millis();
nummer++;
}
}

/*
* Abfrage ob waehlscheibe runtergelaufen
*/
keinsignalzeit = millis() - signalstop;
if ( dialing == true )
{

if ( keinsignalzeit > zwischenzeit )
{
if (nummer == 10)
{
taste = 0;
}
else if (nummer > 0) {
taste = nummer;
}
if (taste < 10)
{
if(codepos == 0 && code[0] == taste) {
correctCode = true;
} else {
if(codepos <= 3 ) {
if(code[codepos] != taste) {
correctCode = false;
}
} else {
//correctCode = false;
// ignore additional numbers
}
}

if(codepos < 4) {
codepos++;
}
}

dialing = false;
nummer = 0;
taste = 10;
}
}

/*
* abfrage ob hoerer aufgelegt
*/
if ( dialVal == LOW )
{
if ( keinsignalzeit > auszeit && aufgelegt == false)
{
//Serial.print("telefon ");
//Serial.print("aufgelegt");
//Serial.println();
aufgelegt = true;
dialing = false;
nummer = 0;
taste = 10;
if(correctCode && codepos == 4) {
//Serial.println("Oeffnen");
digitalWrite(cdromPin, HIGH);
delay(500);
digitalWrite(cdromPin, LOW);
delay(5000);
digitalWrite(cdromPin, HIGH);
delay(500);
digitalWrite(cdromPin, LOW);
}
correctCode = false;
codepos = 0;
}
}

}

Notiek ielāde…
Atcelt
Saglabāt