schommeling tussen 2 waarden( pic basic)

Beste,
ik ben bezig met het maken van een waterniveau meter met ultrasoon.Dit werkt goed,juist als het tussen 2 bepaalde waarden komt begint hij te schommelen.bv van 40 naar 41 of omgekeerd -100% naar 90% of 90% naar 100%enz.Hoe zou ik dit kunnen oplossen dat het bv op 90 of 100 blijft staan?Ik geraak er niet uit! Ik had al gedacht om met iets te werken van bv +3 of -3 bij de waarde maar het lukt mij niet.Graag een voorbeeld code a.u.b alvast bedankt!
pic basic code:
 
[ If RANGE <= 40 Then
 PULS = 0
 
 Print At 1,2," WATERTANK 100% "
 
 EndIf
 If RANGE > 40 And RANGE <= 51 Then 
  PULS = 0
 
 Print At 1,2," WATERTANK 90% "
 
 
    End If
enz... ]
Waar gaat het over? A/D conversie?
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Shiptronic

Golden Member

gemiddelden nemen over een langere tijd, hoogste en laagste waarde weggooien.

rond de 40 heb je nu een probleem 39,999999= 90% en 40,000000001= 100% .

Maar waarom een range? laat de software lekker een xxx% percentage uitrekenen, en ververs die op het scherm om 1 a 2 seconden(of langer), voor een rustige uit lezing

[Bericht gewijzigd door Shiptronic op 5 december 2018 00:19:57 (36%)]

Wie de vraag stelt, zal met het antwoord moeten leren leven.
pic basic code:
 
[PulsOut TRIGGER,10,High
 RANGE=PulsIn ECHO,1
 RANGE =(RANGE*2) /58
]
zo lees ik de HC-SR04 uit.
Als de waarde erg afwijkt, dan weggooien. Anders middelen.
Bijv. oude waarde * 4, nieuwe erbij optellen, en door 5 delen...

(of laatste 5 waardes bewaren en dan door 5 delen)

[Bericht gewijzigd door Arco op 5 december 2018 01:24:56 (18%)]

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Lambiek

Special Member

Je zou het zo kunnen doen. Als nu de waarde tussen de 41 en 50 zit is je puls 0, of wat je daar ook wil doen.

pic basic code:
 
If RANCE > 40 Then
 If RANCE < 51 Then
  PULS = 0
 EndIf 
EndIf
 
Als je haar maar goed zit, GROETEN LAMBIEK.
Bedankt al voor de snelle reacties!De vb code van lambiek heb ik getest maar hetzelfde resultaat,tussen de overgang van bv de waarde 40 en 41 blijft het schommelen.
Lambiek

Special Member

Dat licht dan aan je meet principe, tussen de 41 en 50 mag er niets gebeuren. Dus waarschijnlijk is je meting niet stabiel.
Als je haar maar goed zit, GROETEN LAMBIEK.
Daarom moet je ook middelen. Of waardes + of -1 gewoon negeren.
Fluctuaties houdt je altijd. Als de waarde precies op de rand ligt, blijf je altijd wisselende waardes houden.
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Het is makkelijk op te lossen door je oude meting te bewaren en deze te vergelijken met je nieuwe meting. Als het verschil kleiner is dan 3 doe je niets. Hierdoor voorkom je schommelingen.

Psuedo code

new_range = doe_meting()
if(abs(new_range - old_range) < 3) then
break / return

Eenvoudiger wordt het denk ik niet :).
Voor jullie kan dat eenvoudig zijn maar ik moet nog veel leren.Ik behelp mij met de cursus van frits en dat lukt me soms heel aardig maar hier kwam ik niet uit.Als ik de code van De TijdTikt wil toepassen moet ik dan een lus maken met repeat until of een subroutine met als naam bv:
pic basic code:
 
[doe_meting:
 PulsOut TRIGGER,10,High
 RANGE=PulsIn ECHO,1
 RANGE =(RANGE*2) /58
]
en dan dit erbij of in het hoofdprogramma 
new_range = doe_meting()
if(abs(new_range - old_range) < 3) then
break / return
[code=picbasic][
WHILE 1 = 1 
If RANGE <= 40 Then
 PULS = 0
 
 Print At 1,2," WATERTANK 100% "
 
 EndIf
 If RANGE > 40 And RANGE <= 51 Then 
  PULS = 0
 
 Print At 1,2," WATERTANK 90% "
 
 
    End If
enz ...
 
]