Array og index (Læst 3506x)

Offline gsborn

  • Spændingsdeler
  • ****
  • Indlæg: 50
  • Antal brugbare Indlæg: 7
  • nybegynder + Gør tingene for sjov, interesse, leg
    • Vis profil
Array og index
« Dato: November 13, 2015, 09:43:42 »
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
Jeg har følgend fil som jeg ser som en multi array :
Kode:
/**
 * 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:
Kode:
// 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  :
Kode:
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
nybegynder +
Gør tingene for sjov, interesse, leg
Mine svar er kun ud fra min egen videnstand som begynder og google.

 

Offline gerd

  • Administrator
  • µProcessoren
  • *****
  • Indlæg: 915
  • Antal brugbare Indlæg: 97
    • Vis profil
    • Hjemmeside med nogle af mine projekter
Sv: Array og index
« Svar #1 Dato: November 13, 2015, 20:07:15 »
Hej Gregor,
for eksempel med en "SimpleStar" array:
Kode:
// 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:

Kode:
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

 

Offline gsborn

  • Spændingsdeler
  • ****
  • Indlæg: 50
  • Antal brugbare Indlæg: 7
  • nybegynder + Gør tingene for sjov, interesse, leg
    • Vis profil
Sv: Array og index
« Svar #2 Dato: November 16, 2015, 19:09:55 »
Tak Gerd for eksempelt, vil prøve det de kommende dage.

Med venlig hilsen
Gregor
nybegynder +
Gør tingene for sjov, interesse, leg
Mine svar er kun ud fra min egen videnstand som begynder og google.