legkisebb-legnagyobb érték figyelmen kívül hagyása

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
juhasz
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. február 8. szerda, 22:17

legkisebb-legnagyobb érték figyelmen kívül hagyása

Hozzászólás Szerző: juhasz »

Üdv!

Az lenne a gondom, hogy ha megmérem az analóg láb értékét többször, túlmintavételezéssel, hogy tudom azokból az 5 legkisebb és az 5 legnagyobb értéket figyelmen kívül hagyni.
Pl.:
for (int x = 0; x < 64; x++){int ertek=analogRead(3); ertek2=ertek1+ertek2;}
A 64 mérésből az 5 legnagyobbat és az 5 legkisebbet nem venné figyelembe.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: legkisebb-legnagyobb érték figyelmen kívül hagyása

Hozzászólás Szerző: Robert »

1. Csinálsz egy sorbarendezést
2. 6. .... 59. Elemet átlagolod

Ja és ehhez a mérési eredményt mented. Mind a 64et.
http://www.tavir.hu - a gazda :)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: legkisebb-legnagyobb érték figyelmen kívül hagyása

Hozzászólás Szerző: kapu48 »

Szerintem a leg egyszerűbb megvalósítani:
11. Buborékrendezés (bubble sort)
https://infoc.eet.bme.hu/ea07/
A "start következő folyamatos" gombok használatával könyen megérthető a müködése.

bubble helyet használj uint16_t

Kód: Egész kijelölése

// paraméter:
// *t    pointer a tömbre
// db   tömb elemek száma
void buborek(uint16_t *t, int db) {
   uint8_t i, j;
 
   /* egyre rövidebb tömbrészletek ciklusa */
   for (i = db-1; i > 0; --i)
      /* egymás utáni párok ciklusa */
      for (j = 0; j < i; ++j)
         if (t[j+1] < t[j]) {      /* összehasonlítás */
            uint16_t temp = t[j];
            t[j] = t[j+1];         /* csere */
            t[j+1] = temp;
         }
}
juhasz
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. február 8. szerda, 22:17

Re: legkisebb-legnagyobb érték figyelmen kívül hagyása

Hozzászólás Szerző: juhasz »

Köszönöm!
Ez még nekem elég "magas". Talán később,
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: legkisebb-legnagyobb érték figyelmen kívül hagyása

Hozzászólás Szerző: kapu48 »

Nem szabad feladni!

Próbálkozz, aztán majd segítünk!
Itt 1 példa:

Kód: Egész kijelölése

// atlagolo.ino

// paraméter:
// *t    pointer a tömbre
// db   tömb elemek száma
void buborek(uint16_t *t, uint8_t db) {
   uint8_t i, j;
   uint16_t temp;
   
   /* egyre rövidebb tömbrészletek ciklusa */
   for (i = db-1; i > 0; --i)
      /* egymás utáni párok ciklusa */
      for (j = 0; j < i; ++j)
         if (t[j+1] < t[j]) {      /* összehasonlítás */
            temp = t[j];
            t[j] = t[j+1];         /* csere */
            t[j+1] = temp;
         }
}

void setup() {
  // put your setup code here, to run once:
  
}

void loop() {
  // put your main code here, to run repeatedly:

  uint16_t  ertek[64], *pt;  // tömb a mérési eredmények számára
  uint16_t  ertek2 = 0;
  // mérünk 64 szer és eltároljuk a tömbe
  for (int x = 0; x < 64; x++){ ertek[x]=analogRead(3);}
  pt = ertek; // pointert a tömbre állítjuk

  buborek(pt, 64);  // A tömböt sorbarendezzük nagyság szerint
  // elvégezzük az összeadást
  for (int x = 5; x < (64 - 5); x++){ ertek2 += ertek[x];}
  ertek2 /= 54;  // átlagot számolunk
  // ....
  
}

juhasz
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. február 8. szerda, 22:17

Re: legkisebb-legnagyobb érték figyelmen kívül hagyása

Hozzászólás Szerző: juhasz »

Kösz ezt is!
Fogok próbálkozni.
Válasz küldése