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.
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
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.
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
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.
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
Üç 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.
10 tane değeri toplayın sonra 10'a bölün çıkan sonuç istediğiniz ortalama değer olacaktır.
#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);
}
}
#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ı.
< Bu mesaj bu kişi tarafından değiştirildi rafet32 -- 18 Mart 2020; 14:1:32 >
Bu mesaja 1 cevap geldi. Cevapları Gizle
bu şekilde bir hata aldım. yazdığınız kodu erleyince
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @rafet32
Not: 3 değeride lcd_gotoxy(1,1) ile belirtilen komumunda üst üste yazacak, sizin lcd yerleşiminize bu kısmı düzenlemeniz gerekecek.
< Bu mesaj bu kişi tarafından değiştirildi rafet32 -- 25 Mart 2020; 19:9:35 >
Bu mesajda bahsedilenler: @Yarım_Mühendis