void draai(unsigned int duur){ unsigned long timer; timer = millis(); timer = timer + duur; digitalWrite(Relay_3, RELAY_ON);// set the Relay OFF while (timer > millis()) { // gebruik deze ruimte om iets af te handelen tijdens de draai } digitalWrite(Relay_3, RELAY_OFF);// set the Relay OFF}
while (timer > millis()) { // gebruik deze ruimte om iets af te handelen tijdens de draai }
Ik heb net het filmpje van AndrevdG gezien.
of hall sensors onder de ring
Dat moet de lockingpin van de draaischijf zijn
/*----Semiautomatische draaischijf besturing-----*//* versie 4 *//* basis idee geef korte puls op het relais, de draaischij gaat draaien *//* als de draaischijf 1 positie gedraait heeft, stopt de stroom door de motor automatisch *//* dit genereert een overgang van laag naar hoog op de motor sense pin */#define aan 0 // tbv relais ingangen zijn geinverteerd #define uit 1#define richting1 2 // Arduino Digital I/O pin number tbv relais sturing#define richting2 3 // 2 single relais altijd gelijkop bewegen bepalen de draairichting#define lock 4 // relais wat de interne "lock" van de draaischijf aanstuurt #define Relay_4 5#define In_1 6 // Arduino Digital I/O pin number tbv schakelaars#define In_2 7#define In_3 8#define In_4 9#define cSense 10 // curent sense motoraandrijvingbool pulsBusy = false;unsigned long pulsTimer = 0;unsigned long pulsTimer2 = 0;unsigned long pulsDuur = 2000;int teller = 0;void setup() /****** SETUP: RUNS ONCE ******/{ //-------( Initialize Pins so relays are inactive at reset)---- digitalWrite(richting1, uit); digitalWrite(richting2, uit); digitalWrite(lock, uit); digitalWrite(Relay_4, uit); //---( THEN set pins as outputs )---- pinMode(richting1, OUTPUT); pinMode(richting2, OUTPUT); pinMode(lock, OUTPUT); pinMode(Relay_4, OUTPUT); delay(1000); //Check that all relays are inactive at Reset pinMode(In_1, INPUT_PULLUP); pinMode(In_2, INPUT_PULLUP); pinMode(In_3, INPUT_PULLUP); pinMode(In_4, INPUT_PULLUP); pinMode(cSense, INPUT); Serial.begin(38400);}//--(end setup )---void loop() /****** LOOP: RUNS CONSTANTLY ******/{ if (!digitalRead(In_1)) { clockwise(1); teller = 2; } if (!digitalRead(In_2)) { clockwise(1); teller = 4; } if (!digitalRead(In_3)) { clockwise(0); teller = 2; } if (!digitalRead(In_4)) { clockwise(0); teller = 4; } // pulsBusy is de variable die aangeeft dat het interne draaischijf locking relais geactiveerd is // pulsTimer is de teller die meeloopt met de duur van de relais puls // pulsDuur geeft aan hoelang de puls default duurt // teller is het aantal afslagen dat de scijf moet draaien if (teller > 0) { if (!pulsBusy) { pulsTimer = millis() + pulsDuur; pulsTimer2 = pulsTimer + 100; pulsBusy = true; digitalWrite(lock, aan); delay(10); // probeersel } else { if ( millis() > pulsTimer) { digitalWrite(lock, uit); //Serial.print (digitalRead(cSense)); if (digitalRead(cSense)) { //cSense is hoog : er loopt geen stroom door de motor Hier moet je mischien nog iets van een debounce in zetten teller = teller - 1; pulsBusy = false; //Serial.println(); //Serial.println(teller); } } } } if (!digitalRead(cSense)) { digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); }}//--(end main loop )---void clockwise(bool on){ if (on) { digitalWrite(richting1, aan);// set the Relay ON digitalWrite(richting2, aan);// set the Relay ON } else { digitalWrite(richting1, uit); digitalWrite(richting2, uit); } delay(10);}//*********( THE END )***********