Hi alle zusammen,
ich moechte eine Motorsteurrung realisieren. Hier mein Anliegen:
Ein Motor treibt mehrere Zahnraeder an. An einem Zahnrad ist ein Magnet angebracht. Der Motor soll nur so lange laufen das dieses Zahnrad mit dem Magneten genau eine Undrehung macht.
Der Taster wird einmal betaetigt, Mosfet bekommt ein Signal, Motor laeuft und dieser Vorgang wir von dem Hallsensor unterbrochen, sobald der Magnet daran vorbei geht.
Der Vorgang soll immer von dem Magneten unterbrochen werden egal ob der Taster dauerhaft gedrueckt ist oder waehrend dem Vorgang mehrmals betaetigt wird. Sprich fuer einen neuen Zyklus muss der Taster immer erneut gedrueckt werden.
Das Hauptproblem welches ich habe. Ich schaffe es einfach nicht das der Taster immer erneut fuer einen neuen Zyklus gedrueckt werden muss. Ein weiters Problem ist auch, wenn der Taster durchgehend gedrueckt ist wird der Vorgang nur kurz unterbrochen bzw. der Motor haelt nur kurz an und laeuft dann weiter.
In dem Code funktioniert es nur bedingt, indem der Motor erst startet wenn der Schalter wieder los gelassen wird. Allerdings waere mein Wunsch das der Motor schon bei Betaetigung startet.
Ich benutze ein Adafruit Trinket.
Gruss Michael
const int buttonPin = 0;
const int MagnetPin = 2;
const int MosfetPin = 4;
int myStatus = 1; //diese Variable entspricht der Schrittnummer
void setup(){
pinMode(buttonPin, INPUT);
pinMode(MagnetPin, INPUT);
pinMode(MosfetPin, OUTPUT);
;}
void loop(){
if ((digitalRead(buttonPin)==HIGH) && (myStatus==1)){
myStatus=2;}
if ((digitalRead(buttonPin)==LOW) && (myStatus==2)){
myStatus=3;}
if ((digitalRead(MagnetPin)==LOW) && (myStatus==3)){
myStatus=1;}
}
switch (myStatus){
case 1: // stopp
digitalWrite(MosfetPin,LOW);
break;
case 2: // auch stopp
digitalWrite(MosfetPin,LOW);
break;
case 3: // vorwärts
digitalWrite(MosfetPin,HIGH);
break;
}
delay(20);
}