From 5056882b3c2e2d3810003cf65480e3bf0e9aa308 Mon Sep 17 00:00:00 2001 From: Pierros Papadeas Date: Sat, 10 May 2014 19:40:06 +0300 Subject: [PATCH] New code for v2 - WIP --- arduino/SatNOGS-v2/SatNOGS.ino | 60 ++++++++++++++++++++++++++++ arduino/SatNOGS-v2/Serial.ino | 51 ++++++++++++++++++++++++ arduino/SatNOGS-v2/Stepper.ino | 73 ++++++++++++++++++++++++++++++++++ 3 files changed, 184 insertions(+) create mode 100644 arduino/SatNOGS-v2/SatNOGS.ino create mode 100644 arduino/SatNOGS-v2/Serial.ino create mode 100644 arduino/SatNOGS-v2/Stepper.ino diff --git a/arduino/SatNOGS-v2/SatNOGS.ino b/arduino/SatNOGS-v2/SatNOGS.ino new file mode 100644 index 0000000..1df4c03 --- /dev/null +++ b/arduino/SatNOGS-v2/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/SatNOGS-v2/Serial.ino b/arduino/SatNOGS-v2/Serial.ino new file mode 100644 index 0000000..e003558 --- /dev/null +++ b/arduino/SatNOGS-v2/Serial.ino @@ -0,0 +1,51 @@ +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/SatNOGS-v2/Stepper.ino b/arduino/SatNOGS-v2/Stepper.ino new file mode 100644 index 0000000..c37875c --- /dev/null +++ b/arduino/SatNOGS-v2/Stepper.ino @@ -0,0 +1,73 @@ +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 (stepPosAz > SPD*60) + stepPosAz = 0; + else if (stepPosAz < 0) + stepPosAz = SPD*60; + + 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); + Serial.println(PosAz); + if (distAz < 180) + stepTemp = deg2step(PosAz); + else + { + if (PosAz > 0) + sign = -1; + else + sign = 1; + stepTemp = deg2step((360-PosAz)*sign); + } + + Serial.println(stepAz); + return stepTemp; +} + +int deg2step(double deg) +{ + return(60*SPD*deg/360); +} + +float step2deg(int Step) +{ + return(360*Step/(SPD*60)); +}