Schrittmotor mit Zeitverzögerung zum Endschalter


hallo ich habe folgendes projekt, ich möchte ein rolladenmodell bauen. es soll mit dem schrittmotor 28byj-48 (5v) gesteuert werden. ich habe

2xschalter für fahrt hoch/runter, dann 2xendschalter oben/unten und einen "windsensor" (also noch einen schalter).

das teil soll

1.bei kurzem drücken von schalter hoch/runter auf endschalter oben/untern fahren.
2. bei längerem drücken soll die fahrt beim losassen aufhören.
3. beim windsensor soll die gesamte sache ohne mögliche einwirkung von außen, auf den oberen endschalter fahren.

da ich ein anfänger bin habe ich gerade ein problem damit einen interrupt ein zu programmieren welcher den schrittmotor unterbricht.

könnt ihr mit vielleicht erklären wie genau ich solch einen interrupt in mein programm einbauen müsste? ich versuche mir die sache hier selber beizubringen deswegen hoffe ich sehr auf eure hilfe!!
viele liebe grüsse und danke im vorraus!!!

hier mein code für den aufwärtsschalter (um das ganze übersichtlich zu machen habe ich die frage auf die aufwärtsfahrt eingeschränkt).


code: [select]

#include "stepper.h"
#define steps  32   
int tasterstopp1_pin = 2;
int tasterstopp2_pin = 12;
volatile int tastehochstate = 0;
volatile int tasterunterstate = 0;
int druckzeit = 200;
unsigned long aktuellezeit;
long vorherigezeit;
int = 0;
#define druckzeit 1000
int tasterrunter_pin = 3;
int tasterhoch_pin = 4;
int  steps2take; 
 

stepper small_stepper(steps, 8, 10, 9, 11);


void setup()
{
  pinmode(tasterstopp1_pin,input);
  pinmode(tasterstopp2_pin,input);
  pinmode(tasterhoch_pin,input);
  pinmode(tasterrunter_pin,input);
  attachinterrupt(0, stopp1, rising);
 
}
void stopp1 (){
tastehochstate = digitalread(tasterstopp1_pin); // wie baue ich diesen interrupt jetzt in meine millis() funktion ein?


if (tastehochstate == high)
{
  small_stepper.setspeed(700);
                      steps2take  =  -150;               // ich möchte, dass der schrittmotor wenn er den endschalter kommt
                      small_stepper.step(steps2take);    //   -150 schritte geht und dann anhält
                      delay(0);
}
}

void loop ()
{
  tastehochstate = digitalread(tasterhoch_pin);
  if (tastehochstate == high)
  {
    if (a == 0)
    {
      vorherigezeit = millis();
      = 1;
    }
    aktuellezeit = millis();
    if (aktuellezeit - vorherigezeit <= druckzeit)
    {
     small_stepper.setspeed(700); //max seems 700
                      steps2take  =  2000;  // rotate cw
                      small_stepper.step(steps2take);
                      delay(0);
    }
   else
    {
      small_stepper.setspeed(700); //max seems 700
                      steps2take  =  0;  // rotate cw
                      small_stepper.step(steps2take);
                      delay(100);
                      = 0;   
    }
    while (digitalread (tasterhoch_pin))
   if (aktuellezeit - vorherigezeit >= druckzeit)
    {
     small_stepper.setspeed(700); //max seems 700
                      steps2take  =  50;  // rotate cw
                      small_stepper.step(steps2take);
                      delay(0);
                     
                     
    }
   else
    {
      small_stepper.setspeed(700); //max seems 700
                      steps2take  =  0;  // rotate cw
                      small_stepper.step(steps2take);
                      delay(100);
                      = 0;
                     
    }
  }
}

hallo ich habe folgendes projekt, ...
ohne mir das ganze näher angesehen zu haben: das riecht imo sehr nach einer aufgabe, die besten mit einem „endlichen automat" gelöst werden kann. mir zu diesem thema eingefallen ist, habe ich hier ins netz gekippt. beachte ggf. die folgeseite.

gruß

gregor


Arduino Forum > International > Deutsch (Moderator: uwefed) > Schrittmotor mit Zeitverzögerung zum Endschalter


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???