Példa program Arduino kód

#tartalmazza <stdio.h>
#tartalmazza <húr.h>
#tartalmazza <inttípusok.h>
#tartalmazza “Arduino.h”
#tartalmazza “XGZP6859D.h”
//Az IIC BUS inicializálása
érvénytelen XGZP6859D::IIC_Init(üres)
{
pinMode(IIC_SCL, KIMENET); //Állítsa a tűt kimeneti módba
pinMode(IIC_SDA, KIMENET);
digitalWrite(IIC_SCL, MAGAS); //Magas szintű kihelyezés
digitalWrite(IIC_SDA, MAGAS);
}
//Indító jel generálása
érvénytelen XGZP6859D::IIC_Start(üres)
{
pinMode(IIC_SDA, KIMENET);
digitalWrite(IIC_SDA, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME); //Késleltessen néhány mikroszekundumot
digitalWrite(IIC_SCL, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, ALACSONY);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, ALACSONY);
késleltetésMikromásodperc(IIC_DELAY_TIME);
}
//Stop jelzés generálása
érvénytelen XGZP6859D::IIC_Stop(üres)
{
pinMode(IIC_SDA, KIMENET);
digitalWrite(IIC_SDA, ALACSONY);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
}
//Várja meg az ACK jelet
//visszatérés 1 kudarcot jelent
//visszatérés 0 sikert jelent
XGZP6859D bájt::IIC_Wait_Ack(üres)
{
bájt ucErrTime=0;
pinMode(IIC_SDA, BEMENET);
digitalWrite(IIC_SDA, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
míg(digitalRead(IIC_SDA)==MAGAS)
{
ucErrTime++;
ha(ucErrTime>250)
{
IIC_Stop();
visszatérés 1;
}
}
digitalWrite(IIC_SCL, ALACSONY);
visszatérés 0;
}
//ACK jel generálása
érvénytelen XGZP6859D::IIC_Ack(üres)
{
digitalWrite(IIC_SCL, ALACSONY);
pinMode(IIC_SDA, KIMENET);
digitalWrite(IIC_SDA, ALACSONY);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, ALACSONY);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
}
//Nem generál ACK jelet
érvénytelen XGZP6859D::IIC_NAck(üres)
{
digitalWrite(IIC_SCL, ALACSONY);
pinMode(IIC_SDA, KIMENET);
digitalWrite(IIC_SDA, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, ALACSONY);
késleltetésMikromásodperc(IIC_DELAY_TIME);
}
//Küldjön egy bájtot az IIC buszon
//A visszatérési érték a slave válaszát jelenti
//1 válasz fogadását jelenti
//0 azt jelenti, hogy nem kap választ
érvénytelen XGZP6859D::IIC_Send_Byte(bájt txd)
{
bájt t;
pinMode(IIC_SDA, KIMENET);
digitalWrite(IIC_SCL, ALACSONY);
számára(t=0;t<8;t++)
{
ha(txd & 0x80)
digitalWrite(IIC_SDA, MAGAS);
más
digitalWrite(IIC_SDA, ALACSONY);
txd<<=1;
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, ALACSONY);
késleltetésMikromásodperc(IIC_DELAY_TIME);
}
digitalWrite(IIC_SCL, ALACSONY);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
}
//Olvasson egy bájtot, ACK küldése, míg ack = 1, nACK küldés, míg ack = 0
XGZP6859D bájt::IIC_Read_Byte(változtass sajnos)
{
becserélni,fogadás=0;
pinMode(IIC_SDA, BEMENET);
számára(i=0;én<8;i++ )
{
digitalWrite(IIC_SCL, ALACSONY);
késleltetésMikromásodperc(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, MAGAS);
késleltetésMikromásodperc(IIC_DELAY_TIME);
kap<<=1;
ha(digitalRead(IIC_SDA)==MAGAS)
fogadni++;
késleltetésMikromásodperc(IIC_DELAY_TIME);
}
digitalWrite(IIC_SDA, MAGAS);
visszakapni;
}
//Írjon egy bájtot egy megadott címre
érvénytelen XGZP6859D::Write_One_Byte(u8 cím ,u8 adatok)
{
IIC_Start();
IIC_Send_Byte((byte)(Eszköz_címe + 0));
Serial.print(“Az eszköz_címe “);
Serial.println(Eszköz_címe + 0, HEX);
IIC_Wait_Ack();
IIC_Send_Byte(cím);
IIC_Wait_Ack();
IIC_Send_Byte(adat);
IIC_Wait_Ack();
IIC_Stop();
}
//Olvasson egy bájtot egy megadott címről
XGZP6859D bájt::Read_One_Byte(u8 cím)
{
bájt saját adatok;
IIC_Start();
IIC_Send_Byte((byte)(Eszköz_címe + 0));
IIC_Wait_Ack();
IIC_Send_Byte(cím);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte((byte)(Eszköz_címe + 1));
IIC_Wait_Ack();
mydata = IIC_Read_Byte(0);
IIC_Stop();
visszaadja az adataimat;
}
érvénytelen XGZP6859D::XGZP6859D_get_cal() //Az XGZP6859D mérési művelete
{
bájt i=0;
bájt buff[5]; //Öt bájtos változók, az XGZP6859D-ből olvasott bájtok mentésére szolgál
unsigned long pressure_ad,hőmérséklet_hirdetés; //A kalibrált nyomás és hőmérséklet mentésére használt változók
Write_One_Byte(0x30, 0x0A); //Jelöljön meg egy kombinált konverziót
míg ((Read_One_Byte(0x30) & 0x08) == 0x80) //Döntse el, hogy az adatgyűjtés véget ért-e
{
Serial.println(“Az XGZP6859D nem áll készen”);; //Várjon, amíg az adatok nem állnak készen
késleltetés(1000);
}
számára(i=0;én<5;i++) //Olvassa el az ADC kimeneti nyomás és hőmérséklet adatait
barnássárga[én] = Olvasás_Egy_Bájt(0x06 + én);
Serial.print(“barnássárga[0…4] 0x”);
Serial.print(barnássárga[0], HEX);
Serial.print(“, 0x”);
Serial.print(barnássárga[1], HEX);
Serial.print(“, 0x”);
Serial.print(barnássárga[2], HEX);
Serial.print(“, 0x”);
Serial.print(barnássárga[3], HEX);
Serial.print(“, 0x”);
Serial.println(barnássárga[4], HEX);
//Számítsa ki az ADC által átalakított nyomás értékét
nyomás_hirdetés = ((aláíratlan hosszú)((aláíratlan hosszú)(barnássárga[0] * 65536)) + ((aláíratlan int)(barnássárga[1] * 256)) + ((byte)barnássárga[2]));
Serial.print(“nyomás_hirdetés “);
Serial.println(nyomás_hirdetés);
ha (nyomás_hirdetés > 8388608) //
{
nyomás = (hosszú)(((hosszú)(nyomás_hirdetés – 16777216)) / 8192);
//Mert a fesztáv -500Pa~+500Pa, tehát k az 8192;k-t az aktuális állapotnak megfelelően módosítani kell; a nyomás mértékegysége Pa
}
más
{
nyomás = (hosszú)(nyomás_hirdetés / 8192);
}
//Számítsa ki az ADC által átalakított hőmérséklet értékét
hőmérséklet_ad = ((aláíratlan int)((aláíratlan int)(barnássárga[3]<<8)) + ((byte)barnássárga[4]));
ha (hőmérséklet_hirdetés > 32768)
{
hőmérséklet = (úszó)(((hosszú)(hőmérséklet_hirdetés – 65536)) / 256);
//A hőmérséklet mértékegysége Celsius-fok
}
más
{
hőmérséklet = (úszó)(hőmérséklet_hirdetés / 256);
}
}
XGZP6859D Saját_XGZP6859D; //Határozzon meg egy My_XGZP6859D nevű objektumot az XGZP6859D osztályból
üres beállítás()
{
Serial.begin(9600); //A soros port inicializálása
Saját_XGZP6859D.IIC_Init(); //Inicializálja a My_XGZP6859D IIC-busz érintkezőit
}
üres hurok()
{
Saját_XGZP6859D.XGZP6859D_get_cal(); //Hívja meg az XGZP6859D_get_cal függvényt() a My_XGZP6859D objektumból a nyomás és a hőmérséklet kiszámításához
Serial.print(Saját_XGZP6859D.nyomás);
Serial.println(” PA”);
Serial.print(Saját_XGZP6859D.hőmérséklet);
Serial.println(” Celsius fok”);
Serial.println(“”);
késleltetés(1000);
}