Voorbeeld Programma Arduino Code

#erbij betrekken <stdio.h>
#erbij betrekken <string.h>
#erbij betrekken <inttypes.h>
#erbij betrekken “Arduino.h”
#erbij betrekken “XGZP6859D.h”
//De initialisatie van IIC BUS
vervalt XGZP6859D::IIC_Init(leegte)
{
pinModus(IIC_SCL, UITGANG); //Zet de pin in de uitvoermodus
pinModus(IIC_SDA, UITGANG);
digitaalSchrijf(IIC_SCL, HOOG); //Zet op hoog niveau
digitaalSchrijf(IIC_SDA, HOOG);
}
//Startsignaal genereren
vervalt XGZP6859D::IIC_Start(leegte)
{
pinModus(IIC_SDA, UITGANG);
digitaalSchrijf(IIC_SDA, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME); //Vertraging enkele microseconden
digitaalSchrijf(IIC_SCL, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SDA, LAAG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, LAAG);
vertragingMicroseconden(IIC_DELAY_TIME);
}
//Genereer een stopsignaal
vervalt XGZP6859D::IIC_Stop(leegte)
{
pinModus(IIC_SDA, UITGANG);
digitaalSchrijf(IIC_SDA, LAAG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SDA, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
}
//Wacht op het ACK-signaal
//opbrengst 1 betekent mislukking
//opbrengst 0 betekent succes
byteXGZP6859D::IIC_Wacht_Ack(leegte)
{
byteucErrTime=0;
pinModus(IIC_SDA, INGANG);
digitaalSchrijf(IIC_SDA, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
terwijl(digitaalLezen(IIC_SDA)==HOOG)
{
ucErrTime++;
indien(ucErrTijd>250)
{
IIC_Stop();
opbrengst 1;
}
}
digitaalSchrijf(IIC_SCL, LAAG);
opbrengst 0;
}
//Genereer een ACK-signaal
vervalt XGZP6859D::IIC_Ack(leegte)
{
digitaalSchrijf(IIC_SCL, LAAG);
pinModus(IIC_SDA, UITGANG);
digitaalSchrijf(IIC_SDA, LAAG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, LAAG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SDA, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
}
//Genereer geen ACK-signaal
vervalt XGZP6859D::IIC_NAck(leegte)
{
digitaalSchrijf(IIC_SCL, LAAG);
pinModus(IIC_SDA, UITGANG);
digitaalSchrijf(IIC_SDA, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, LAAG);
vertragingMicroseconden(IIC_DELAY_TIME);
}
//Stuur één byte over de IIC-bus
//De geretourneerde waarde betekent antwoord van de slaaf
//1 betekent antwoord ontvangen
//0 betekent dat je geen antwoord krijgt
vervalt XGZP6859D::IIC_Send_Byte(byte txd)
{
byte t;
pinModus(IIC_SDA, UITGANG);
digitaalSchrijf(IIC_SCL, LAAG);
voor(t=0;T<8;t++)
{
indien(txd & 0x80)
digitaalSchrijf(IIC_SDA, HOOG);
anders
digitaalSchrijf(IIC_SDA, LAAG);
txd<<=1;
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, LAAG);
vertragingMicroseconden(IIC_DELAY_TIME);
}
digitaalSchrijf(IIC_SCL, LAAG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SDA, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
}
//Eén byte lezen, stuur ACK terwijl ack = 1, stuur nACK terwijl ack = 0
byteXGZP6859D::IIC_Read_Byte(verandering helaas)
{
inruilen,ontvangen=0;
pinModus(IIC_SDA, INGANG);
voor(ik=0;i<8;ik++ )
{
digitaalSchrijf(IIC_SCL, LAAG);
vertragingMicroseconden(IIC_DELAY_TIME);
digitaalSchrijf(IIC_SCL, HOOG);
vertragingMicroseconden(IIC_DELAY_TIME);
ontvangen<<=1;
indien(digitaalLezen(IIC_SDA)==HOOG)
ontvangen++;
vertragingMicroseconden(IIC_DELAY_TIME);
}
digitaalSchrijf(IIC_SDA, HOOG);
retour ontvangen;
}
//Schrijf één byte naar een opgegeven adres
vervalt XGZP6859D::Write_One_Byte(u8 adres ,u8-gegevens)
{
IIC_Start();
IIC_Send_Byte((byte)(Apparaat_adres + 0));
Serieel.afdrukken(“Apparaat_adres is “);
Serial.println(Apparaat_adres + 0, HEX);
IIC_Wacht_Ack();
IIC_Send_Byte(adres);
IIC_Wacht_Ack();
IIC_Send_Byte(gegevens);
IIC_Wacht_Ack();
IIC_Stop();
}
//Lees één byte van een opgegeven adres
byteXGZP6859D::Lees_Eén_Byte(u8 adres)
{
byte mijngegevens;
IIC_Start();
IIC_Send_Byte((byte)(Apparaat_adres + 0));
IIC_Wacht_Ack();
IIC_Send_Byte(adres);
IIC_Wacht_Ack();
IIC_Start();
IIC_Send_Byte((byte)(Apparaat_adres + 1));
IIC_Wacht_Ack();
mijndata = IIC_Read_Byte(0);
IIC_Stop();
mijngegevens retourneren;
}
vervalt XGZP6859D::XGZP6859D_get_cal() //De meetactie van XGZP6859D
{
byte i=0;
byte-verbetering[5]; //Variabelen van vijf bytes, gebruikt om de bytes op te slaan die zijn gelezen van XGZP6859D
niet-ondertekende lange drukadvertentie,temperatuur_ad; //Variabelen die worden gebruikt om de gekalibreerde druk en temperatuur op te slaan
Write_One_Byte(0x30, 0x0A); //Geef een gecombineerde conversie aan
terwijl ((Lees_Eén_Byte(0x30) & 0x08) == 0x80) //Beoordeel of het verzamelen van gegevens voltooid is
{
Serial.println(“XGZP6859D is niet gereed”);; //Wacht terwijl de gegevens nog niet gereed zijn
vertraging(1000);
}
voor(ik=0;i<5;ik++) //Lees ADC-uitvoergegevens van druk en temperatuur
bleek[i] = Lees_Eén_Byte(0x06 + i);
Serieel.afdrukken(“bleek[0…4] is 0x”);
Serieel.afdrukken(bleek[0], HEX);
Serieel.afdrukken(“, 0X”);
Serieel.afdrukken(bleek[1], HEX);
Serieel.afdrukken(“, 0X”);
Serieel.afdrukken(bleek[2], HEX);
Serieel.afdrukken(“, 0X”);
Serieel.afdrukken(bleek[3], HEX);
Serieel.afdrukken(“, 0X”);
Serial.println(bleek[4], HEX);
//Bereken de waarde van de druk, omgezet door ADC
druk_ad = ((lang niet ondertekend)((lang niet ondertekend)(bleek[0] * 65536)) + ((niet ondertekend int)(bleek[1] * 256)) + ((byte)bleek[2]));
Serieel.afdrukken(“druk_ad is “);
Serial.println(druk_advertentie);
indien (druk_advertentie > 8388608) //
{
druk = (lang)(((lang)(druk_advertentie – 16777216)) / 8192);
//Omdat de overspanning -500Pa~+500Pa is, dus k is 8192;k moet worden gewijzigd afhankelijk van de feitelijke toestand; de eenheid van druk is Pa
}
anders
{
druk = (lang)(druk_advertentie / 8192);
}
//Bereken de waarde van de temperatuur omgezet door ADC
temperatuur_ad = ((niet ondertekend int)((niet ondertekend int)(bleek[3]<<8)) + ((byte)bleek[4]));
indien (temperatuur_ad > 32768)
{
temperatuur = (vlot)(((lang)(temperatuur_ad – 65536)) / 256);
//De eenheid van temperatuur is Celsius
}
anders
{
temperatuur = (vlot)(temperatuur_ad / 256);
}
}
XGZP6859D Mijn_XGZP6859D; //Definieer een object met de naam My_XGZP6859D van de klasse XGZP6859D
ongeldige opstelling()
{
Serieel.begin(9600); //De initialisatie van de seriële poort
Mijn_XGZP6859D.IIC_Init(); //Initialiseer de pinnen van de IIC-bus van My_XGZP6859D
}
lege lus()
{
Mijn_XGZP6859D.XGZP6859D_get_cal(); //Roep de functie XGZP6859D_get_cal aan() van object My_XGZP6859D om de druk en temperatuur te berekenen
Serieel.afdrukken(Mijn_XGZP6859D.druk);
Serial.println(” vader”);
Serieel.afdrukken(Mijn_XGZP6859D.temperatuur);
Serial.println(” Celsius”);
Serial.println(“”);
vertraging(1000);
}