Timer / Poti Schrittmotor

Hallo Ihr Profis,

ich bin total neu in der ganzen Arduino Thematik, und brauche Hilfe.
Ich benötige eine Art “Timer” für das Dachfenster meines Gartenhauses.

Ich möchte:
Poti für Zeiteinstellung
Knopf als Auslöse
LED als Anzeige das der Timer gerade aktiv ist
Zweiter Knopf für Grundstellung

Ablauf:
Mit dem Poti die Zeit einstellen, Knopf betätigen,LED geht an. Nach Ablauf der Zeit
geht die LED wieder aus und der Schrittmotor fährt auf die eingestellt Position.

Bei betätigung eines weiteren Knopfes fährt der Schrittmotor wieder in die
Grundstellung.

Und das ganze beginnt von vorne.

Die Zeiteinstellung soll ohne Display erfolgen, ich möchte die Zeit auf ein Brett
schreiben und den Poti mit einem Pfeil versehen der Pfeil zeigt dann auf die jeweils eingestellte Zeit.

Ich brauche lediglich 20min die der Poti einstellen können muss.

Da ich wirklich kaum Dunst habe habe ich nachstehdenden Code geschrieben.

Muss nicht unbedingt diese Lösung sein, ich bin dankbar über jeden Vorschlag.

Timer.txt (3.14 KB)

Hallo und willkommen im Forum!

Ich "haue Dir mal um die Ohren", was ich so spontan sehe:

  • Du solltest zwischen Variablen und Konstanten unterscheiden.
  • = ist eine Zuweisung, == ist ein Vergleich auf Gleichheit.
  • digitalWrite(ledPin, HIGH); anstelle ledPin=HIGH;
  • delay(val * 60000); erspart Dir die ganzen ifs.

Hi

Ich spendiere für das .txt-File Mal Code-Tags:

#include <Stepper.h>

int oldVal = 0;
int pushButton1 = 9;
int pushButton2 = 8;
const int potPin = A0;
const int ledPin = 13;

Stepper myStepper(SPMU, 2,3,4,5);

void setup() {

  pinMode (ledPin,OUTPUT);
  pinMode (pushButton1,INPUT);
  pinMode (pushButton2,INPUT);
  Serial.begin(9600);
  myStepper.setSpeed(400);

}

void loop() {

  val = analogRead(potPin);
  val = map(val,0,1023,0,20);
  Serial.println(val);
  derlay(15)
  int diff = abs(val - oldVal);

  if (pushButton2 = HIGH)
  {
    myStepper.step(-2048);
  }
  if (val = 1) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(60000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 2) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(120000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 3) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(180000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 4) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(240000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 5) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(300000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 6) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(360000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 7) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(420000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 8) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(480000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 9) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(540000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 10) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(600000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 11) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(660000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 12) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(720000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 13) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(780000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 14) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(840000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 15) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(900000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 16) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(960000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 17) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(1020000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 18) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(1080000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 19) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(1140000);
    ledPin=LOW;
    myStepper.step(2048);
  }
  if (val = 20) && (pushButton1 = HIGH)
  {
    ledPin=HIGH;
    delay(1200000);
    ledPin=LOW;
    myStepper.step(2048);
  }

]

MfG

Hallo und Willkommen!

Also mir sticht da noch was ins Auge:
Nicht: if (pushButton1 == HIGH) sondern if(digitalRead(pushButton1) == HIGH)

bool button1State; // Variable definieren
bool button2State; // Variable definieren

//Vor den ganzen if zeug in der loop
button1State = digitalRead(pushButton1);  //ließt button 1 aus
button2State = digitalRead(pushButton2);
//delay(200);  // einfaches entprellen

if(button1State == HIGH) {
  delay(val * 60000);  // Wie von agmue vorgeschlagen
  //code
}

ändere mal das ganze in deinem Code und poste ihn, aber bitte in code Tages (links/oben)

lg dony

@dony: Entprellen halte ich wegen der nachfolgenden ultralangen delays für unnötig.

agmue:
@dony: Entprellen halte ich wegen der nachfolgenden ultralangen delays für unnötig.

Stimmt! :wink:

Das lange delay ist Mist, weil es die Abfrage des Tasters „in Grundstellung fahren“ erfolgreich verhindert.