Suche Programmierer für Timer

Ich suche jemanden, der mir für kleines Geld einen Timer programmieren kann.
Hardware technisch habe ich kein Problem aber mit der Programmierung hapert es…

Folgende Konfiguration muss gegeben sein:
Taster drücken und eine rote LED geht für 5 Sekunden an.
Die geht dann aus und eine grüne LED Leuchtet 10 Sekunden.
Die geht dann aus, und die rote LED leuchtet wieder für 5 Sekunden.
Ende des Ablaufs.
Hintergrund ist der, ich will für unsere Schützen Jugend (Luftpistole, keine scharfe Munition), einen Stand für Schnell Feuer bauen.
Der Schütze druckt eine Taste, hat dann 5 Sekunden Zeit, sich einzurichten (rote LED) und danach 10 Sekunden fünf Schuss abzugeben (grüne LED).

Wäre super, wenn sich jemand finden würde, der das einfach programmieren kann.

Gruß Thomas

Moin Thomas,
willkommen im Forum!

Die Spezifikation ist unvollständig.

  • Wie viele Bahnen sollen mit der Ampel von einem Rechner aus versorgt werden?
  • Was soll passieren, wenn der Schütze während des Ablaufs die Taste wieder drückt?
  • Was passiert nach dem Ablauf, gibt es eine Sperrzeit - oder sind das die zweiten 5s rot?
  • Wie soll der Schütze zwischen der zweiten Rotphase und der folgenden ersten unterscheiden - oder soll dazwischen alles aus?
  • Wie groß sind die Abstände zwischen Taster / Rechner / LEDs?
  • Welche Hardware hast Du vorgesehen? (Insbesondere Ardunio und LEDs)

Die Programmierung wäre für viele hier tatsächlich eine vermutlich leichte Übung.
Aber normalerweise helfen wir lieber beim Verständnis und/oder beim "Entwanzen" dessen, was der Fragesteller schon hat.

Das bedeutet:

Gruß Walter

Verein?
Gemeinnützig?

Ich bau Dir das zusammen.
Das ist nix, was irgendeiner größeren Operation bedarf.

Schrittkette mit 4 Stati.

Struktur für eine Bahn.
Brauchst Du mehr, fügst Du einfach eine dazu.
Der ganze Code braucht nicht verändert werden.

Zusatzoption:
Abbruch der Sequenz durch Auslöser an zentraler Stelle für alle Bahnen.

Wenn ich morgen abend mit der Bahn fahre, haste das wenn ich aussteige.

Hi,

Ja wir sind ein kleiner e.V. und brauchen wie alle Vereine, junge Menschen.
Nachdem das Schießen auf Papierscheiben zwar Technisch sehr anspruchsvoll ist,
Aber im Prinzip auch irgendwie langweilig, dachte ich mir, das wäre was um die Jugend
Etwas mehr zu motivieren.
Macht halt mehr Spaß fünf Schuss innerhalb 10 Sekunden abgeben zu müssen, als sich ewig auf eine Scheibe zu konzentrieren und dann auszulösen.

Gruß Thomas

Gesendet von Yahoo Mail für iPad

So wie die Aufgabe beschrieben ist, muss man sich da nicht viel Gedanken machen:

Programmcode
#include <Button_SL.hpp>         // https://github.com/DoImant/Button_SL

using MillisType = decltype(millis());
namespace gc {
  constexpr uint8_t ButtonPin {4};
  constexpr uint8_t RedLedPin {5};
  constexpr uint8_t GreenLedPin {6};
  constexpr MillisType ShortDelay_ms {5000};
  constexpr MillisType LongDelay_ms {10000};
}

Btn::ButtonSL Button {gc::ButtonPin};

void lightLedWithDelay(uint8_t Pin, MillisType Time_ms) {
  digitalWrite(Pin, HIGH);
  delay(Time_ms);
  digitalWrite(Pin, LOW);
}

void setup() {
  Button.begin();
}

void loop() {
  if(Button.tick() != Btn::ButtonState::notPressed) {
    lightLedWithDelay(gc::RedLedPin ,gc::ShortDelay_ms); 
    lightLedWithDelay(gc::GreenLedPin ,gc::LongDelay_ms); 
    lightLedWithDelay(gc::RedLedPin ,gc::ShortDelay_ms); 
  }
}

Zum Ausprobieren:

Hallo spider_tommy

Hier kommt ein Timer Beispiel für einen Schützen.

