Pointer auf Array zegen

Gast #3867827
Lesenswert?

Hallo, brauche dringend eure hilfe...

ich habe ein Array mit 96 Elementen, und möchte ab den zweiten Wert 
jedes dritte abfragen. jedoch weiß ich nicht wie. bin neuling also bitte 
ein bisschen gnade.

habe es bis jetzt so gemacht:
int Array[96]

"Jetzt werden die Werte im Array gespeichert"

Endlosschleife:

if(Array[ 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 
49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, 85, 88, 91, 94] >= 11)
{_LATB1 = OFF;}
else
{_LATB1 = ON;}
.
.
.
aber das klappt nicht.

hab n anhang dabei
Angehängte Dateien:
#3867841
Lesenswert?

So funktioniert das auch nicht. Du musst von Hand über alle Elemente im 
Array iterieren. So in etwa:
1
int check = 0;
2
for(int i = 1; i < 96; i += 3)
3
{
4
  if(Array[i] >= 1)
5
  {
6
    check = 1;
7
    break;
8
  }
9
}
10
if(check)
11
  _LATB1 = OFF;
12
else
13
  _LATB1 = ON;

Code nicht getestet daher keine Garantie. Falls du an solchen Aufgaben 
schon scheiterst solltest du dir nochmal ein paar C-Grundlagen 
aneigenen.
#3867864
Lesenswert?

Der TO sollte vielleicht nochmal sagen was er von seinem Programm 
erwartet. Wann soll der _LATB1 = OFF; Teil ausgeführt werden?

Wenn mindestens ein Element größer gleich 11 ist?
Wenn alle Elemente größer gleich 11 sind?
Wenn die Summe größer gleich 11 ist?
usw...

Edit: Hat sich noch ein Tippfehler in mein Codebeispiel eingeschlichen. 
Sollte natürlich if(Array[i] >= 11) heißen.
Gast #3867895
Lesenswert?

Mark Brandis schrieb:
> Man kann das mit einem Pointer machen, aber man braucht keinen.
>
> unsigned int i;
>
> for (i=1; i<=92; i+=3)
> {
>   if(Array[i] >= 11)
>     {_LATB1 = OFF;}
>   else
>     {_LATB1 = ON;}
> }
>
> Setzt natürlich voraus, dass das Array zuvor mit sinnvollen Werten
> befüllt wurde.

jawoll hat geklappt, danke dir :)
(Firma: Vescomp) #3867909
Lesenswert?

Jürgen W schrieb:
>> Setzt natürlich voraus, dass das Array zuvor mit sinnvollen Werten
>> befüllt wurde.
>
> jawoll hat geklappt, danke dir :)

 Und der Sinn von ganzen Unsinn ist ?
 Nur der Wert von Array[95] wird ausgewertet. Warum fragst du dann nicht
 direkt Array[95] ab, wozu das Ganze überhaupt ?
 Ein sehr guter Compiler mit Optimierung würde da wahrscheinlich direkt
 Array[95] übernehmen.
 LOL.
#3867932
Lesenswert?

Naja so schlimm ist es jetzt nicht. Kommt eben drauf an was _LATB1 
überhaupt sein soll. Wenn das ein Output Pin ist wo er eine LED 
angeschlossen hat dann wird er kaum eine Chance haben die Änderung zu 
beobachten und sieht dann nur den Wert der vom letzten Array Element 
stammt. Könnte aber auch sonstwas sein.
(Firma: Vescomp) #3867966
Lesenswert?

Sebastian V. O. schrieb:
> Naja so schlimm ist es jetzt nicht. Kommt eben drauf an was _LATB1
> überhaupt sein soll. Wenn das ein Output Pin ist wo er eine LED
> angeschlossen hat dann wird er kaum eine Chance haben die Änderung zu
> beobachten und sieht dann nur den Wert der vom letzten Array Element
> stammt. Könnte aber auch sonstwas sein.

 Ja.
 Die Bemerkung trifft natürlich nicht auf deinen Code, aber er hat ja
 den Code von Mark Brandis genommen.
 Da gibt es kein break, die Schleife wird immer voll durchgelaufen.
Gast #3867979
Lesenswert?

Ja, LATB1 ist eine LED.
Und im Array werden werden die Werte des ADCs abgespeichert.
Ich habe drei Spannungseingänge im ADC und AN1 (array [1, 4, 7...]) soll 
ausgewertet werden, immer wenn die Spannung x überschritten wird soll 
die LED angehen.
(Firma: Vescomp) #3868096
Lesenswert?

Jürgen W schrieb:
> Ich habe drei Spannungseingänge im ADC und AN1 (array [1, 4, 7...]) soll
> ausgewertet werden, immer wenn die Spannung x überschritten wird soll
> die LED angehen.

 Dann nimm doch den Code vom Sebastian, nur for-schleife so ändern:
1
for(uint8_t i = 1; i <= 91; i += 3)
 und gut ist es.


 oder:
1
  _LATB1 = ON;
2

3
  for(uint8_t i = 1; i <= 91; i += 3)
4
  {
5
    if(Array[i] >= 11)
6
    {
7
      _LATB1 = OFF;
8
      break;
9
    }
10
  }

 Ich nehme an, dass du mit Log.0 LED einschaltest, trotzdem sollten
 die Bezeichnungen fur ON und OFF logisch sein...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren