Hej Jer,
Hvordan kan man med en button vælge forskellig indexnummer i en multi array ?
Jeg ved lidt her fra min egen indlæg : http://elektronik-forum.dk/index.php?topic=1148.0 (http://elektronik-forum.dk/index.php?topic=1148.0)
Jeg har følgend fil som jeg ser som en multi array :
/**
* AlignmentStars.h
* A bunch of stars that can be used during alignment.
*/
#include <avr/pgmspace.h>
#include "StellarduinoUtils.h"
const AlignmentStar alignmentStars[] = {
{"Sirius", 1.76779309390854, -0.291751177018097, -1.46},
{"Canopus", 1.67530518796327, -0.919715793748845, -0.72},
{"Arcturus", 3.73352834160889, 0.334797783763812, -0.04},
{"Rigel K", 3.83797175293031, -1.06177589858756, -0.01}}
Ud af disse " AlignmentStars " vil jeg så med en button vælge den Star som er best synligt.
Der for har jeg dette intil nu, hvor tallet i [] er den faste index nummer fra filen:
// alignment stars
// Arcturus
SimpleStar alignmentStar1 =
{
0.0,
alignmentStars[2].ra,
alignmentStars[2].dec,
0.0,
0.0,
alignmentStars[2].name,
alignmentStars[2].vmag
};
// Rigel K
SimpleStar alignmentStar2 =
{
0.0,
alignmentStars[3].ra,
alignmentStars[3].dec,
0.0,
0.0,
alignmentStars[3].name,
alignmentStars[3].vmag
};
Dette " SimpleStar " skal jeg bruge her :
void doAlignment() {
// set initial time - actual time not necessary, just the difference!
initialTime = (float)millis() / 86400000.0f * 2.0 * M_PI;
// ask user to point scope at first star
lcd.print("Point: ");
lcd.print(alignmentStar1.name);
lcd.setCursor(0,1);
lcd.print("Then press OK");
// wait for button press
while(digitalRead(OK_BTN) == LOW);
alignmentStar1.time = (float)millis() / 86400000.0f * 2.0 * M_PI;
alignmentStar1.alt = altMultiplier * altEncoder.read();
alignmentStar1.az = azMultiplier * azEncoder.read();
lcd.clear();
lcd.print("Alt set: ");
lcd.print(alignmentStar1.alt * rad2deg, 3);
lcd.setCursor(0,1);
lcd.print("Az set: ");
lcd.print(alignmentStar1.az * rad2deg, 3);
delay(2000);
// ask user to point scope at second star
lcd.clear();
lcd.print("Point: ");
lcd.print(alignmentStar2.name);
lcd.setCursor(0,1);
lcd.print("Then press OK");
// wait for button press
while(digitalRead(OK_BTN) == LOW);
alignmentStar2.time = (float)millis() / 86400000.0f * 2.0 * M_PI;
alignmentStar2.az = azMultiplier * azEncoder.read();
alignmentStar2.alt = altMultiplier * altEncoder.read();
lcd.clear();
lcd.print("Alt set: ");
lcd.print(alignmentStar2.alt * rad2deg, 3);
lcd.setCursor(0,1);
lcd.print("Az set: ");
lcd.print(alignmentStar2.az * rad2deg, 3);
delay(2000);
}
I min teori skal jeg have en for- loops og så lidt mere :) så jeg kan få skiftet den nu faste index nummer ud med " i " eller lignde. Men hvordan ?
Jeg har ledt på nettet her er der for de meste kun almindelige arrays.
" AlignmentStar " og " SimpleStar " har hver deres " struct " fil, er vedhæftet.
Programmet er ikke fra mig men fra Casey Fulton
Hej Gregor,
for eksempel med en "SimpleStar" array:
// alignment stars
SimpleStar simpleStars[] = {
{ 0.0, alignmentStars[2].ra, alignmentStars[2].dec, 0.0, 0.0, alignmentStars[2].name, alignmentStars[2].vmag }, // Arcturus
{ 0.0, alignmentStars[3].ra, alignmentStars[3].dec, 0.0, 0.0, alignmentStars[3].name, alignmentStars[3].vmag } // Rigel K
};
og sener kan du skrive:
void doAlignment() {
// set initial time - actual time not necessary, just the difference!
initialTime = (float)millis() / 86400000.0f * 2.0 * M_PI;
// for loop for all 2 stars ( 0 .. 1)
for (int i = 0; i< 2; i++) {
// ask user to point scope at star n
lcd.clear();
lcd.print("Point: ");
lcd.print(simpleStars[i].name);
lcd.setCursor(0,1);
lcd.print("Then press OK");
// wait for button press
while(digitalRead(OK_BTN) == LOW);
simpleStars[i].time = (float)millis() / 86400000.0f * 2.0 * M_PI;
simpleStars[i].alt = altMultiplier * altEncoder.read();
simpleStars[i].az = azMultiplier * azEncoder.read();
lcd.clear();
lcd.print("Alt set: ");
lcd.print(simpleStars[i].alt * rad2deg, 3);
lcd.setCursor(0,1);
lcd.print("Az set: ");
lcd.print(simpleStars[i].az * rad2deg, 3);
delay(2000);
}
}
gerd