Şimdi Ara

ekrana gelen verilerin ortalaması

Bu Konudaki Kullanıcılar:
2 Misafir - 2 Masaüstü
5 sn
9
Cevap
0
Favori
226
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar iyi çalışmalar öncelikle.Elimde bir sensör var lcd ye bağlı.Sensörden gelen verileri lcd ekrana veriyorum. Ama gelen veriler sabit değil.örneğin gelen ilk 5-10 verinin ortalamasını nasıl alabilirim



  • Gelen verilerin istediklerinizi bir değişkende tutacaksınız daha sonra değişkenleri toplayıp 2 ye böleceksiniz.
  • Yazdığınız kodları paylaşırsanız çözümler önerilebilir diğer türlü alacağınzı cevap;
    10 tane değeri toplayın sonra 10'a bölün çıkan sonuç istediğiniz ortalama değer olacaktır.
  • ccs c ile yazdım. ilk kod bu



    #include <16f877A.h>
    #device ADC=8

    #FUSES NOWDT //No Watch Dog Timer
    #FUSES NOBROWNOUT //No brownout reset
    #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
    #use delay(crystal=8MHz)
    #use I2C(master, sda=PIN_d0, scl=PIN_d1, slow) //i2c ayarlari yapılıyor.


    #define LCD_RS_PIN PIN_B4
    #define LCD_RW_PIN PIN_B5
    #define LCD_ENABLE_PIN PIN_B6
    #define LCD_DATA4 PIN_D4
    #define LCD_DATA5 PIN_D5
    #define LCD_DATA6 PIN_D6
    #define LCD_DATA7 PIN_D7
    #define LCD_DATA_PORT getenv("SFR:PORTD")
    #include "MPU6050.C"
    #include <lcd.c>
    #include <math.h>


    signed int8 A_data[6];
    signed int8 temp_data[2];
    signed int8 G_data[6];
    signed int16 Xa=0,Ya=0,Za=0;
    signed int16 temp=0;
    signed int16 Xg=0,Yg=0,Zg=0;

    void main()
    {

    set_tris_a(0x00); //(0b00000000);
    delay_ms(2);
    lcd_init();

    printf(lcd_putc,"\f");
    lcd_gotoxy(1,1);
    printf(lcd_putc,"BUHARI");
    lcd_gotoxy(1,2);
    printf(lcd_putc,"ELEKTRONIK");
    delay_ms(100);
    mpu6050_init();
    delay_ms(100);
    printf(lcd_putc,"\f");
    lcd_gotoxy(1,1);
    printf(lcd_putc,"MPU6050 Ivme");
    lcd_gotoxy(1,2);
    printf(lcd_putc,"Sensoru");

    printf(lcd_putc,"\f");

    while(TRUE)
    {
    output_toggle(pin_a0);
    signed int16 acc1,acc2,acc3;

    A_data[0]=mpu6050_read(0x43);//(0x3B); //X eksen(LSB) ilk byte okunuyor
    A_data[1]=mpu6050_read(0x44); //X eksen(MSB) son biti okunuyor
    A_data[2]=mpu6050_read(0x45); //Y eksen(LSB) ilk biti okunuyor
    A_data[3]=mpu6050_read(0x46); //Y eksen(MSB) son biti okunuyor
    A_data[4]=mpu6050_read(0x47); //Z eksen(LSB) ilk biti okunuyor
    A_data[5]=mpu6050_read(0x48); //Z eksen(MSB) son biti okunuyor

    acc1=make16(A_data[0],A_data[1]);
    acc2=make16(A_data[2],A_data[3]);
    acc3=make16(A_data[4],A_data[5]);

    printf(lcd_putc,"\f");
    lcd_gotoxy(1,1);
    printf(lcd_putc,"xa%d",A_data[0]);

    lcd_gotoxy(9,1);
    printf(lcd_putc,"xb%d",A_data[1]);

    lcd_gotoxy(1,2);
    printf(lcd_putc,"ya%d",A_data[2]);

    lcd_gotoxy(9,2);
    printf(lcd_putc,"yb%d",A_data[3]);

    delay_ms(300);
    }
    }
  • Aşağıdaki örneğe benzer bir mantık işinizi görecektir.

    #define ORTALAMA_ADET 10 ile ortalama almak istediğiniz değeri seçin.
    sonuçlar
    ortalama_a1_sonuc
    ortalama_a2_sonuc
    ortalama_a3_sonuc

    içerisine aktarılır, sizde bu değeri LCD de görüntüleyebilirsiniz. Kısa açıklamalar zaten kod içerisinde yapıldı. Syntax hataları olabilir belki, kodları derleme imkanım olmadı.






    #include <16f877A.h>
    #device ADC=8

    #FUSES NOWDT //No Watch Dog Timer
    #FUSES NOBROWNOUT //No brownout reset
    #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
    #use delay(crystal=8MHz)
    #use I2C(master, sda=PIN_d0, scl=PIN_d1, slow) //i2c ayarlari yapılıyor.


    #define LCD_RS_PIN PIN_B4
    #define LCD_RW_PIN PIN_B5
    #define LCD_ENABLE_PIN PIN_B6
    #define LCD_DATA4 PIN_D4
    #define LCD_DATA5 PIN_D5
    #define LCD_DATA6 PIN_D6
    #define LCD_DATA7 PIN_D7
    #define LCD_DATA_PORT getenv("SFR:PORTD")
    #include "MPU6050.C"
    #include <lcd.c>
    #include <math.h>


    signed int8 A_data[6];
    signed int8 temp_data[2];
    signed int8 G_data[6];
    signed int16 Xa=0,Ya=0,Za=0;
    signed int16 temp=0;
    signed int16 Xg=0,Yg=0,Zg=0;

    #define ORTALAMA_ADET 10
    int ortalama_index = 0;

    float ortalama_a1 = 0;
    float ortalama_a2 = 0;
    float ortalama_a3 = 0;

    float ortalama_a1_sonuc = 0;
    float ortalama_a2_sonuc = 0;
    float ortalama_a3_sonuc = 0;

    void main()
    {




    set_tris_a(0x00); //(0b00000000);
    delay_ms(2);
    lcd_init();

    printf(lcd_putc,"\f");
    lcd_gotoxy(1,1);
    printf(lcd_putc,"BUHARI");
    lcd_gotoxy(1,2);
    printf(lcd_putc,"ELEKTRONIK");
    delay_ms(100);
    mpu6050_init();
    delay_ms(100);
    printf(lcd_putc,"\f");
    lcd_gotoxy(1,1);
    printf(lcd_putc,"MPU6050 Ivme");
    lcd_gotoxy(1,2);
    printf(lcd_putc,"Sensoru");

    printf(lcd_putc,"\f");

    while(TRUE)
    {
    output_toggle(pin_a0);
    signed int16 acc1,acc2,acc3;

    A_data[0]=mpu6050_read(0x43);//(0x3B); //X eksen(LSB) ilk byte okunuyor
    A_data[1]=mpu6050_read(0x44); //X eksen(MSB) son biti okunuyor
    A_data[2]=mpu6050_read(0x45); //Y eksen(LSB) ilk biti okunuyor
    A_data[3]=mpu6050_read(0x46); //Y eksen(MSB) son biti okunuyor
    A_data[4]=mpu6050_read(0x47); //Z eksen(LSB) ilk biti okunuyor
    A_data[5]=mpu6050_read(0x48); //Z eksen(MSB) son biti okunuyor

    acc1=make16(A_data[0],A_data[1]);
    acc2=make16(A_data[2],A_data[3]);
    acc3=make16(A_data[4],A_data[5]);

    if (ortalama_index < ORTALAMA_ADET)
    {
    // Ortalama adet kadar değeri topla
    ortalama_a1 += (float)acc1;
    ortalama_a2 += (float)acc2;
    ortalama_a3 += (float)acc3;
    ortalama_index++;
    }
    else
    {
    // ortalama alınacak değere ulaşıldı.
    // ortalamayı hesapla

    ortalama_a1_sonuc = ortalama_a1 / (float)ORTALAMA_ADET;
    ortalama_a2_sonuc = ortalama_a2 / (float)ORTALAMA_ADET;
    ortalama_a3_sonuc = ortalama_a3 / (float)ORTALAMA_ADET;

    // bir sonraki ölçüm için değişkenleri sıfırla
    ortalama_a1 = 0;
    ortalama_a2 = 0;
    ortalama_a3 = 0;

    ortalama_index = 0;

    }

    printf(lcd_putc,"\f");
    lcd_gotoxy(1,1);
    printf(lcd_putc,"xa%d",A_data[0]);

    //-------------
    // lcd yazma örneği lcd de hangi koordinata yazılacağını belirleyiniz.

    lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a1 %f",ortalama_a1_sonuc;
    lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a2 %f",ortalama_a2_sonuc;
    lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a3 %f",ortalama_a3_sonuc;
    //-------------
    lcd_gotoxy(9,1);
    printf(lcd_putc,"xb%d",A_data[1]);

    lcd_gotoxy(1,2);
    printf(lcd_putc,"ya%d",A_data[2]);

    lcd_gotoxy(9,2);
    printf(lcd_putc,"yb%d",A_data[3]);

    delay_ms(300);
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi rafet32 -- 18 Mart 2020; 14:1:32 >
  • Rafet Bey dediğinizi deneyeceğim şu anda malzemeler yanımda değil. Kısa zamanda dönüş yaparım. Teşekkürler
  • rafet32 kullanıcısına yanıt
    ekrana gelen verilerin ortalaması


    bu şekilde bir hata aldım. yazdığınız kodu erleyince
  • Yarım_Mühendis Y kullanıcısına yanıt
    Üç satırın sonudanda parantez eksiği var. " );" Tırnaklar olmadan satır sonlarına bunları ekleyin.
    Not: 3 değeride lcd_gotoxy(1,1) ile belirtilen komumunda üst üste yazacak, sizin lcd yerleşiminize bu kısmı düzenlemeniz gerekecek.


    //-------------
    // lcd yazma örneği lcd de hangi koordinata yazılacağını belirleyiniz.

    lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a1 %f",ortalama_a1_sonuc);
    lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a2 %f",ortalama_a2_sonuc);
    lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a3 %f",ortalama_a3_sonuc);
    //-------------



    < Bu mesaj bu kişi tarafından değiştirildi rafet32 -- 25 Mart 2020; 19:9:35 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.