Gast
#4550554
Hallo ich habe mir aus 2 StepperMotoren 28BYJ-48 mit Antrieb Modulplatine ULN2003 eine 2 Achsen Timelapse Vorrichtung gebaut und konnte diese im letzten Urlaub auch schon ausgiebig testen. Wer nicht weiß was das ist hier ein schneller Link. Youtube-Video https://www.youtube.com/watch?v=2U5tpWPP6F4 Ich möchte das ganze jetzt ein wenig erweitern und zwar das man die Geschwindigkeit über ein Poti einstellen kann. Allerdings muss ich zugeben das ich das Programm nicht selbst geschrieben habe sondern ein netter User von hier hat es mir zu Verfügung gestellt. Naja meine Idee war das ganz einfach über ein analogRead machen und dann bei der Geschwindigkeit einfügen das funktioniert allerdings nicht Jemand eine Idee ? struct toyStepper_t{ byte bluePin; byte pinkPin; byte yellowPin; byte orangePin; unsigned long stepDelay; bool clockwise; byte curState; unsigned int steps2go; unsigned long lastStepMicros; }; toyStepper_t stepper[2]={ {2,3,4,5, 1000L*10, true, 0, 0, 0 }, //Motor 1 Tilt 50-120° drehen {8,9,10,11, 3000L*14, true, 0, 0, 0 }, //Motor 2 PAN (360° drehen) //Hier wollte ich enfach das *10 durch valsens ersetzen das will er aber nicht..... }; const int Taster=7; /Ein AusTaster const int LEDPin=13;//Standby LED const int sens=A0; //poti an A0 int valsens=0; int Tasterstellung = LOW; const int NUMSTEPPERS= sizeof(stepper)/sizeof(toyStepper_t); const byte lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001}; void updateStepper(byte index, long nowMicros) { if (stepper[index].steps2go==0) return; if (nowMicros-stepper[index].lastStepMicros >= stepper[index].stepDelay) { stepper[index].lastStepMicros= nowMicros; stepper[index].steps2go--; if (stepper[index].clockwise) { if (stepper[index].curState>0) stepper[index].curState--; else stepper[index].curState=7; } else { if (stepper[index].curState<7) stepper[index].curState++; else stepper[index].curState=0; } setOutput(index, stepper[index].curState); } } void setup() { }; //declare the motor pins as outputs for (int i=0; i<NUMSTEPPERS; i++) { pinMode(stepper[i].bluePin, OUTPUT); pinMode(stepper[i].pinkPin, OUTPUT); pinMode(stepper[i].yellowPin, OUTPUT); pinMode(stepper[i].orangePin, OUTPUT); setOutput(i, stepper[i].curState); pinMode(Taster,INPUT); // Taster INPUT pinMode(LEDPin,OUTPUT); //LED output pinMode(sens,INPUT); //Poti input } Serial.begin(9600); Serial.println("Stepper demo"); } const unsigned int stepsPerRevolution= 2200; void loop(){ Tasterstellung=digitalRead(Taster); valsens=analogRead(sens); long now=micros(); if (Tasterstellung==HIGH){ digitalWrite(LEDPin,LOW); for (int i=0; i<NUMSTEPPERS; i++) { updateStepper(i, now); if (stepper[i].steps2go==0) { stepper[i].clockwise= !stepper[i].clockwise; stepper[i].steps2go= stepsPerRevolution; } } } else{ digitalWrite(LEDPin,HIGH); } } void setOutput(byte index, byte state) { digitalWrite(stepper[index].bluePin, bitRead(lookup[state], 1)); digitalWrite(stepper[index].pinkPin, bitRead(lookup[state], 0)); digitalWrite(stepper[index].yellowPin, bitRead(lookup[state], 3)); digitalWrite(stepper[index].orangePin, bitRead(lookup[state], 2)); }