उदाहरण प्रोग्राम Arduino कोड

#शामिल करना <stdio.h>
#शामिल करना <string.h>
#शामिल करना <inttypes.h>
#शामिल करना “Arduino.h”
#शामिल करना “XGZP6859D.h
//The initialiation of IIC BUS
void XGZP6859D::IIC_Init(खालीपन)
{
pinMode(IIC_SCL, OUTPUT); //Set the pin to output mode
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SCL, HIGH); //Putout high level
digitalWrite(IIC_SDA, HIGH);
}
//Generate start signal
void XGZP6859D::IIC_Start(खालीपन)
{
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SDA, HIGH);
delayMicroseconds(IIC_DELAY_TIME); //Delay several microseconds
digitalWrite(IIC_SCL, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, LOW);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, LOW);
delayMicroseconds(IIC_DELAY_TIME);
}
//Generate stop signal
void XGZP6859D::IIC_Stop(खालीपन)
{
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SDA, LOW);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
}
//Wait for the ACK signal
//वापस करना 1 means failure
//वापस करना 0 means success
byte XGZP6859D::IIC_Wait_Ack(खालीपन)
{
byte ucErrTime=0;
pinMode(IIC_SDA, INPUT);
digitalWrite(IIC_SDA, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
जबकि(digitalRead(IIC_SDA)==HIGH)
{
ucErrTime++;
अगर(ucErrTime>250)
{
IIC_Stop();
वापस करना 1;
}
}
digitalWrite(IIC_SCL, LOW);
वापस करना 0;
}
//Generate ACK signal
void XGZP6859D::IIC_Ack(खालीपन)
{
digitalWrite(IIC_SCL, LOW);
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SDA, LOW);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, LOW);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
}
//Not generate ACK signal
void XGZP6859D::IIC_NAck(खालीपन)
{
digitalWrite(IIC_SCL, LOW);
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SDA, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, LOW);
delayMicroseconds(IIC_DELAY_TIME);
}
//Send one byte across IIC bus
//The return value means answer from the slave
//1 means receiving answer
//0 means not receiving answer
void XGZP6859D::IIC_Send_Byte(byte txd)
{
byte t;
pinMode(IIC_SDA, OUTPUT);
digitalWrite(IIC_SCL, LOW);
के लिए(t=0;टी<8;t++)
{
अगर(txd & 0x80)
digitalWrite(IIC_SDA, HIGH);
अन्य
digitalWrite(IIC_SDA, LOW);
txd<<=1;
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, LOW);
delayMicroseconds(IIC_DELAY_TIME);
}
digitalWrite(IIC_SCL, LOW);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SDA, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
}
//Read one byte, send ACK while ack = 1, send nACK while ack = 0
byte XGZP6859D::IIC_Read_Byte(byte ack)
{
byte i,receive=0;
pinMode(IIC_SDA, INPUT);
के लिए(i=0;मैं<8;मैं++ )
{
digitalWrite(IIC_SCL, LOW);
delayMicroseconds(IIC_DELAY_TIME);
digitalWrite(IIC_SCL, HIGH);
delayMicroseconds(IIC_DELAY_TIME);
receive<<=1;
अगर(digitalRead(IIC_SDA)==HIGH)
receive++;
delayMicroseconds(IIC_DELAY_TIME);
}
digitalWrite(IIC_SDA, HIGH);
return receive;
}
//Write one byte to a specified address
void XGZP6859D::लिखें_एक_बाइट(u8 address ,u8 data)
{
IIC_Start();
IIC_Send_Byte((बाइट)(Device_Address + 0));
सीरियल.प्रिंट(“Device_Address is “);
सीरियल.प्रिंटएलएन(Device_Address + 0, HEX);
IIC_Wait_Ack();
IIC_Send_Byte(पता);
IIC_Wait_Ack();
IIC_Send_Byte(data);
IIC_Wait_Ack();
IIC_Stop();
}
//Read one byte from a specified address
byte XGZP6859D::पढ़ें_एक_बाइट(u8 address)
{
byte mydata;
IIC_Start();
IIC_Send_Byte((बाइट)(Device_Address + 0));
IIC_Wait_Ack();
IIC_Send_Byte(पता);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte((बाइट)(Device_Address + 1));
IIC_Wait_Ack();
mydata = IIC_Read_Byte(0);
IIC_Stop();
मेराडेटा लौटाएं;
}
void XGZP6859D::XGZP6859D_get_cal() //The measuring action of XGZP6859D
{
byte i=0;
byte buff[5]; //Five byte variables, used to save the bytes read from XGZP6859D
unsigned long pressure_ad,temperature_ad; //Variables used to save the calibarted pressure and temperature
लिखें_एक_बाइट(0x30, 0x0A); //Indicate a combined conversion
जबकि ((पढ़ें_एक_बाइट(0x30) & 0x08) == 0x80) //निर्णय करें कि क्या डेटा संग्रहण समाप्त हो गया है
{
सीरियल.प्रिंटएलएन(“XGZP6859D is not ready”);; //Wait while the data is not ready
देरी(1000);
}
के लिए(i=0;मैं<5;मैं++) //Read ADC output Data of Pressure and temperature
buff[मैं] = Read_One_Byte(0x06 + मैं);
सीरियल.प्रिंट(“buff[0…4] is 0x”);
सीरियल.प्रिंट(buff[0], HEX);
सीरियल.प्रिंट(“, 0एक्स”);
सीरियल.प्रिंट(buff[1], HEX);
सीरियल.प्रिंट(“, 0एक्स”);
सीरियल.प्रिंट(buff[2], HEX);
सीरियल.प्रिंट(“, 0एक्स”);
सीरियल.प्रिंट(buff[3], HEX);
सीरियल.प्रिंट(“, 0एक्स”);
सीरियल.प्रिंटएलएन(buff[4], HEX);
//Compute the value of pressure converted by ADC
pressure_ad = ((unsigned long)((unsigned long)(buff[0] * 65536)) + ((unsigned int)(buff[1] * 256)) + ((बाइट)buff[2]));
सीरियल.प्रिंट(“pressure_ad is “);
सीरियल.प्रिंटएलएन(pressure_ad);
अगर (pressure_ad > 8388608) //
{
pressure = (long)(((long)(pressure_ad – 16777216)) / 8192);
//Because the span is -500Pa~+500Pa, so k is 8192;k should be changed according to the actuan condition; the unit of pressure is Pa
}
अन्य
{
pressure = (long)(pressure_ad / 8192);
}
//Compute the value of temperature converted by ADC
temperature_ad = ((unsigned int)((unsigned int)(buff[3]<<8)) + ((बाइट)buff[4]));
अगर (temperature_ad > 32768)
{
temperature = (तैरना)(((long)(temperature_ad – 65536)) / 256);
//The unit of temperature is Centigrade
}
अन्य
{
temperature = (तैरना)(temperature_ad / 256);
}
}
XGZP6859D My_XGZP6859D; //Define a object named My_XGZP6859D of the class XGZP6859D
शून्य सेटअप()
{
सीरियल.शुरू(9600); //The initialization of Serial port
My_XGZP6859D.IIC_Init(); //Initialize the pins of IIC bus of My_XGZP6859D
}
शून्य पाश()
{
My_XGZP6859D.XGZP6859D_get_cal(); //Call the function XGZP6859D_get_cal() of object My_XGZP6859D to calculate the pressure and temperature
सीरियल.प्रिंट(My_XGZP6859D.pressure);
सीरियल.प्रिंटएलएन(” देहात”);
सीरियल.प्रिंट(My_XGZP6859D.temperature);
सीरियल.प्रिंटएलएन(” Centigrade”);
सीरियल.प्रिंटएलएन(“”);
देरी(1000);
}