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
Also ich möchte jetzt mit in der if anweisung ein pointer abfragen, der auf die elemente im array zeigt.
Zeig doch mal ein lauffähiges Minimalbeispiel von deinem Code. Aus diesen Schnippseln kann man ja kaum die verwendete Sprache erkennen... Vielleicht beschreibst du auch etwas genauer was du genau machen willst. Gruß Dennis
[c]
int arr[96];
int const * const end = &arr[95];
for(const int * ptr = &arr[1]; ptr < end; ptr += 3) {
if(*ptr >= 11) {
/* ... */
} else {
/* ... */
}
}
[c]
?
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.
Man kann das mit einem Pointer machen, aber man braucht keinen.
1 | unsigned int i; |
2 | |
3 | for (i=1; i<=92; i+=3) |
4 | {
|
5 | if(Array[i] >= 11) |
6 | {_LATB1 = OFF;} |
7 | else
|
8 | {_LATB1 = ON;} |
9 | }
|
Setzt natürlich voraus, dass das Array zuvor mit sinnvollen Werten befüllt wurde.
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.
Sebastian V. O. schrieb: > Der TO sollte vielleicht nochmal sagen was er von seinem Programm > erwartet. Nein, das darf man auf gar keinen Fall machen! Dann fällt ja das Herumraten darüber weg, was eigentlich getan werden soll. Wir brauchen doch eine Herausforderung hier. ;-)
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 :)
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.
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.
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.
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.
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...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
