Hirdetés

Új hozzászólás Aktív témák

  • Janos250

    őstag

    válasz Tomika86 #17130 üzenetére

    Közben csináltam egy alternatívát az AnalogRead()-re, ami már átlagolva olvas, így kényelmesebben használható, csak be kell írni az analogRead() helyére. Ha gondolod, kipróbálhatod.

    #include <iostream>
    #include <queue>
    using namespace std;

    void setup() {
    Serial.begin(115200);
    delay(3000);
    Serial.println();
    } ; // end setup

    void loop() {
    printf("analogRead = %d \n",analogReadESP32WithMovingAverage(36,3) );
    delay(2000);
    } ; // end loop



    int16_t analogReadESP32WithMovingAverage(uint8_t GPIOn, uint16_t periodLength){

    const uint8_t GPIOs[] = {36, 39, 32, 33, 34, 35};
    static queue<uint16_t> analogValues[6];
    static uint16_t sum [6];

    int8_t GPIOlistNum = -1 ;
    for (int i = 0; i < 6; i++) {
    if ( GPIOs[i] == GPIOn ){
    GPIOlistNum = i;
    break;
    } ;
    } ;

    if ( GPIOlistNum < 0 ){
    return -1 ;
    } ;

    while ( analogValues[GPIOlistNum].size() >= periodLength){
    sum[GPIOlistNum]-=analogValues[GPIOlistNum].front() ;
    analogValues[GPIOlistNum].pop() ;
    } ;

    uint16_t readedAnalogValue = analogRead(GPIOn) ;

    sum[GPIOlistNum] += readedAnalogValue;
    analogValues[GPIOlistNum].push(readedAnalogValue) ;

    return sum[GPIOlistNum]/analogValues[GPIOlistNum].size() ;
    }; // end analogReadESP32WithMovingAverage

Új hozzászólás Aktív témák