Bascom: Größte Zahl in einem Array finden

Gast #560593
Lesenswert?
• ▲
▼
Einige Programmzeilen lösen das Problem.
Nehmen wir an, dass die ADC-Werte zwischen 0 und 1024 schwanken (10Bit) 
und Du den aktuellen Wert in der Variablen wert ablegst.

mini=1024: maxi=0   'min
DO
  wert=adc(...)   'je nach Aufbau
  IF wert>maxi THEN maxi=wert
  IF wert<mini THEN mini=wert
LOOP ...

Wenn Du die Werte in einem Array abgelegt hast, ähnliches Vorgehen: 
Diesmal statt DO..LOOP eine FOR..NEXT Konstrktion und statt wert die 
Array-Variable nehmen, z.B. messwert(i).
Gast #560670
Lesenswert?
• ▲
▼
@Netbird (Gast):

Dein Kot ist ziemlich sinnfrei:

> Nehmen wir an, dass die ADC-Werte zwischen 0 und 1024 schwanken
1
mini=1024: maxi=0   'min
2
DO
3
  wert=adc(...)   'je nach Aufbau
4
  IF wert>maxi THEN maxi=wert
5
  IF wert<mini THEN mini=wert
6
LOOP ...

Die Variablen 'mini' und 'maxi' verden NIE verändert
und stehen IMMER auf der Anfangsinitialisierung.

Ist es denn wirklich zuviel verlangt nochmals VOR dem posten
das eigene Posting auf SINNHAFTIGKEIT zu überprüfen?

Kopfschüttelnd ...
Gast #560675
Lesenswert?
• ▲
▼
jetzt muss ich aber mal den Kopf schütteln über den Kopfschüttler - ich 
kann da keinen prinzipiellen Fehler sehen, mal abgesehen von 
Basic-Syntax, das kann ich nicht beurteilen.
Sinngemäss genauso mach ich es auch, allerdings füttere ich min und max 
direkt  nach jeder Wandlung.

struct {
uint16 A2D_Buffer[4096];
uint16 Min;
uint16 Max;} SampleBuffer[2];

So kann ich direkt nach Abschluss des samplings min und max beurteilen, 
spart insgesamt Zeit.
#560680
Lesenswert?
• ▲
▼
Kopfschüttler wrote:
> @Netbird (Gast):
>
> Dein Kot ist ziemlich sinnfrei:
>
>> Nehmen wir an, dass die ADC-Werte zwischen 0 und 1024 schwanken
>
>
1
> mini=1024: maxi=0   'min
2
> DO
3
>   wert=adc(...)   'je nach Aufbau
4
>   IF wert>maxi THEN maxi=wert
5
>   IF wert<mini THEN mini=wert
6
> LOOP ...
7
>
>
> Die Variablen 'mini' und 'maxi' verden NIE verändert
> und stehen IMMER auf der Anfangsinitialisierung.
>
> Ist es denn wirklich zuviel verlangt nochmals VOR dem posten
> das eigene Posting auf SINNHAFTIGKEIT zu überprüfen?

Ich kenn das:
Manchmal bellt man einfach den falschen Baum an, wie die Amerikaner
so schön sagen. Insbesonders wenn man dem Originalautor mangelnde
Sorgfalt vorwirft, wirkt das besonders lustig, wenn der Original-
autor absolut recht hat und der Antwortende sich verhaut hat.

In diesem Sinne: Kehre vor deiner eigenen Tür.
#560720
Lesenswert?
• ▲
▼
Er bezieht sich wahrschinlich auf die Zeile:

1
wert=adc(...)  'je nach Aufbau

die in der DO LOOP Schleife ohne Indexänderung immer gleich bleibt. 
Gemeint war mit dieser Zeile aber bestimmt nur "hier kommt jetzt der 
neue Wert in die Variable 'wert'" - darum steht hier ja auch "je nach 
Aufbau"...

Man darf nicht immer alles so wörtlich nehmen...

Außerdem sollte man schon - wenn man jemanden Fehler vorwirft - auch 
darauf hinweise wo derjenige zu suchen hat. Wäre konstruktiver...
Gast #560747
Lesenswert?
• ▲
▼
>Er bezieht sich wahrschinlich auf die Zeile:

>wert=adc(...)  'je nach Aufbau

Mit der darauffolgenden Abfragenreihe werden auf jeden Fall Minima und 
Maxima gefunden. Danach kann man "wert" auch noch in ein Array 
schreiben...
Sofern "adc(...)" den "aktuellen" ADC-Wert zurückliefert funktioniert 
der Spaß auch ohne explizites Array.
Das Problem ist wohl eher, dass "mini" irgendwann gleich 0 und "maxi" 
irgendwann gleich 1023 ist. Das wären aber Werte, die man vorhersagen 
könnte...
Gast #560850
Lesenswert?
• ▲
▼
Hallo,

danke an alle, die mitdenken können/wollen!

Meine Zeilen sollen dem Frager zeigen, wie er vorgehen kann. Ob/ wann/ 
wie er seine Schleife abbricht, muss er wissen und in sein Programm 
einbauen. Dass er ggf. mini, maxi neu initialisieren muss, wenn's weiter 
gehen soll, ebenso.

Der einzige "Fehler", den ich gemacht habe -SHAME ON ME- ist, dass der 
ADC-Wert in Bascom gelesen wird mit GETADC(..), im Zweifel nachsehen in 
der Hilfe!!!

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