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