

-----------------------------------

AVD

13 Feb 2024 16:27



-----------------------------------

Nu prea e ok, pare ca defapt e acelasi lucru ca in versiunea originala. 
Sper sa nu stricam corectitudinea. dar acea impartire n-ar trebui sa apara deloc, decat la final detot dupa ce calculezi ultima iteratie. Desigur daca pe parcurs afisezi puterea pana la mom. respectiv, va trebui sa faci impartirea, dar doar pt afisare, insa banui ca nu te intereseaza la fiecare milisec ce ai consumat.

Ultima linie ar trebui sa fie:
PWR_TOTAL = PWR_TOTAL / 3600000....


Nu cred ca ne gandim la acelasi rezultat :D PWR_TOTAL este un "Gauge" in NINA, care este updatat odata pe secunda de driver (driverul "citeste" valoarea stocata pe variabila PWR_TOTAL in arduino si o atribuie acelui camp din NINA). Nu e o valoare pe care o citesc cand sting lumina.

Codul complet este asta: functia ruleaza in bucla (in void loop()).
Cand pe serial vine comanda care cere valoarea, pur si simplu se trimite PWR_TOTAL prin serial.

 void GET_POWER() {
    time1=millis();
    if (AVERAGE_COUNT == 150) AVERAGE_COUNT = 0;
    float VOLTAGE_SAMPLE_SUM=0;
    for (int v=0;v<150;v++) 
    {
      PIN_VALUE_V =  analogRead(VM);
      VOLTAGE_SAMPLE_SUM +=PIN_VALUE_V;     
    }
    VOLTAGE_SAMPLE_SUM /=150;
    VOLT_TEMP = (VOLTAGE_SAMPLE_SUM * 5.0) / 1024.0;   
    VOLT = VOLT_TEMP / 0.0982;        
    if (VOLT < 0.1) VOLT=0.0;    
    CURRENT_SAMPLE_SUM=0;
    for (int i=0;i<150;i++)
    {
      PIN_VALUE_A= analogRead(AM);
      CURRENT_SAMPLE_SUM = CURRENT_SAMPLE_SUM + PIN_VALUE_A;
    }
    AMP_AVERAGE[AVERAGE_COUNT] = (2.494 - ((CURRENT_SAMPLE_SUM/150)*(5.0/1024.0))) / ACS_resolution;
    AVGAMP=0;
    for (int c=0;c<150;c++) AVGAMP += AMP_AVERAGE[c];
    AMP = AVGAMP/150;
    if (AMP< 0.01) AMP=0.0;
    PWR = VOLT * AMP;
    AVERAGE_COUNT = AVERAGE_COUNT + 1;
    prev_pwr_used = (prev_pwr+PWR/2)*(time1-time2);
    //PWR_TOTAL = PWR_TOTAL+ ((((prev_pwr+PWR)/2)*(time1-time2))/3600000); // total power in W*h 
    prev_pwr=PWR;
    time2=millis();
    current_pwr_used = PWR*(time2-time1);
    total_pwr_used = prev_pwr_used + current_pwr_used;
    PWR_TOTAL = PWR_TOTAL + total_pwr_used / 3600000 ; // total power in W*h                                
}

