Button in WebInterface der Tastend funktioniert

Hallo liebe Arduino gemeinde,

ich stehe vor einem Problem. Ich möchte in eine WebInterface einen Button einbinden der als Taster arbeitet. Ich möchte das der Pin des Arduino nur solange High ist wie der Button gedrückt ist.

Ich habe bis jetzt einen Button der bei betätigung den Pin auf High setzt und den Pin erst wieder bei erneuter betätigung Low setzt.

Ich möchte mein Tor zu Hause gerne von Unterwegs öffnen, da es oft vorkommt das jemand bei mir auf den Hof muss wenn ich nicht zu Hause bin. Der Arduino soll nur für maximal 2000ms das 5V signal auf den Eingang der Torsteuerung geben damit dieses Öffnet wenn dann erneut das 5V signal anliegt würde das Tor wieder Schließen

wäre für eure Hilfe sehr dankbar.

MfG

hi, tobi,

entweder kapier' ich's nicht, oder Deine beschreibung ist nicht gut.

soll beim "drauflegen" des fingers für 2 sekunden ein pin HIGH sein, damit das tor aufgeht, und dann beim wegnehmen des fingers für 2 sekunden derselbe (oder ein anderer, egal) HIGH sein, damit das tor zugeht?

das ließe sich schon machen, weil ein button verschiedene events (ereignisse) kennt, und Du auf verschiedene events auch verschiedene aktionen setzen kannst.
da darfst Du aber nicht, wie gewöhnlich, ein formular mit einem button machen, sondern mußt mit AJAX arbeiten, sonst wird die webseite neu aufgebaut. am besten nimmst Du da jQuery, das baut schöne seiten für mobile geräte und hat schon alles für AJAX dabei.

wasich nicht verstehe: Du bekommst einen anruf und öffnest das tor aus der ferne. dann läßt Du den finger am button, bis... ja, bis wann? und wenn Dein finger abrutscht, schrottest Du dann sein auto mit dem tor?

gruß stefan

Warum so einfach wenns auch kompliziert geht.
Button gedrückt, sende an Arduino HIGH, Arduino sagt für 2 sec Piin 5 HIGH.
Button gedrückt, sende an Arduino LOW, Arduino sagt für 2 sec Piin 5 LOW.

Ich könnte wohl aus meinen alten Projekten passendes rausfinden aber darauf hab ich kein Bock weil ich jetzt openHAB kenne..... achja openHAB!
Da gibt es nämlich sowas für Rolladen!

Hallo,
Es soll beim betätigen des Button ein Pin für 2sec High sein und nach den 2sec wieder auf Low wechseln und auch bleiben.

Die Torsteuerung brauch nur kurz(ca. 2sec) ein externes 5V Signal um das Tor zu Öffnen/Schließen. Das Tor fährt dann jeweils zum Endanschlag und wartet auf eine neue eingabe.

MfG

Hat keiner eine Idee? :frowning:

hi,

tobi, in Deinem zweiten post stellt sich alles viel einfacher dar. wenn Du jetzt schon einen funktionierenden button auf dem handy hast, brauchst Du doch nur den teil mit dem zweiten mal drücken rausnehmen und nach dem

digitalWrite(pinnr, HIGH);

ein

delay(2000);
digitalWrite(pinnr, LOW);

reinschreiben.

oder versteh' ich's wieder nicht?

gruß stefan

Ne, du verstehst es nicht. Er will damit sagen dass ihm einer den kompletten Code liefert den er kritisieren kann.

Eisebaer:
hi,

tobi, in Deinem zweiten post stellt sich alles viel einfacher dar. wenn Du jetzt schon einen funktionierenden button auf dem handy hast, brauchst Du doch nur den teil mit dem zweiten mal drücken rausnehmen und nach dem

digitalWrite(pinnr, HIGH);

ein

delay(2000);
digitalWrite(pinnr, LOW);

reinschreiben.

oder versteh' ich's wieder nicht?

gruß stefan

Hallo Stefan,

das habe ich schon probiert, doch leider wird der Pin nicht wieder Low geschaltet.
ich kann dir meinen Code ja mal schicken. Vllt. habe ich ja noch Irgendwo einen fehler.

Gruß Tobi

skorpi08:
Ne, du verstehst es nicht. Er will damit sagen dass ihm einer den kompletten Code liefert den er kritisieren kann.

Hallo skorpi08,

NEIN ich möchte keinen kompletten Code, ich möchte einfach nur ein paar Tipps bzw. eine Hilfestellung wie ich es umsetzen kann.

Gruß Tobi

Poste doch mal dein Code, hier ist meiner:

/*
  Button

 Turns on and off a light emitting diode(LED) connected to digital
 pin 13, when pressing a pushbutton attached to pin 2.


 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground

 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.


 created 2005
 by DojoDave <http://www.0j0.org>
 modified 30 Aug 2011
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
    delay(2000);
  }
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

Hallo,

habe heute nochmal ein bißchen an dem Code gebastelt, und siehe da es Funktioniert :slight_smile:
Ich habe die Zeile

delay(2000);
digitalWrite(pinnr, LOW);

an einer Falschen stelle geschrieben.

Euch aber Trotzdem vielen dank für die Hilfe.

Gruß Tobi

Hm ... mag funktionieren, aber elegant ist anders. Den Arduino einfach für 2 Sekunde einzufrieren ...

Also ich hätte zunächst eine Variable mit dem Drücken der Taste auf einen Wert größer als 1 gesetzt, und dann im Loop (ohne bzw. mit nur einem winzig kleinen Delay):

  • prüfen ob die Variable größer ist als Null, wenn ja Schaltpin setzen, wenn nein abschalten
  • Variable um eins reduzieren

Somit bleibt der Arduino quasi "lebendig" und kann z.B. weiter LEDs oder Displays bedienen und auf weitere Tasten reagieren. Ein geschicktes Loop-Timing ist das (scheinbare) "Multitasking des kleinen Mannes". Die ganz große Nummer ist dann freilich irgendwann Interrupt-Programmierung, in diesem Falle aber noch nicht zwingend erforderlich.

Du kannst die Verzögerung auch mit millis() machen. Dann kannst du während der Zeit was anderes erledigen.

hi,

Dann kannst du während der Zeit was anderes erledigen.

natürlich.

wenn's was anderes zu erledigen gibt...
sieht hier nicht so aus.

gruß stefan

Wenn der Tobi einmal in der Woche für eine Zeile Code sich bißchen mit dem Sketch auseinandersetzt.... euer ernst?
Lasst den armen Mann in frieden und freiem Gewissen :smiley:

Wenn er an dem "Web" dabei ist, dann kann man mit millis anfangen.

hi,

eben, das meine ich ja. wo ist die grenze?

goto ?? geht nicht, furchtbar !!! machen wir lieber aus 20 zeilen "einfachem" code 30 schwierigere, weil es "so richtig" ist?

delay ?? gilt selbiges...

oder lehnen wir schon digitalwrite ab ?? jeder stammkunde hier weiß, daß es bei weitem "bessere" und vor allem schnellere möglichkeiten gibt. verdammen wir deswegen jetzt das ganze arduino-konzept?

gruß stefan