Hallo Zusammen,
ich habe mit meinem Sohn eine Garage für sein ferngesteuertes Auto gebastelt. Daran ein Garagento, welches per Schrittmotor + Codetaster geöffnet werden soll. Alles mit dem Arduino.
Das ganze funktioniert auch soweit, allerdings verzweifle ich an einem Punkt.
Wenn der Code zum öffnen eingegeben wird, fährt der Schrittmotor auf die Stellung öffnen, schließt dann aber sofort wieder. Ich blicks nicht. Kann mir da jemand weiterhelfen? Sorry bitte für den Programmierstil, ist einer meiner ersten Programme!
Vielen Dank
Markus
#include <Keypad.h>
#include <Servo.h>
// Pinlänge und Pincode festlegen
const byte PINLENGTH = 4;
char pinOpen[PINLENGTH+1] = {'1','1','1','1'};
//Markus Begin
char pinClose[PINLENGTH+1] = {'0','0','0','0'};
//Markus Ende
// Zwischenspeicher für Eingaben
char keyBuffer[PINLENGTH+1] = {'-','-','-','-'};
// Kompakter kann man das auch so schreiben:
// char pin[] = "0815";
// char keyBuffer[] = "----";
// Definition für das Keypad von Elegoo
const byte ROWS = 4; // vier Zeilen
const byte COLS = 4; // vier Spalten
// Symbole auf den Tasten
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
// Einstellung für Servo und LEDs
//const int greenPin = 12;
//const int redPin = 13;
const int servoPin = 10;
const int servoPin1 = 11;
const int angleClosed = 5;
const int angleClosed1 = 7;
const int angleOpen = 100;
const int angleOpen1 = 100;
const int anglezero1 = 0;
const int openDelay = 3000;
// Servo-Objekt erzeugen
Servo myservo;
Servo myservo1;
// Instanz von Keypad erzeugen, Keymap und Pins übergeben
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup()
{
Serial.begin(9600);
// LED Pins setzen
// pinMode(greenPin, OUTPUT);
// pinMode(redPin, OUTPUT);
// digitalWrite(greenPin, LOW);
// digitalWrite(redPin, LOW);
// Servo auf Ausgangsposition
myservo.attach(servoPin);
myservo.write(angleClosed);
myservo1.attach(servoPin1);
myservo1.write(angleOpen1);
}
void loop()
{
// Gedrückte Taste abfragen
char customKey = customKeypad.getKey();
if (customKey)
{
// Check, ob ASCII Wert des Char einer Ziffer zwischen 0 und 9 entspricht
if ((int(customKey) >= 48) && (int(customKey) <= 57)){
addToKeyBuffer(customKey);
}
// oder Code überprüfen, falls Raute gedrückt wurde
else if (customKey == '#')
{
checkKey();
}
}
}
void addToKeyBuffer(char inkey)
{
Serial.print(inkey);
Serial.print(" > ");
// Von links nach rechts Zeichen um eins weiterkopieren = ältestes Zeichen vergessen
for (int i=1; i<PINLENGTH; i++)
{
keyBuffer[i-1] = keyBuffer[i];
}
// in ganz rechter Stelle die letzte Ziffer speichern
keyBuffer[PINLENGTH-1] = inkey;
Serial.println(keyBuffer);
}
void checkKey()
{
// Eingabe mit festgelegtem Pincode vergleichen
if (strcmp(keyBuffer, pinOpen) == 0)
{
Serial.println("Garage auf");
// Aktion für richtigen Pin ausführen
pinGarageAuf();
}
//Markus Begin
if (strcmp(keyBuffer, pinClose) == 0)
{
Serial.println("Garage zu");
// Aktion für richtigen Pin ausführen
pinGarageZu();
}
// Markus Ende
// else {
// Serial.println("Code Falsch!");
// Aktion für falschen Pin ausführen
//pinWrong();
// }
// Nach Überprüfung Eingabe leeren
for (int i=0; i < PINLENGTH; i++) {
keyBuffer[i] = '-';
}
}
// Aktion für Pincode öffnen
void pinGarageAuf()
{
myservo.write(angleOpen);
myservo1.write(angleClosed1);
delay(10);
}
//Markus Beginn
// Aktion für Pincode schließen
void pinGarageZu()
{
myservo.write(angleClosed);
myservo1.write(angleOpen1);
}