Attiny mit RC Anlage steuern

Hallo zusammen,

ich habe mir das mit debuggen mal genauer angeschaut und auch soweit verstanden.
Ich habe das mit dem Code geteset und gleich glaube das ist nicht ganz das was ich meinte.

Die Idee war eigentlich folgende :
Ich will je nachdem wie lange ein Taster gedrückt wird eine Funktion schalten, somit könnte ich mit einem Schalter beliebig viele Funktionen schalten.

also 1 bis 2 Sekunden drücken LED1 an
2 bis 3 Sekunden drücken LED2 an
2 bis 3 Sekunden drücken LED2 aus.

Leider fehlt mir der Ansatz dafür.

Vielleicht habt ihr noch ein Denkanstoss für mich.

ok, Denkanstoß:

  1. Taster / Pulslänge abfragen
  2. erkennen, wenn der Taster gedrückt wird und Zeitpunkt merken "t_taste = millis()"(so ähnlich wie oben im Beispiel: den Status des Tasters / Signals merken. Wenn er sich ändert, wurde der Taster gedrückt)
  3. erkennen, wenn der Taster losgelassen wurde und Drückdauer ermitteln "t_pressed = millis()-t_taste"
  4. Zeit auswerten
    if (t_pressed < 1000) // kleiner 1 sek: Aktion1 ausführen.
    else if (t_pressed < 2000) // kleiner 2 sek: Aktion2 ausführen.
    else if (t_pressed < 3000) ....

PatrickD78:
PS ich habe das ganze zum testen anstelle von der RC Anlage mit einem Taster aufgebaut.

Aus meiner Sicht liegt in diesem Ansinnen ein grundsätzliches Problem.

Ich habe mal mit dem Sketch aus #16 probiert und dabei festgestellt, daß sich pulseIn für prellende Tasten nicht eignet. Außerdem liefert es einen Wert in Mikrosekunden (nicht Millisekunden) zurück, weshalb "5000" als Parameter von pulseIn 5 Millisekunden entspricht, sollte aber 5 Sekunden sein.

Damit teilt sich das Thema in "Attiny mit der Fernsteuerung" oder "mit Tasten", beides zusammen gibt Durcheinander. Möchtest Du "mit Tasten" weitermachen, dann ist #21 geeignet. Solltest Du eine Simulation wollen, dann eignen sich zwei Arduinos dazu, einer als Sender, einer als Empfänger, dann im Mikrosekunden-Bereich. Ein Logicanalyser kann dabei hilfreich sein.

Also wie gesagt, ich habe mir das ganze so vorgestellt:

Ich nutze einen alten Servo und baue den Motor aus. Die Servoelektronik gibt 5 Volt aus sobald ich den Hebel an der RC-Anlage betätige.
Diese 5 Volt sollen an einem Attiny je nachdem wie lange die 5 Volt anstehen, die entsprechende LED schalten.
In Prinzip übernimmt der Servo für mich die Tastfunktion.
So war die Idee, nur weiß ich leider nicht ob das so funktiniert :slight_smile:

Lange Rede kurzer Sinn:
Ich möchte mit Tasten weiter machen.
Ich werde versuchen mal etwas an Code zusammenzustellen und hier zu zeigen.
Werde dann bestimmt noch Hilfe brauchen :o

Gruß

PatrickD78:
Ich möchte mit Tasten weiter machen.

Dann braucht #21 nur noch in Code verwandelt zu werden. Als Anregung:

const int LED1_Pin = 4;
const int LED2_Pin = 6;
const int IN_pin   = 8;
uint32_t akt_millis, tasten_millis;
bool akt_taste, alt_taste;

void setup() {
  pinMode(IN_pin, INPUT_PULLUP);
  pinMode(LED1_Pin, OUTPUT);
  pinMode(LED2_Pin, OUTPUT);
}

void loop() {
  akt_millis = millis();
  alt_taste = akt_taste;
  akt_taste = digitalRead(IN_pin);
  if (!alt_taste && akt_taste) {
    tasten_millis = akt_millis;
  }
  if (alt_taste && !akt_taste) {
    uint32_t gedrueckt_millis = akt_millis - tasten_millis;
    if (gedrueckt_millis > 30) {    // Entprellen
      if (gedrueckt_millis < 1000) {
        digitalWrite (LED1_Pin, HIGH);
      } else if (gedrueckt_millis < 2000) {
        digitalWrite (LED2_Pin, HIGH);
      } else if (gedrueckt_millis < 3000) {
        digitalWrite (LED1_Pin, LOW);
        digitalWrite (LED2_Pin, LOW);
      }
    }
  }
}