• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[SOLVED] Arduino liczy średnią temperaturę [tablica]
#1
Cześć

Od wczoraj siedzę nad stworzeniem w Arduino prostej funkcji która będzie mierzyła średnią temperaturę powietrza z 24h

Tablica ma 24 elementy

dla testów podłączyłem Arduino Mega i sprawdzam algorytm ale popełniam gdzieś błąd ponieważ gdy wypisuje sobie wszystkie elementy to co wykonanie pętli loop() wszystko od początku tablicy się ładnie dopisuje ale w elemencie [24] tablicy mam jakies hiper wyniki typu 28344.

funkcja sumowania elementów tablicy też jest jakaś nie teges . 

Czy wie ktoś gdzie robię błąd?
[Obrazek: az.png]

Kod:
int liczba1 = 1; // dodawanie jakiejś liczby do tablicy
int sumka = 0;  // suma tablicy
intkolejnyPomiar = 0; // tutaj kolejny pomiar np co 1h docelowo do 24
int tablica[24];

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

void loop(){
    Serial.println("  ");
    Serial.print("liczba1:");
    Serial.println(liczba1);
    Serial.print("kolejnyPomiar:");
    Serial.println(kolejnyPomiar);

    dopisanie();

    Serial.print("Ponownie po dopisaniu tablica: ");
    Serial.println(tablica[kolejnyPomiar]); // na 0 mam 1
    Serial.println("_------------_");

    elementyTablicy();    
    zwiekszenie();
    suma();
    delay(10000);
}

void dopisanie(){
    if (  kolejnyPomiar < 24){ // if ma za zadanie przeskoczenie do początku tablicy po 24 pomiatze
    tablica[kolejnyPomiar] = liczba1;
    //tablica[7] = 0;
}
    else {        
        kolejnyPomiar = 0;        
    }
}

void zwiekszenie(){
    if( kolejnyPomiar <= 24){ // idziemy dalej po elementach tablicy
    kolejnyPomiar += 1;
    liczba1 += 1;}
    else {
        kolejnyPomiar = 0;
        liczba1 += 1;
    }
}

void suma(){  // sumowanie elementów tablicy
    for ( byte i = 0; i <= 24; i++){
        sumka += tablica[i];
    }
    Serial.print("Suma tablicy:");
    Serial.println(sumka);
}

void elementyTablicy(){  // wyświetlenie elementów tablicy
    for ( int i = 0; i <= 24; i++){
    Serial.print(i);
    Serial.print(" Element tablicy:");
    Serial.println(tablica[i]);    
    }
    
}
 
Odpowiedź
#2
Nie masz aby błędu w funkcji dopisanie()? Jest w niej warunek dotyczący kolejnego pomiaru. Jeśli jest mniejszy niż 24 (czyli max 23), wtedy funkcja się wykona. A co z pomiarem 24?
Powinieneś to, imho, poprawić na if (kolejnyPomiar <=24)
 
Odpowiedź
#3
(11-05-2017, 13:46)krn78 napisał(a): Powinieneś to, imho, poprawić na if (kolejnyPomiar <=24)

Tak masz rację poprawiłem ten bląd - dziękuje za podpowiedz

Tylko co z ta sumą - czy to jest tak proste, że człowiek tego nie widzi czy jak Smile

Już w drugim pomiarze ( druga pętla ) Suma = 4 a powinna równać się 3
 
Odpowiedź
#4
SOLVED = po każdej iteracji pętli ( po każdej pętli ) trzeba wyzerować zmienna sumka odpowiedzialną za sumę tablicy

void zerowanieSumki(){
sumka = 0;
}


i do loop na końcu
zerowanieSumki();  

Smile

Kod:
int liczba1 = 1,sumka = 0,kolejnyPomiar = 0;
int tablica[24];

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

void loop(){
    Serial.println("  ");
    Serial.print("liczba1:");
    Serial.println(liczba1);
    Serial.print("kolejnyPomiar:");
    Serial.println(kolejnyPomiar);

    dopisanie();

    Serial.print("Ponownie po dopisaniu tablica: ");
    Serial.println(tablica[kolejnyPomiar]); // na 0 mam 1
    Serial.println("_------------_");

    elementyTablicy();    
    
    suma();
    zwiekszenie();
    zerowanieSumki();
    delay(3000);
}

void zerowanieSumki(){
    sumka = 0;
}

void dopisanie(){
    if (  kolejnyPomiar <= 24){
    tablica[kolejnyPomiar] = liczba1;
    }
    else {
        kolejnyPomiar = 0;
    }
}

void zwiekszenie(){
    if( kolejnyPomiar <= 23){
    kolejnyPomiar += 1;
    liczba1 += 1;}
    else {
        kolejnyPomiar = 0;
        liczba1 += 1;
    }
}

void suma(){
    for ( byte i = 0; i <= 23; i++){
        sumka += tablica[i];
    }
        Serial.print("Suma tablicy:");
        Serial.println(sumka);
}

void elementyTablicy(){
    for ( int i = 0; i <= 23; i++){
    Serial.print(i);
    Serial.print(" Element tablicy:");
    Serial.println(tablica[i]);    
    }
    
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości