Skocz do zawartości

Oversamplig esp8266 - zagwozdka


Pomocna odpowiedź

Napisano (edytowany)

Cześć, 

Mam dwa programy: 

1)

const int analogInPin = A0;  // Pin wejściowy analogowy
const int oversampling = 256; // Liczba próbek do oversamplingu
float c=0;

void setup() {
  Serial.begin(9600); 
}

void loop() {
  long sum = 0; 

  
  for (int i = 0; i < oversampling; i++) {
    sum += analogRead(analogInPin);
    delayMicroseconds(10);
  }

 
  int average = sum / 16;
  //c = (average-220)/5.1807;

  Serial.print("Wartosc oversamplingu:");
  Serial.println(average);
 // Serial.print("Wartosc napiecia:");
  //Serial.println(c,2);

  delay(500); 
}

Oraz 2)

const int analogInPin = A0;
const int over = 256;
float c=0;

void setup() {

  Serial.begin(9600);

}

void loop() {
  
  long raw = analogRead(analogInPin);
  long ADCW=0;
     
  for (int i=0; i<over; i++){
  ADCW += raw ;
  delayMicroseconds(10);
  }

  c=ADCW/16;

  //Serial.print("Raw: ");
  //Serial.println(analogRead(analogInPin));
  Serial.print("Wartosc oversamplingu:");
  Serial.println(c);
  delay(500); 
}

Oba te kody, poza nazwami zmiennych, różnią się, że mam dodatkową zmienną raw = analogRead (analogInPin). W pierwszym przypadku - oversampling działa elegancko, w drugim - nie chce on działać. Jestem raczej amatorem i nie ogarniam dlaczego tak się dzieje. Proszę o wytłumaczenie. Dzięki 😉

Edytowano przez moszeusz
  • Lubię! 1

W drugim przypadku nie działa bo w pętli for nie sprawdzasz analog'a...więc odczytasz tylko raz do zmiennej raw a później w pętli for 256 razy będziesz dodawał ten sam wynik który otrzymałeś przed wejściem do for

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...