Örnek Program Arduino Kodu
#katmak <stdio.h>
#katmak <dize.h>
#katmak <inttypes.h>
#katmak “Arduino.h”
#katmak “XGZP6859D.h”
//IIC BUS'un başlatılması
geçersiz XGZP6859D::IIC_Init(geçersiz)
{
pinModu(IIC_SCL, ÇIKIŞ); //Pimi çıkış moduna ayarlayın
pinModu(IIC_SDA, ÇIKIŞ);
dijitalYazma(IIC_SCL, YÜKSEK); //Çıkış seviyesi yüksek
dijitalYazma(IIC_SDA, YÜKSEK);
}
//Başlatma sinyali oluştur
geçersiz XGZP6859D::IIC_Başlangıç(geçersiz)
{
pinModu(IIC_SDA, ÇIKIŞ);
dijitalYazma(IIC_SDA, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME); //Birkaç mikrosaniye geciktirme
dijitalYazma(IIC_SCL, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SDA, DÜŞÜK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, DÜŞÜK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
}
//Dur sinyali oluştur
geçersiz XGZP6859D::IIC_Durdur(geçersiz)
{
pinModu(IIC_SDA, ÇIKIŞ);
dijitalYazma(IIC_SDA, DÜŞÜK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SDA, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
}
//ACK sinyalini bekleyin
//geri dönmek 1 başarısızlık anlamına gelir
//geri dönmek 0 başarı anlamına gelir
bayt XGZP6859D::IIC_Wait_Ack(geçersiz)
{
bayt ucErrTime=0;
pinModu(IIC_SDA, GİRİŞ);
dijitalYazma(IIC_SDA, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
sırasında(dijitalOku(IIC_SDA)==YÜKSEK)
{
ucErrTime++;
eğer(ucErrTime>250)
{
IIC_Durdur();
geri dönmek 1;
}
}
dijitalYazma(IIC_SCL, DÜŞÜK);
geri dönmek 0;
}
//ACK sinyali oluştur
geçersiz XGZP6859D::IIC_Ack(geçersiz)
{
dijitalYazma(IIC_SCL, DÜŞÜK);
pinModu(IIC_SDA, ÇIKIŞ);
dijitalYazma(IIC_SDA, DÜŞÜK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, DÜŞÜK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SDA, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
}
//ACK sinyali üretmiyor
geçersiz XGZP6859D::IIC_NAck(geçersiz)
{
dijitalYazma(IIC_SCL, DÜŞÜK);
pinModu(IIC_SDA, ÇIKIŞ);
dijitalYazma(IIC_SDA, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, DÜŞÜK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
}
//IIC veri yolu üzerinden bir bayt gönder
//Dönüş değeri köleden gelen yanıt anlamına gelir
//1 cevap almak anlamına gelir
//0 cevap alamamak anlamına gelir
geçersiz XGZP6859D::IIC_Send_Byte(bayt txd)
{
bayt t;
pinModu(IIC_SDA, ÇIKIŞ);
dijitalYazma(IIC_SCL, DÜŞÜK);
için(t=0;T<8;t++)
{
eğer(teşekkürler & 0x80)
dijitalYazma(IIC_SDA, YÜKSEK);
başka
dijitalYazma(IIC_SDA, DÜŞÜK);
teşekkürler<<=1;
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, DÜŞÜK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
}
dijitalYazma(IIC_SCL, DÜŞÜK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SDA, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
}
//Bir bayt oku, ack sırasında ACK gönder = 1, ack iken nACK gönder = 0
bayt XGZP6859D::IIC_Read_Byte(ne yazık ki değiştir)
{
takas,alma=0;
pinModu(IIC_SDA, GİRİŞ);
için(ben=0;Ben<8;i++ )
{
dijitalYazma(IIC_SCL, DÜŞÜK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
dijitalYazma(IIC_SCL, YÜKSEK);
gecikmeMikrosaniye(IIC_DELAY_TIME);
almak<<=1;
eğer(dijitalOku(IIC_SDA)==YÜKSEK)
almak++;
gecikmeMikrosaniye(IIC_DELAY_TIME);
}
dijitalYazma(IIC_SDA, YÜKSEK);
iade alma;
}
//Belirtilen adrese bir bayt yaz
geçersiz XGZP6859D::Write_One_Byte(u8 adresi ,u8 verileri)
{
IIC_Başlangıç();
IIC_Send_Byte((bayt)(Cihaz_Adresi + 0));
Seri.baskı(“Device_Address (şimdiki değeri) “);
Seri.println(Cihaz_Adresi + 0, altıgen);
IIC_Wait_Ack();
IIC_Send_Byte(adres);
IIC_Wait_Ack();
IIC_Send_Byte(veri);
IIC_Wait_Ack();
IIC_Durdur();
}
//Belirtilen adresten bir bayt oku
bayt XGZP6859D::Read_One_Byte(u8 adresi)
{
bayt verilerim;
IIC_Başlangıç();
IIC_Send_Byte((bayt)(Cihaz_Adresi + 0));
IIC_Wait_Ack();
IIC_Send_Byte(adres);
IIC_Wait_Ack();
IIC_Başlangıç();
IIC_Send_Byte((bayt)(Cihaz_Adresi + 1));
IIC_Wait_Ack();
verilerim = IIC_Read_Byte(0);
IIC_Durdur();
verilerimi döndür;
}
geçersiz XGZP6859D::XGZP6859D_get_cal() //XGZP6859D'nin ölçüm eylemi
{
bayt i=0;
bayt güçlendirmesi[5]; //Beş bayt değişken, XGZP6859D'den okunan baytları kaydetmek için kullanılır
imzasız uzun press_ad,sıcaklık_ad; //Kalibre edilmiş basınç ve sıcaklığı kaydetmek için kullanılan değişkenler
Write_One_Byte(0x30, 0x0A); //Birleşik dönüşümü belirtin
sırasında ((Read_One_Byte(0x30) & 0x08) == 0x80) //Veri toplamanın bitip bitmediğine karar verin
{
Seri.println(“XGZP6859D hazır değil”);; //Veriler hazır değilken bekleyin
gecikme(1000);
}
için(ben=0;Ben<5;i++) //Basınç ve sıcaklık ADC çıkış verilerini okuyun
devetüyü[Ben] = Read_One_Byte(0x06 + Ben);
Seri.baskı(“devetüyü[0…4] 0x”);
Seri.baskı(devetüyü[0], altıgen);
Seri.baskı(“, 0X”);
Seri.baskı(devetüyü[1], altıgen);
Seri.baskı(“, 0X”);
Seri.baskı(devetüyü[2], altıgen);
Seri.baskı(“, 0X”);
Seri.baskı(devetüyü[3], altıgen);
Seri.baskı(“, 0X”);
Seri.println(devetüyü[4], altıgen);
//ADC tarafından dönüştürülen basınç değerini hesaplayın
basınç_ad = ((imzasız uzun)((imzasız uzun)(devetüyü[0] * 65536)) + ((imzasız int)(devetüyü[1] * 256)) + ((bayt)devetüyü[2]));
Seri.baskı(“basınç_ad: “);
Seri.println(basınç_ad);
eğer (basınç_ad > 8388608) //
{
basınç = (uzun)(((uzun)(basınç_ad – 16777216)) / 8192);
//Çünkü açıklık -500Pa~+500Pa, yani k 8192;k aktüel duruma göre değiştirilmelidir; basıncın birimi Pa'dır
}
başka
{
basınç = (uzun)(basınç_ad / 8192);
}
//ADC tarafından dönüştürülen sıcaklığın değerini hesaplayın
sıcaklık_ad = ((imzasız int)((imzasız int)(devetüyü[3]<<8)) + ((bayt)devetüyü[4]));
eğer (sıcaklık_ad > 32768)
{
sıcaklık = (batmadan yüzmek)(((uzun)(sıcaklık_ad – 65536)) / 256);
//Sıcaklığın birimi santigrattır
}
başka
{
sıcaklık = (batmadan yüzmek)(sıcaklık_ad / 256);
}
}
XGZP6859D My_XGZP6859D; //XGZP6859D sınıfının My_XGZP6859D adlı bir nesnesini tanımlayın
geçersiz kurulum()
{
Seri.başlangıç(9600); //Seri portun başlatılması
My_XGZP6859D.IIC_Init(); //My_XGZP6859D'nin IIC veri yolunun pinlerini başlatın
}
geçersiz döngü()
{
My_XGZP6859D.XGZP6859D_get_cal(); //XGZP6859D_get_cal işlevini çağırın() Basınç ve sıcaklığı hesaplamak için My_XGZP6859D nesnesinin
Seri.baskı(My_XGZP6859D.basınç);
Seri.println(” Pa”);
Seri.baskı(My_XGZP6859D.temperature);
Seri.println(” Santigrat”);
Seri.println(“”);
gecikme(1000);
}