Unterschiedliche Ausgangsspannungen - Taster falsch verdrahtet?

Hallo,

auch ich befasse mich mit dem Arduino erst seit wenigen Wochen.
Ich möchte ein Relais bei kurzem Tastendruck für eine Zeit x eingeschaltet lassen, bei einem andauernden Tastendruck soll das Relais so lange angesteuert werden, wie die Taste gedrückt wird.
Das funktioniert in der Theorie auch soweit.
Den Taster habe ich mit R=10k gegen Masse verschaltet.
Wenn ich nun den Taster geschlossen halte, bekomme ich am Ausgang ~ 1,5V, bei geöffnetem Taster (und durchgesteuertem Ausgang) sind es ~4,8V. Als Trockenübung mit LED ist ja noch alles Schick, aber am Relais (mit Transistorstufe) funktioniert das dann nicht mehr so schön.
Wer kann mir hier einen Rat geben?

Auch wenn ich denke, dass der Code nicht relevant ist, hier ist er dennoch:

int ab = 48;
int ab2 = 48;
int Taster4 = 44;


long Taster4Timer = 20;
long longPressTime = 250;

boolean Taster4Active = false;
boolean longPressActive = false;

void setup() {

 pinMode(ab, OUTPUT);
 pinMode(ab2, OUTPUT);
 pinMode(Taster4, INPUT_PULLUP);
 
}

void loop() {

 if (digitalRead(Taster4) == HIGH) {

   if (Taster4Active == false) {

     Taster4Active = true;
     Taster4Timer = millis();

   }

   if ((millis() - Taster4Timer > longPressTime) && (longPressActive == false)) {

     longPressActive = true;}
    
      
      digitalWrite(ab, HIGH);
   // delay(0);
      digitalWrite(ab, LOW);

   }

  else {

   if (Taster4Active == true) {

     if (longPressActive == true) {

       longPressActive = false;

     } else {

       digitalWrite(ab2, HIGH);
       delay(10000);
       digitalWrite(ab2, LOW);
       

     }

     Taster4Active = false;

   }

 }

}

int ab = 48;
int ab2 = 48;
....

pinMode(ab, OUTPUT);
pinMode(ab2, OUTPUT);

Was ist der Zweck dieser mir doch etwas wunderlich erscheinenden Kombination?

digitalWrite(ab, HIGH);
// delay(0);
digitalWrite(ab, LOW);

Ich weiß nicht, wie schnell deine Relais sind...
Meine sind nicht so schnell.

Hallo,

"ab" ist für den Fall, daß das Relais so lange geschlossen bleibt wie der Taster gesrückt wird (delay(0))
"ab2" ist für den Fall, daß das Relais (10000 ms) gehalten wird

Gruß
Shecter

Diese Erklärung macht es nur noch wunderlicher für mich.
Ich denke, diese Logik solltest du nochmal überarbeiten.

Hier ist auch ein logisches Problem, welches mich irritiert:

Den Taster habe ich mit R=10k gegen Masse verschaltet.
pinMode(Taster4, INPUT_PULLUP);

Taster falsch verdrahtet?

Nichts genaues, weiß man nicht.
Aber ja, es hört sich so an.

Hi,

das mit dem "pinMode(Taster4, INPUT_PULLUP);" resultiert daraus, daß ich ein wenig expirimentiert habe - das PULLUP habe ich schon wieder gelöscht.
Die Verdrahtung habe ich in folgender Reihenfolge vorgenommen:
VCC
Taster Eingang
Taster Ausgang
Eingang Arduino / R10k //also beide am gleichen Punkt
R10k // andere Seite des Widerstands
Masse

Ist das denn so korrekt?

Weiß nicht...
Hört sich korrekt an, aber ein Schaltplan, und sei es nur mit Bleistift, wäre klarer als Prosa.

Ich selber, bevorzuge interne und externe Pullup.
Aber das ist eher eine Geschmacksfrage, als eine Wichtigkeit.

Hallo,

ich hab mir deinen Sketch nicht genau angesehen, wie kommst Du darauf das es nicht daran liegt ? Woran soll es sonst liegen, an der Hardware ?

Ich denke wenn du die 1.5V misst wird der Ausgang ständig ein und aus geschaltet und im mittel ergibt das 1.5V . Bau ein paar Serial.print ein um dir den Zustand anzeigen zu lassen. Aber Du hast schon recht ist eine geile Übung um millis zu verstehen.

Heinz

Du solltest beachten, dass Taster manchmal prellen, das könnte den Arduino verwirren. Außerdem sieht das Sketch mit Booleans und einem Pin unter zwei Namen unnötig kompliziert aus. Das sollte auch einfacher gehen.

Ist das denn so korrekt?

Nicht bei

    pinMode(Taster4, INPUT_PULLUP);

Ein Eingangspin sollte entweder LOW ( am besten 0V, auf jeden Fall < 0.7V ) sein, oder HIGH ( >=3 V )

Deine gewünschte Logik verstehe ich so: sobald der Taster betätigt wird, wird das Relais für min. Zeit x (1s) eingeschaltet. Ist der Taster nach dieser Zeit immer hoch gedrückt, bleibt das Relais ein, bis der Taster losgelassen wird.

Nicht erwähnt ist: Ab wann zählt die Zeit, wenn innerhalb der Zeit x der Taster erneut kurz gedrückt wird?
Bleibt das Relais permanent an, wenn du z.b. alle 800 ms für 100 ms den Taster betätigst, x = 1000 ms ?
oder geht es 1000 ms nach dem ersten Start aus und 600 ms später wieder an (beim übernächsten Betätigen?)

Das Prellen beim Übergang normal -> gedrückt wird nebenbei mit erschlagen, allerdings prellt ein Taster auch beim Loslassen. Soll das auch die Zeit x neu starten?

Den Taster habe ich mit R=10k gegen Masse verschaltet.

pinMode(Taster4, INPUT_PULLUP);

Du hast hier einen Spannungsteiler gebastelt mit dem Du nie HIGH am Eingang haben wirst (der interne Pullup ist zwischen 20k und 50 kOhm)

Wenn ich nun den Taster geschlossen halte, bekomme ich am Ausgang ~ 1,5V, bei geöffnetem Taster (und durchgesteuertem Ausgang) sind es ~4,8V. Als Trockenübung mit LED ist ja noch alles Schick, aber am Relais (mit Transistorstufe) funktioniert das dann nicht mehr so schön.

Relaismodule funktionieren oft invertiert. Das Relais schaltet mit LOW ein. Wie hast Du die LED angeschlossen. Zwischen Ausgang und +5V?

Grüße Uwe

Hallo zusammen,

danke für die zahlreichen Hinweise. Der Code ist sicherlich nicht sauber geschrieben und es gibt bestimmt noch viel Potential (was einige von euch auch angeregt haben). Mit diesem Thema werde ich mich später befassen.
Dank des Hinweises von "Rentner" habe ich mir das Ganze mal mit dem Oszi angesehen. Es ist tatsächlich so, daß die Spannungen "sehr schnell (auf eine Frequenzmessung habe ich verzichtet)" geschaltet werden. Dies scheint dadurch bedingt zu sein, daß ich "delay()" herausgenommen habe. Wenn ich nun delay auf mindestens 1 ms setzte habe ich eine saubere Ausgangsspannung. Da die Anwendung alles Andere als zeitkritisch ist, könnte ich sogar mit 500 ms leben.

Danke und Gruß
shecter