//https://forum.arduino.cc/t/suche-programmierer-fur-timer/1385931
//https://europe1.discourse-cdn.com/arduino/original/4X/7/e/0/7e0ee1e51f1df32e30893550c85f0dd33244fb0e.jpeg
#define ProjectName "Schützen Jugend Timer"
#define NotesOnRelease "Arduino DUE NANO UNO MEGA tested"
// make names
enum TimerEvent {NotExpired, Expired};
enum TimerControl {Halt, Run};
enum OnOff {Off, On};
// make variables
uint32_t currentMillis = millis();
constexpr uint32_t TimeToGetReady {5000};
constexpr uint32_t TimeToFire {10000};
constexpr uint32_t TimeToEnd {5001};
constexpr uint8_t StartButton[] {A0};
constexpr uint8_t LedRed[] {9};
constexpr uint8_t LedGreen[] {10};
// make structures
//-----------------------------------------
struct TIMER
{
  uint32_t interval;
  uint8_t control;
  uint32_t now;
  uint8_t expired(uint32_t currentMillis)
  {
    uint8_t timerEvent = currentMillis - now >= interval and control;
    if (timerEvent == Expired) now = currentMillis;
    return timerEvent;
  }
};
struct SHOTTINGRANGE
{
  uint8_t ledRed;
  uint8_t ledGreen;
  uint8_t startButton;
  TIMER shooting;
  void make(uint8_t ledRed_, uint8_t ledGreen_,  uint8_t startButton_)
  {
    ledRed = ledRed_;
    ledGreen = ledGreen_;
    startButton = startButton_;
    Serial.print ("led test ");
    pinMode(ledRed, OUTPUT);
    digitalWrite (ledRed, On);
    delay(1000);
    Serial.print (" . ");
    digitalWrite (ledRed, Off);
    delay(1000);
    pinMode(ledGreen, OUTPUT);
    digitalWrite (ledGreen, On);
    Serial.print (" . ");
    delay(1000);
    digitalWrite (ledGreen, Off);
    delay(1000);
    Serial.println (" done");
    pinMode(startButton, INPUT_PULLUP);
    shooting.control = Halt;
    shooting.interval = TimeToGetReady;
  }
  void run(uint32_t currentMillis)
  {
    if ((shooting.control == Halt) and ((digitalRead(startButton) ? Off : On) == On))
    {
      digitalWrite (ledRed, On);
      shooting.control = Run;
      shooting.interval = TimeToGetReady;
      shooting.now = currentMillis;
    }
    if (shooting.expired(currentMillis) == Expired)
    {
      switch (shooting.interval)
      {
        case TimeToGetReady:
          digitalWrite (ledRed, Off);
          digitalWrite (ledGreen, On);
          shooting.interval = TimeToFire;
          shooting.now = currentMillis;
          break;
        case TimeToFire:
          digitalWrite (ledRed, On);
          digitalWrite (ledGreen, Off);
          shooting.interval = TimeToEnd;
          shooting.now = currentMillis;
          break;
        case TimeToEnd:
          digitalWrite (ledRed, Off);
          digitalWrite (ledGreen, Off);
          shooting.control = Halt;
          break;
      }
    }
  }
};
//-----------------------------------------
struct HEARTBEAT
{
  uint8_t led;
  uint32_t beat[2];
  TIMER beatTimer;
  void make (uint8_t led_, uint32_t beat_)
  {
    led = led_;
    beat[Off] = beat_;
    beat[On] = beat_ / 10;
    pinMode (led, OUTPUT);
    beatTimer = {beat[Off], Run, millis()};
  }
  void exec (uint32_t currentMillis)
  {
    if (beatTimer.expired(currentMillis) == Expired)
    {
      digitalWrite (led, digitalRead(led) ? Off : On);
      beatTimer.interval = beat[digitalRead(led)];
    }
  }
};
//-----------------------------------------
// make objects
HEARTBEAT heartBeat;
SHOTTINGRANGE shootingRange[sizeof(StartButton)];
//-----------------------------------------
// make application
void setup()
{
  Serial.begin(115200);
  for (uint8_t n = 0; n < 32; n++) Serial.println("");
  Serial.print("Source: "), Serial.println(__FILE__);
  Serial.print(ProjectName), Serial.print(" - "), Serial.println(NotesOnRelease);
  heartBeat.make(LED_BUILTIN, 1000);
  uint8_t element = 0;
  for (auto &sR : shootingRange)
  {
    sR.make(LedRed[element], LedGreen[element], StartButton[element]);
    element++;
  }
  delay(2000);
  Serial.println(" =-> and off we go\n");
}
void loop()
{
  currentMillis = millis();
  heartBeat.exec(currentMillis);
  for (auto &sR : shootingRange) sR.run(currentMillis);
}

Cool , danke für die überraschend schnelle Hilfe, ohne blöde Sprüche
wie man sie leider in vielen anderen Foren bekommt.
Werds mal probieren, kann aber nicht versprechen dass es vor den Pfingstferien noch klappt.
Gebe aber auf alle Fälle Bescheid
Danke
Thomas

Wenn Dir blöde Sprüche fehlen, die können wir nachliefern. :wink: :wink:

Mach Dir keinen Streß. Wenn Du's ausprobieren kannst dann mach es und dann melde Dich bei uns. (auch 2 Fotos wären nett.).
Ansonsten sind wir bei Fragen weiterhin hier.
Grüße Uwe

1 Like


Wie versprochen die Bilder.
Gehäuse aus dem 3 D Drucker und probeweise verkabelt.
Danke nochmals

1 Like

Wenn ich mir die Randtreffer so ansehe, - Du solltest die Front des Timers besser mit einer Blechplatte verstärken... :wink:

1 Like