Browse Source

added servo for azimuth positioning, needs better mapping between angle and values

master
Luis Rodil-Fernandez 2 years ago
parent
commit
ee3a0108d9
  1. 51
      src/main.cpp

51
src/main.cpp

@ -21,12 +21,13 @@
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Servo servo; Servo servo;
int servoPin = 13;
int servoPin = 16;
SoftwareSerial altserial(14, 12); // rx, tx SoftwareSerial altserial(14, 12); // rx, tx
Adafruit_GPS GPS(&altserial); Adafruit_GPS GPS(&altserial);
uint32_t tstamp = millis(); uint32_t tstamp = millis();
float az = 0.0;
typedef struct { typedef struct {
time_t epoch; time_t epoch;
@ -79,7 +80,7 @@ void init_servo() {
// /////////////////////////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////////////////////////////
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
// init_servo();
init_servo();
init_display(); init_display();
init_gps(); init_gps();
wmm_init(); wmm_init();
@ -165,19 +166,32 @@ void debug_solar() {
// Serial.print("Antenna status: "); Serial.println((int)GPS.antenna); // Serial.print("Antenna status: "); Serial.println((int)GPS.antenna);
} }
// void servo_sweep() {
// int pos;
// value 80 mirror is pointing up
// 180 is pointing forward at 90 degrees
void hg_set_zenith(float z) {
Serial.print("moving to zenith -> ");
Serial.print( z );
Serial.println();
int a = (int)ceilf(180.0 - z);
servo.write( a );
delay(20);
}
// for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// // in steps of 1 degree
// servo.write(pos); // tell servo to go to position in variable 'pos'
// delay(15); // waits 15ms for the servo to reach the position
// }
// for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
// servo.write(pos); // tell servo to go to position in variable 'pos'
// delay(15); // waits 15ms for the servo to reach the position
// }
// }
/*
void servo_sweep() {
int pos;
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
servo.write(pos); // tell servo to go to position in variable 'pos'
delay(10); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
servo.write(pos); // tell servo to go to position in variable 'pos'
delay(10); // waits 15ms for the servo to reach the position
}
}
*/
float compute_magnetic_declination() { float compute_magnetic_declination() {
float wmmtime = wmm_get_date(GPS.year, GPS.month, GPS.day); float wmmtime = wmm_get_date(GPS.year, GPS.month, GPS.day);
@ -226,7 +240,7 @@ void gps_pump() {
void loop() { void loop() {
gps_pump(); gps_pump();
// // approximately every 2 seconds or so, print out the current stats // // approximately every 2 seconds or so, print out the current stats
if (millis() - tstamp > 2000) { if (millis() - tstamp > 2000) {
tstamp = millis(); // reset the timer tstamp = millis(); // reset the timer
@ -241,10 +255,17 @@ void loop() {
// // servo.write( ceil(sun.elevation) ); // // servo.write( ceil(sun.elevation) );
// // delay(20); // // delay(20);
// move mirror to zenith position
//hg_set_zenith(sun.zenith);
hg_set_zenith(az);
az += 1.0;
if(az > 180) { az = .0; }
// debug_solar(); // debug_solar();
ui_sunpos(); ui_sunpos();
} else { } else {
ui_nogpsfix(); ui_nogpsfix();
} }
} }
} // loop() } // loop()
Loading…
Cancel
Save