Изглаждане (Smoothing)

Отчита непрестанно данните от аналогов вход, калкулира средната стойност и я подава на компютъра. Демонстрира употребата на масиви (arrays).

За този пример е необходим потенциометър свързан към аналогов входен пин 0.

Схема

Код

/* Izglajdane
* ------------
*
* Izglajda stojnosti kato izchislyava sredna stojnost na opredelen broj zamervaniya
*
* ot David A. Mellis (April 2007)
*
* bulgarski prevod ot Simeon Ianchev / Robotev.com (Septemvri 2009)
*/


/* opredelya broya na otchetenite stoinosti, koito shte se izglajdat
kolkoto e po-golya broya tolkova po-izgladeni shte sa rezultatite
obache i rezultata shte se generira po-bavno
izpolzvaite #define za da zadadete goleminata na masiva ot otcheteni stojnosti
*/ 

#define NUMREADINGS 10

int readings[NUMREADINGS];   	// promenliva za broya otchitaniya 

int index = 0;   	// promenliva za poreden nomer na poslednoto otchitane
int total = 0; 		// promenliva za obshtiya broj otchitaniya
int average = 0;           // promenliva za srednata, izgladena stojnost

int inputPin = 0;		// pin za potenciometara

void setup()
{
  Serial.begin(9600); 		// zapochva serijna komunikaciya s kompyutara sas 
                                //skorost ot 9600 bita v sekunda
  for (int i = 0; i < NUMREADINGS; i++)
    readings[i] = 0;		// nulira vsichki otcheteni stojnosti
}

void loop()
{
  total -= readings[index];               // izvajda poslednata otchetena stojnost
  readings[index] = analogRead(inputPin); // otchita danni ot senzora...
  total += readings[index];               // ...pribavya gi kam sbora...
  index = (index + 1);                    // ...i preminava kam otchitane na sledvashta stojnost

  if (index >= NUMREADINGS)               // v kraya na masiva...
    index = 0;                            // ...nulira

  average = total / NUMREADINGS;	  // izchislyava srednata stojnost
  Serial.println(average);                // I ya izprashta kam kompyutera kato ASCII simvoli
}


Share