Esimerkkiohjelma Arduino Code

#sisältää <stdio.h>
#sisältää <merkkijono.h>
#sisältää <inttypes.h>
#sisältää “Arduino.h”
#sisältää “XGZP6859D.h”
//IIC BUSin alustus
mitätön XGZP6859D::IIC_Init(mitätön)
{
pinMode(IIC_SCL, OUTPUT); //Aseta nasta lähtötilaan
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SCL, KORKEA); //Putout korkea taso
digitalWrite(IIC_SDA, KORKEA);
}
//Luo käynnistyssignaali
mitätön XGZP6859D::IIC_Start(mitätön)
{
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SDA, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME); //Viive useita mikrosekunteja
digitalWrite(IIC_SCL, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, MATALA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MATALA);
viive mikrosekuntia(IIC_DELAY_TIME);
}
//Luo pysäytyssignaali
mitätön XGZP6859D::IIC_Stop(mitätön)
{
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SDA, MATALA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
}
//Odota ACK-signaalia
//palata 1 tarkoittaa epäonnistumista
//palata 0 tarkoittaa menestystä
tavu XGZP6859D::IIC_Wait_Ack(mitätön)
{
tavu ucErrTime=0;
pinMode(IIC_SDA, INPUT);
digitalWrite(IIC_SDA, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
samalla kun(digitaalinen luku(IIC_SDA)== KORKEA)
{
ucErrTime++;
jos(ucErrTime>250)
{
IIC_Stop();
palata 1;
}
}
digitalWrite(IIC_SCL, MATALA);
palata 0;
}
//Luo ACK-signaali
mitätön XGZP6859D::IIC_Ack(mitätön)
{
digitalWrite(IIC_SCL, MATALA);
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SDA, MATALA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MATALA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
}
//Ei synnytä ACK-signaalia
mitätön XGZP6859D::IIC_NAck(mitätön)
{
digitalWrite(IIC_SCL, MATALA);
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SDA, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MATALA);
viive mikrosekuntia(IIC_DELAY_TIME);
}
//Lähetä yksi tavu IIC-väylän kautta
//Palautusarvo tarkoittaa vastausta orjalta
//1 tarkoittaa vastauksen saamista
//0 tarkoittaa, ettei vastausta saa
mitätön XGZP6859D::IIC_Send_Byte(tavu txd)
{
tavu t;
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SCL, MATALA);
varten(t = 0;t<8;t++)
{
jos(txd & 0x80)
digitalWrite(IIC_SDA, KORKEA);
muu
digitalWrite(IIC_SDA, MATALA);
txd<<=1;
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MATALA);
viive mikrosekuntia(IIC_DELAY_TIME);
}
digitalWrite(IIC_SCL, MATALA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
}
//Lue yksi tavu, lähetä ACK, kun taas ack = 1, lähetä nACK, kun taas ack = 0
tavu XGZP6859D::IIC_Read_Byte(vaihda valitettavasti)
{
vaihtaa sisään,vastaanottaa = 0;
pinMode(IIC_SDA, INPUT);
varten(i = 0;i<8;i++ )
{
digitalWrite(IIC_SCL, MATALA);
viive mikrosekuntia(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, KORKEA);
viive mikrosekuntia(IIC_DELAY_TIME);
vastaanottaa<<=1;
jos(digitaalinen luku(IIC_SDA)== KORKEA)
vastaanottaa++;
viive mikrosekuntia(IIC_DELAY_TIME);
}
digitalWrite(IIC_SDA, KORKEA);
palauttaa vastaanottaa;
}
//Kirjoita yksi tavu määritettyyn osoitteeseen
mitätön XGZP6859D::Write_One_Byte(u8 osoite ,u8 tiedot)
{
IIC_Start();
IIC_Send_Byte((tavu)(Device_Address + 0));
Serial.print(“Device_Address on “);
Serial.println(Device_Address + 0, HEX);
IIC_Wait_Ack();
IIC_Send_Byte(osoite);
IIC_Wait_Ack();
IIC_Send_Byte(tiedot);
IIC_Wait_Ack();
IIC_Stop();
}
//Lue yksi tavu määritetystä osoitteesta
tavu XGZP6859D::Lue_yksi_tavu(u8 osoite)
{
tavu omat tiedot;
IIC_Start();
IIC_Send_Byte((tavu)(Device_Address + 0));
IIC_Wait_Ack();
IIC_Send_Byte(osoite);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte((tavu)(Device_Address + 1));
IIC_Wait_Ack();
omat tiedot = IIC_Read_Byte(0);
IIC_Stop();
palauta omat tiedot;
}
mitätön XGZP6859D::XGZP6859D_get_cal() //XGZP6859D:n mittaustoiminto
{
tavu i=0;
tavubuff[5]; //Viiden tavun muuttujat, käytetään tallentamaan XGZP6859D:stä luetut tavut
allekirjoittamaton pitkä paine_mainos,lämpötila_mainos; //Muuttujat, joita käytetään kalibroidun paineen ja lämpötilan tallentamiseen
Write_One_Byte(0x30, 0x0A); //Ilmoita yhdistetty muunnos
samalla kun ((Lue_yksi_tavu(0x30) & 0x08) == 0x80) //Arvioi, onko tiedonkeruu päättynyt
{
Serial.println(“XGZP6859D ei ole valmis”);; //Odota, kun tiedot eivät ole valmiita
viive(1000);
}
varten(i = 0;i<5;i++) //Lue ADC-lähdön paine- ja lämpötilatiedot
harrastaja[i] = Lue_yksi_tavu(0x06 + i);
Serial.print(“harrastaja[0…4] on 0x”);
Serial.print(harrastaja[0], HEX);
Serial.print(“, 0x”);
Serial.print(harrastaja[1], HEX);
Serial.print(“, 0x”);
Serial.print(harrastaja[2], HEX);
Serial.print(“, 0x”);
Serial.print(harrastaja[3], HEX);
Serial.print(“, 0x”);
Serial.println(harrastaja[4], HEX);
//Laske ADC:n muuntaman paineen arvo
paine_mainos = ((allekirjoittamaton pitkä)((allekirjoittamaton pitkä)(harrastaja[0] * 65536)) + ((allekirjoittamaton int)(harrastaja[1] * 256)) + ((tavu)harrastaja[2]));
Serial.print(“paine_mainos on “);
Serial.println(paine_mainos);
jos (paine_mainos > 8388608) //
{
paine = (pitkä)(((pitkä)(paine_mainos – 16777216)) / 8192);
//Koska jänneväli on -500Pa ~+500Pa, niin k on 8192;k tulee muuttaa todellisen tilanteen mukaan; paineen yksikkö on Pa
}
muu
{
paine = (pitkä)(paine_mainos / 8192);
}
//Laske ADC:n muuntaman lämpötilan arvo
lämpötila_mainos = ((allekirjoittamaton int)((allekirjoittamaton int)(harrastaja[3]<<8)) + ((tavu)harrastaja[4]));
jos (lämpötila_mainos > 32768)
{
lämpötila = (kellua)(((pitkä)(lämpötila_mainos – 65536)) / 256);
//Lämpötilan yksikkö on celsiusaste
}
muu
{
lämpötila = (kellua)(lämpötila_mainos / 256);
}
}
XGZP6859D Oma_XGZP6859D; //Määritä objekti nimeltä My_XGZP6859D luokasta XGZP6859D
tyhjä asetus()
{
Serial.begin(9600); //Sarjaportin alustus
Oma_XGZP6859D.IIC_Init(); //Alusta My_XGZP6859D:n IIC-väylän nastat
}
tyhjä silmukka()
{
Oma_XGZP6859D.XGZP6859D_get_cal(); //Kutsu funktio XGZP6859D_get_cal() kohteen My_XGZP6859D laskeaksesi paineen ja lämpötilan
Serial.print(Oma_XGZP6859D.paine);
Serial.println(” Pa”);
Serial.print(Oma_XGZP6859D.lämpötila);
Serial.println(” Celsiusaste”);
Serial.println(“”);
viive(1000);
}