// Author: Andrew Hutcheon // Email: andy@hutchyweb.co.uk // Web: www.hutchyweb.co.uk/astro // Description: This code is for my home made focuser v2 see my BLOG for more info // Date: 25/06/2014 // Define variables int nBig = 25; // Size of a big step int fPin = 8; // L293D Chip Forward pin int rPin = 7; // L293D Chip Reverse pin int fBut = 5; // 1 step forward button pin int ffBut = 3; // Big step forward button int rBut = 4; // 1 step backward button pin int rrBut = 2; // Big step backward button int prkBut = 11; // Park button int fifBut = 12; // 50% button int maxBut = 10; // Max out button int hBut = 9; // Halt button int prk = 0; // Variable for park int mx = 0; // Variable for steps to Max int fif = 0; // Variable for steps 50% int hlt = 0; // Variable for halt int cPos = 0; // Current position int sSize = 10; // Step sizes int pStep = 0; // Pause Between Steps int maxPos = 2250; // Set max position int minPos = 0; // Set minimum position int f = 0; // Variable for step forward int ff = 0; // Variable for step fast forward (big step) int r = 0; // Variable for step backward int rr = 0; // Variable for step fast backward (big step) int cmd = 0; // Serial command int mCmd; // Serial move int DoMove; // Move triger int iSteps; // Move steps int i = 0; // Counter int mi = 0; // Move counter String nPos; // Position number String sEnd = "#"; // Serial End String FIN; // Final Serial Send String inString = ""; // string to hold serial input void setup() { // Setup Pins pinMode(fBut, INPUT); pinMode(ffBut, INPUT); pinMode(rBut, INPUT); pinMode(rrBut, INPUT); pinMode(fPin, OUTPUT); pinMode(rPin, OUTPUT); // Setup Derial Serial.begin(9600); Serial.flush(); Serial.setTimeout(100); // Reset Pins digitalWrite(fPin, LOW); digitalWrite(rPin, LOW); } void loop() { // Read the pushbutton input pin: if (DoMove == 0) { f = digitalRead(fBut); ff = digitalRead(ffBut); r = digitalRead(rBut); rr = digitalRead(rrBut); prk = digitalRead(prkBut); fif = digitalRead(fifBut); mx = digitalRead(maxBut); if (f == 1) { DoMove = 1; iSteps = 1; delay(300); //Serial.println(f); } if (ff == 1) { DoMove = 1; iSteps = nBig; //Serial.println(ff); } if (r == 1) { DoMove = 1; iSteps = -1; delay(300); //Serial.println(r); } if (rr == 1) { DoMove = 1; iSteps = -nBig; //Serial.println(rr); } if (prk == 1) { DoMove = 1; iSteps = 0 - cPos; //Serial.println(prk); } if (fif == 1) { DoMove = 1; iSteps = (maxPos / 2) - cPos; //Serial.println(fif); } if (mx == 1) { DoMove = 1; //iSteps = maxPos - cPos; iSteps = ((maxPos / 100) * 75) - cPos; //Serial.println(mx); } } // Read serial input if (Serial.available() >0) { //cmd = Serial.parseInt(); inString = ""; inString = Serial.readStringUntil('#'); cmd = inString.toInt(); if (cmd == 9999) { // This is the GET position call FIN = cPos + sEnd; Serial.println(FIN); //Serial.println(cPos); cmd = 0; } else if (cmd == 8888) { // Halt DoMove = 0; iSteps = 0; mi = 0; cmd = 0; } else if (cmd == 7777) { // Return FIN = maxPos + sEnd; Serial.println(FIN); cmd = 0; } else if ((cmd >0) && (DoMove == 0)){ // Move the focuser mCmd = cmd - cPos; DoMove = 1; iSteps = mCmd; cmd = 0; } } //New Move Focuser if (DoMove == 1) { //do stepper motor stuff hlt = digitalRead(hBut); if (hlt == 1) { DoMove = 0; iSteps = 0; mi = 0; //FIN = cPos + sEnd; //Serial.println(FIN); } if (iSteps >= 0) { if ((mi != iSteps) && (cPos != maxPos)) { mi = mi + 1; cPos = cPos + 1; digitalWrite(fPin, HIGH); // This LOW to HIGH change is what creates the delay(sSize); // This delay time between steps digitalWrite(fPin, LOW); // "Rising Edge" so the easydriver knows to when to step. delay(pStep); // This delay time between steps } else { DoMove = 0; mi = 0; //FIN = cPos + sEnd; //Serial.println(FIN); } } else { if ((mi != iSteps) && (cPos != minPos)) { mi = mi - 1; cPos = cPos - 1; digitalWrite(rPin, HIGH); // This LOW to HIGH change is what creates the delay(sSize); // This delay time between steps digitalWrite(rPin, LOW); // "Rising Edge" so the easydriver knows to when to step. delay(pStep); // This delay time between steps } else { DoMove = 0; mi = 0; //FIN = cPos + sEnd; //Serial.println(FIN); } } } }