DonanımHaber Mini sürüm 2 Ocak 2026 tarihi itibariyle kullanımdan kalkacaktır. Bunun yerine daha hızlı bir deneyim için DH Android veya DH iOS uygulamalarını kullanabilirsiniz.
Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
7
Cevap
321
Tıklama
0
Öne Çıkarma
ekrana gelen verilerin ortalaması
Y
6 yıl (7 mesaj)
Er
Konu Sahibi

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

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



L
6 yıl (1394 mesaj)
Yüzbaşı

Gelen verilerin istediklerinizi bir değişkende tutacaksınız daha sonra değişkenleri toplayıp 2 ye böleceksiniz.



R
6 yıl (1844 mesaj)
Binbaşı

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.



Y
6 yıl (7 mesaj)
Er
Konu Sahibi

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);
}
}



R
6 yıl (1844 mesaj)
Binbaşı

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 >
Bu mesaja 1 cevap geldi.
Y
6 yıl (7 mesaj)
Er
Konu Sahibi

Rafet Bey dediğinizi deneyeceğim şu anda malzemeler yanımda değil. Kısa zamanda dönüş yaparım. Teşekkürler



Y
6 yıl (7 mesaj)
Er
Konu Sahibi

< Resime gitmek için tıklayın >


bu şekilde bir hata aldım. yazdığınız kodu erleyince


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @rafet32
R
6 yıl (1844 mesaj)
Binbaşı

Üç 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 >


Bu mesajda bahsedilenler: @Yarım_Mühendis
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.