From 773b19ee281b6ee6946771dca03c08d93be8bcdd Mon Sep 17 00:00:00 2001 From: Agis Zisimatos Date: Fri, 18 Apr 2014 20:59:13 +0300 Subject: [PATCH] arduino code --- arduino/SatNOGS.ino | 60 +++++++++++++++++++++++++++++++++++++++ arduino/Serial.ino | 50 +++++++++++++++++++++++++++++++++ arduino/Stepper.ino | 68 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 arduino/SatNOGS.ino create mode 100644 arduino/Serial.ino create mode 100644 arduino/Stepper.ino diff --git a/arduino/SatNOGS.ino b/arduino/SatNOGS.ino new file mode 100644 index 0000000..1df4c03 --- /dev/null +++ b/arduino/SatNOGS.ino @@ -0,0 +1,60 @@ +#include +#include +#include + +#define DIR_AZ 8 +#define STEP_AZ 9 +#define EN_AZ 7 + +#define DIR_EL 10 +#define STEP_EL 11 +#define EN_EL 12 + +#define SPD 200 //step per degree +#define T_DEALY 10000 +#define T_STEPPER 1 + +int stepPosAz = 0; +int stepAz = 0; +int stepPosEl = 0; +int stepEl = 0; +long t1 = 0; + + +void setup() +{ + pinMode(DIR_AZ, OUTPUT); + pinMode(STEP_AZ, OUTPUT); + pinMode(EN_AZ, OUTPUT); + digitalWrite(EN_AZ, LOW); + digitalWrite(DIR_AZ, LOW); + + pinMode(DIR_EL, OUTPUT); + pinMode(STEP_EL, OUTPUT); + pinMode(EN_EL, OUTPUT); + digitalWrite(EN_EL, LOW); + digitalWrite(DIR_EL, LOW); + + Serial.begin(19200); +} + +void loop() +{ + /*Time Check*/ + if (t1 == 0) + t1 = millis(); + if (stepAz == 0 && stepEl == 0 && millis()-t1 > T_DEALY) + { + digitalWrite(EN_AZ, HIGH); + digitalWrite(EN_EL, HIGH); + } + else + { + digitalWrite(EN_AZ, LOW); + digitalWrite(EN_EL, LOW); + } + + cmd_proc(); + + stepper_move(); +} diff --git a/arduino/Serial.ino b/arduino/Serial.ino new file mode 100644 index 0000000..dd49521 --- /dev/null +++ b/arduino/Serial.ino @@ -0,0 +1,50 @@ +void cmd_proc() +{ + /*Serial*/ + static char buffer[256]; + char incomingByte; + static int counter=0; + char data[100]; + + /*Read from serial*/ + while (Serial.available() > 0) + { + incomingByte = Serial.read(); + /*new data*/ + if (incomingByte == '\n' || incomingByte == ' ' || incomingByte == '\r') + { + buffer[counter]=0; + if (buffer[0] == 'A' && buffer[1] == 'Z') + { + strncpy(data, buffer+2, 100); + double cmdAz = atof(data); + + stepAz = path(cmdAz); + } + else if (buffer[0] == 'E' && buffer[1] == 'L') + { + strncpy(data, buffer+2, 10); + double cmdEl = atof(data); + stepEl = deg2step(cmdEl)-stepPosEl; + } + else if (buffer[0] == 'S' && buffer[1] == 'A') + { + stepAz = 0; + } + else if (buffer[0] == 'S' && buffer[1] == 'E') + { + stepEl = 0; + } + + counter = 0; + + //Reset time + t1 = 0; + } + /*Fill the buffer with incoming data*/ + else { + buffer[counter] = incomingByte; + counter++; + } + } +} diff --git a/arduino/Stepper.ino b/arduino/Stepper.ino new file mode 100644 index 0000000..989cba9 --- /dev/null +++ b/arduino/Stepper.ino @@ -0,0 +1,68 @@ +void stepper_move() +{ + if(stepAz>0) + { + digitalWrite(DIR_AZ, HIGH); + digitalWrite(STEP_AZ, HIGH); + stepPosAz++; + stepAz--; + } + else if(stepAz<0) + { + digitalWrite(DIR_AZ, LOW); + digitalWrite(STEP_AZ, HIGH); + stepPosAz--; + stepAz++; + } + + if(stepEl>0) + { + digitalWrite(DIR_EL, LOW); + digitalWrite(STEP_EL, HIGH); + stepPosEl++; + stepEl--; + } + else if(stepEl<0) + { + digitalWrite(DIR_EL, HIGH); + digitalWrite(STEP_EL, HIGH); + stepPosEl--; + stepEl++; + } + + delay(T_STEPPER); + digitalWrite(STEP_AZ, LOW); + digitalWrite(STEP_EL, LOW); + delay(T_STEPPER); + +} + +int path( double cmdAz) +{ + int sign = 0, stepTemp; + double PosAz = cmdAz - step2deg(stepPosAz); + double distAz = abs(PosAz); + + if (distAz < 180) + stepAz = deg2step(PosAz); + else + { + if (PosAz > 0) + sign = -1; + else + sign = 1; + stepTemp = deg2step((360-PosAz)*sign); + } + + return stepTemp; +} + +int deg2step(double deg) +{ + return(60*SPD*deg/360); +} + +float step2deg(int Step) +{ + return(360*Step/(SPD*60)); +} -- GitLab