Beispielprogramm Arduino Code

#enthalten <stdio.h>
#enthalten <string.h>
#enthalten <inttypes.h>
#enthalten “Arduino.h”
#enthalten “XGZP6859D.h”
//Die Initialisierung von IIC BUS
ungültig XGZP6859D::IIC_Init(Leere)
{
pinMode(IIC_SCL, AUSGABE); //Stellen Sie den Pin auf den Ausgabemodus ein
pinMode(IIC_SDA, AUSGABE);
digitalWrite(IIC_SCL, HOCH); //Ausgabe auf hohem Niveau
digitalWrite(IIC_SDA, HOCH);
}
//Startsignal generieren
ungültig XGZP6859D::IIC_Start(Leere)
{
pinMode(IIC_SDA, AUSGABE);
digitalWrite(IIC_SDA, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME); //Verzögerung um mehrere Mikrosekunden
digitalWrite(IIC_SCL, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, NIEDRIG);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, NIEDRIG);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
}
//Stoppsignal erzeugen
ungültig XGZP6859D::IIC_Stop(Leere)
{
pinMode(IIC_SDA, AUSGABE);
digitalWrite(IIC_SDA, NIEDRIG);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
}
//Warten Sie auf das ACK-Signal
//zurückkehren 1 bedeutet Scheitern
//zurückkehren 0 bedeutet Erfolg
Byte XGZP6859D::IIC_Wait_Ack(Leere)
{
Byte ucErrTime=0;
pinMode(IIC_SDA, EINGANG);
digitalWrite(IIC_SDA, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
während(digitalRead(IIC_SDA)==HIGH)
{
ucErrTime++;
Wenn(ucErrTime>250)
{
IIC_Stop();
zurückkehren 1;
}
}
digitalWrite(IIC_SCL, NIEDRIG);
zurückkehren 0;
}
//Erzeugen Sie ein ACK-Signal
ungültig XGZP6859D::IIC_Ack(Leere)
{
digitalWrite(IIC_SCL, NIEDRIG);
pinMode(IIC_SDA, AUSGABE);
digitalWrite(IIC_SDA, NIEDRIG);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, NIEDRIG);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
}
//Es wird kein ACK-Signal generiert
ungültig XGZP6859D::IIC_NAck(Leere)
{
digitalWrite(IIC_SCL, NIEDRIG);
pinMode(IIC_SDA, AUSGABE);
digitalWrite(IIC_SDA, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, NIEDRIG);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
}
//Senden Sie ein Byte über den IIC-Bus
//Der Rückgabewert bedeutet Antwort vom Slave
//1 bedeutet, Antwort zu erhalten
//0 bedeutet, keine Antwort zu erhalten
ungültig XGZP6859D::IIC_Send_Byte(Byte txd)
{
Byte t;
pinMode(IIC_SDA, AUSGABE);
digitalWrite(IIC_SCL, NIEDRIG);
für(t=0;T<8;t++)
{
Wenn(txd & 0x80)
digitalWrite(IIC_SDA, HOCH);
anders
digitalWrite(IIC_SDA, NIEDRIG);
txd<<=1;
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, NIEDRIG);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
}
digitalWrite(IIC_SCL, NIEDRIG);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
}
//Ein Byte lesen, ACK senden, während ack = 1, sende nACK während ack = 0
Byte XGZP6859D::IIC_Read_Byte(leider ändern)
{
eintauschen,empfangen = 0;
pinMode(IIC_SDA, EINGANG);
für(ich=0;ich<8;i++ )
{
digitalWrite(IIC_SCL, NIEDRIG);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HOCH);
VerzögerungMikrosekunden(IIC_DELAY_TIME);
erhalten<<=1;
Wenn(digitalRead(IIC_SDA)==HIGH)
empfangen++;
VerzögerungMikrosekunden(IIC_DELAY_TIME);
}
digitalWrite(IIC_SDA, HOCH);
zurückerhalten;
}
//Schreiben Sie ein Byte an eine angegebene Adresse
ungültig XGZP6859D::Write_One_Byte(u8-Adresse ,u8-Daten)
{
IIC_Start();
IIC_Send_Byte((Byte)(Geräteadresse + 0));
Seriendruck(“Device_Address ist “);
Serial.println(Geräteadresse + 0, VERHEXEN);
IIC_Wait_Ack();
IIC_Send_Byte(Adresse);
IIC_Wait_Ack();
IIC_Send_Byte(Daten);
IIC_Wait_Ack();
IIC_Stop();
}
//Ein Byte von einer angegebenen Adresse lesen
Byte XGZP6859D::Read_One_Byte(u8-Adresse)
{
Byte mydata;
IIC_Start();
IIC_Send_Byte((Byte)(Geräteadresse + 0));
IIC_Wait_Ack();
IIC_Send_Byte(Adresse);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte((Byte)(Geräteadresse + 1));
IIC_Wait_Ack();
mydata = IIC_Read_Byte(0);
IIC_Stop();
meine Daten zurückgeben;
}
ungültig XGZP6859D::XGZP6859D_get_cal() //Die Messfunktion von XGZP6859D
{
Byte i=0;
Byte-Buff[5]; //Fünf-Byte-Variablen, Wird zum Speichern der von XGZP6859D gelesenen Bytes verwendet
unsignierte lange Druckanzeige,Temperaturanzeige; //Variablen zum Speichern des kalibrierten Drucks und der kalibrierten Temperatur
Write_One_Byte(0x30, 0x0A); //Geben Sie eine kombinierte Konvertierung an
während ((Read_One_Byte(0x30) & 0x08) == 0x80) //Beurteilen Sie, ob die Datenerfassung beendet ist
{
Serial.println(“XGZP6859D ist nicht bereit”);; //Warten Sie, während die Daten noch nicht bereit sind
Verzögerung(1000);
}
für(ich=0;ich<5;i++) //Lesen Sie die ADC-Ausgabedaten von Druck und Temperatur
polieren[ich] = Read_One_Byte(0x06 + ich);
Seriendruck(“polieren[0…4] ist 0x”);
Seriendruck(polieren[0], VERHEXEN);
Seriendruck(“, 0X”);
Seriendruck(polieren[1], VERHEXEN);
Seriendruck(“, 0X”);
Seriendruck(polieren[2], VERHEXEN);
Seriendruck(“, 0X”);
Seriendruck(polieren[3], VERHEXEN);
Seriendruck(“, 0X”);
Serial.println(polieren[4], VERHEXEN);
//Berechnen Sie den vom ADC umgewandelten Druckwert
druck_ad = ((unsigniert lang)((unsigniert lang)(polieren[0] * 65536)) + ((unsigned int)(polieren[1] * 256)) + ((Byte)polieren[2]));
Seriendruck(“Pressure_ad ist “);
Serial.println(Druck_Anzeige);
Wenn (Druck_Anzeige > 8388608) //
{
Druck = (lang)(((lang)(Druck_Anzeige – 16777216)) / 8192);
//Weil die Spanne -500Pa~+500Pa beträgt, also ist k 8192;k sollte entsprechend der aktuellen Bedingung geändert werden; Die Druckeinheit ist Pa
}
anders
{
Druck = (lang)(Druck_Anzeige / 8192);
}
//Berechnen Sie den vom ADC umgewandelten Temperaturwert
Temperature_ad = ((unsigned int)((unsigned int)(polieren[3]<<8)) + ((Byte)polieren[4]));
Wenn (Temperaturanzeige > 32768)
{
Temperatur = (schweben)(((lang)(Temperaturanzeige – 65536)) / 256);
//Die Einheit der Temperatur ist Celsius
}
anders
{
Temperatur = (schweben)(Temperaturanzeige / 256);
}
}
XGZP6859D My_XGZP6859D; //Definieren Sie ein Objekt mit dem Namen My_XGZP6859D der Klasse XGZP6859D
ungültiges Setup()
{
Serial.begin(9600); //Die Initialisierung der seriellen Schnittstelle
My_XGZP6859D.IIC_Init(); //Initialisieren Sie die Pins des IIC-Busses von My_XGZP6859D
}
Leere Schleife()
{
My_XGZP6859D.XGZP6859D_get_cal(); //Rufen Sie die Funktion XGZP6859D_get_cal auf() des Objekts My_XGZP6859D zur Berechnung von Druck und Temperatur
Seriendruck(My_XGZP6859D.Druck);
Serial.println(” Pa”);
Seriendruck(My_XGZP6859D.temperature);
Serial.println(” Celsius”);
Serial.println(“”);
Verzögerung(1000);
}