Dette er et eksempel på kode for å lage et glidende gjennomsnitt av måleverdier. Dette kan være nyttig hvis du har sensorer som ikke er veldig nøyaktig, hvis du skal bruke verdiene til å styre noe annet som du ikke vil skal ha så "brå" bevegelser, eller hvis du bare vil ha ekstra fine grafer.
Eksempelet bruker ultralydsensoren HC-SR04, som vi har beskrevet på en annen side. Biblioteket som er brukt heter "Ultrasonic Simple", skrevet av Erick Simões. Har fjernet de fleste kommentarer for å spare litt plass.
Måleverdiene lagres i et array med en størrelse definert av "antallVerdier". Biblioteket returnerer målinger i antall cm, så vi har brukt heltallsverdier over alt.
Verdiene skrives til serieporten, og både den "momentane" avstanden og gjennomsnittet skrives ut. Hvis du bruker Serial Plotter vil du derfor få opp en kurve for hver av disse.
/* * Basert på eksempel fra biblioteket Ultrasonic Simple av Erick Simões * */
#include <Ultrasonic.h>
#define antallVerdier 10
Ultrasonic ultrasonic(12, 13); // Trigger-pinne 12 og Echo-pinne 13
int avstand;
void setup() {
Serial.begin(9600);
pinMode(8,OUTPUT);
digitalWrite(8,LOW);
}
int verdier[antallVerdier];
long teller=0;
int sum, snitt;
void loop() {
avstand = ultrasonic.read();
//Her lager vi et "glidende gjennomsnitt" av verdiene
verdier[teller%antallVerdier]=avstand;
if(teller>=antallVerdier){
sum=0;
for(int x=0;x<antallVerdier;x++) sum+=verdier[x];
snitt=sum/antallVerdier;
}
teller++;
// Serial.print("Avstand i CM: ");
Serial.print(avstand); //Den siste målte avstanden
Serial.print(",");
Serial.println(snitt); //Gjennomsnittet
if(avstand<50) {
digitalWrite(8,HIGH);
delay(avstand*4);
digitalWrite(8,LOW);
}
delay(100);
}
- Detaljer
- Skrevet av: Per Sigbjørn
- Kategori: Glidende gjennomsnitt
- Treff: 3316