Habe jetzt die Fenstersteuerung fertig. Habe jetzt noch weniger Haare.
Ich konnte die Fragen vorher erst beantworten, nachdem es funktioniert hat sorry.
Kurzes antippen, fährt kpl. hoch oder runter.
Etwas längerer Druck, fährt etwa immer 2 bis 3cm. Kann ja jeder im Programm selber einstellen. (Die Frage war vor kurzem ob man auf 10cm fahren kann, da kann man mit doppeltem tipp arbeiten, siehe Header Onebutton, dann hätte man 3 Möglichkeiten.) Schaltet in kpl. Fahrt nach 4 Sekunden ab, egal an welcher position man etwas länger Tippt.
Wurde für Duster Gen. 2 linke Seite mit nur zwei Tastern gemacht. Deal Version. Rechte Seite ist mir wurscht.
Einschränkung, hat keinen Einklemmschutz, und wie es mit der Garantie ist, muss jeder selber entscheiden. Es geht hier darum dass man es selber machen kann.
Ich habe ein Bild des Schaltplanes und eines des Programmes, mit Arduino Uno Nachbau oder eben eigener Platine. Folgende Dinge beachten, Bootloader bei extra Platine vorher nicht vergessen, Header siehe Text Programm nicht vergessen abändern.
Layout bekommt ihr nicht, habe zu viele Fehler reingemacht, und es dann pragmatisch abgeändert. Alles in Schrumpfschlauch gepackt. Kabelsatz aus einem alten Autoradiostecker gemacht, wollte nichts abzwicken, oder anklemmen, man muss es nur dazwischen stecken. Dicke Kabel verwenden.
Habe ein Elli Echo Relais genommen (20A), hatte ich zufällig in der Schublade, gibt es glaube ich nicht mehr.
Ist nur für Leute die gerne basteln, finanziell rechnet es sich wohl kaum, es geht um das Erfolgserlebnis, für diejenigen die es brauchen.
Alles ohne Gewähr. Bei mir funktioniert es prima.
Hier der Code:
// Dank an alle aus dem Internet von denen ich die Programmschnipsel her habe
// Ohne Gewähr, Achtung hat keine Einklemmerkennung, wenn nicht vorhanden nicht verwenden.
//-----------------Achtung------------------------- Onebutton.h noch anpassen
// und zwar dies Zeile in: unsigned int _pressTicks = 300; // number of msecs before a long button press is detected--- ursprünglich wars 800
//Programm könnte noch erweitert werden, mit der Doppelclick Funktion, z.B. dann fahre 10cm runter
#include "OneButton.h" // oder mit < > schreiben, je nachdem wo die Datei sich befindet
// Setup a new OneButton on pin A1. //A1 Knopf ist für Runter
OneButton button1(A1, true);
// Setup a new OneButton on pin A2. //A2 Knopf ist für hoch
OneButton button2(A2, true);
const int HOCH = 0; //vorher 2 je nachdem welche Pins verwendet werden sollen
const int RUNTER = 1; //vorher 3
void setup() {
pinMode(HOCH, OUTPUT);
pinMode(RUNTER, OUTPUT);
// link the button 1 functions.
button1.attachClick(click1);
// button1.attachDoubleClick(doubleclick1);
button1.attachLongPressStart(longPressStart1);
// link the button 2 functions.
button2.attachClick(click2);
// button2.attachDoubleClick(doubleclick2);
button2.attachLongPressStart(longPressStart2);
} // setup
// main code here, to run repeatedly:
void loop() {
// keep watching the push buttons:
button1.tick();
button2.tick();
// You can implement other code in here or just wait a while
delay(5); //Hier war ursprünglich 10
} // loop
// ----- button 1 callback functions
// This function will be called when the button1 was pressed 1 time (and no 2. button press followed).
void click1() {
Serial.println("Button 1 click."); // Ist Taste A1 runter gedrückt
if (digitalRead(A2)== HIGH ){ // und Taste A2 (hoch) nicht gedrückt (Also hier ist nicht gedrückt HIGH),
digitalWrite(RUNTER, HIGH); // dann runter
delay (320);} //ursprünglich 320 wie lange der kurze Druck fährt
digitalWrite(RUNTER, LOW); // runter beenden
} // click1
// This function will be called once, when the button1 is pressed for a long time.
void longPressStart1() {
for (int zaehler=1; zaehler<=100; zaehler = zaehler+1){
Serial.println("Button 1 longPress start"); //Ist Taste A1 Runter gedrückt
if (digitalRead(A2)== HIGH){ // und hoch Taste A2 nicht gedrückt (nicht gedrückt ist high)
digitalWrite(RUNTER, HIGH); // dann fährt er runter hier länger
delay (38); //hier war 40 Fast 4 Sekunden bis abgeschaltet
digitalWrite(RUNTER, LOW); } // wenn Zeit vorüber runter beenden
else zaehler = 100; // Durchläufe ursprünglich 100
//digitalWrite(RUNTER, LOW);
}
delay (200);
}
void click2() {
Serial.println("Button 2 click."); // Ist Taste hoch A2 gedrückt
if (digitalRead(A1)== HIGH){ // und Taste A1 (runter) nicht gedrückt (Also hier ist nicht gedrückt HIGH),
digitalWrite(HOCH, HIGH); // dann hoch
delay (320);} // wie lange der kurze Druck fährt
digitalWrite(HOCH, LOW); // hoch beenden
} // click2
void longPressStart2() {
for (int zaehler=1; zaehler<=100; zaehler = zaehler+1){
Serial.println("Button 2 longPress start"); //Ist Taste A2 (hoch)gedrückt
if (digitalRead(A1)== HIGH){ // und runter Taste A1 nicht gedrückt (nicht gedrückt ist high)
digitalWrite(HOCH, HIGH); // dann fährt er hoch hier länger
delay (38); //hier war 40 Fast 4 Sekunden bis abgeschaltet
digitalWrite(HOCH, LOW); } // wenn Zeit vorüber hoch beenden
else zaehler = 100; // Durchläufe ursprünglich 100
//digitalWrite(HOCH, LOW);
}
delay (200);
} // longPressStart2
// End
//Viel Spass