サンプルプログラムArduinoコード

#含む <stdio.h>
#含む <string.h>
#含む <inttypes.h>
#含む “Arduino.H”
#含む “XGZP6859D.h”
//IIC BUSの初期化
ボイド XGZP6859D::IIC_Init(空所)
{
ピンモード(IIC_SCL, 出力); //ピンを出力モードに設定します
ピンモード(IIC_SDA, 出力);
デジタル書き込み(IIC_SCL, 高い); //出力高レベル
デジタル書き込み(IIC_SDA, 高い);
}
//スタート信号の生成
ボイド XGZP6859D::IIC_Start(空所)
{
ピンモード(IIC_SDA, 出力);
デジタル書き込み(IIC_SDA, 高い);
遅延マイクロ秒(IIC_DELAY_TIME); //数マイクロ秒の遅延
デジタル書き込み(IIC_SCL, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SDA, 低い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 低い);
遅延マイクロ秒(IIC_DELAY_TIME);
}
//停止信号の生成
ボイド XGZP6859D::IIC_停止(空所)
{
ピンモード(IIC_SDA, 出力);
デジタル書き込み(IIC_SDA, 低い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SDA, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
}
//ACK信号を待ちます
//戻る 1 失敗を意味します
//戻る 0 成功を意味します
バイト XGZP6859D::IIC_Wait_Ack(空所)
{
バイト ucErrTime=0;
ピンモード(IIC_SDA, 入力);
デジタル書き込み(IIC_SDA, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
その間(デジタル読み取り(IIC_SDA)==高い)
{
ucErrTime++;
もし(ucErrTime>250)
{
IIC_停止();
戻る 1;
}
}
デジタル書き込み(IIC_SCL, 低い);
戻る 0;
}
//ACK信号の生成
ボイド XGZP6859D::IIC_Ack(空所)
{
デジタル書き込み(IIC_SCL, 低い);
ピンモード(IIC_SDA, 出力);
デジタル書き込み(IIC_SDA, 低い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 低い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SDA, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
}
//ACK信号を生成しない
ボイド XGZP6859D::IIC_NAck(空所)
{
デジタル書き込み(IIC_SCL, 低い);
ピンモード(IIC_SDA, 出力);
デジタル書き込み(IIC_SDA, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 低い);
遅延マイクロ秒(IIC_DELAY_TIME);
}
//IIC バス経由で 1 バイトを送信
//戻り値はスレーブからの応答を意味します
//1 答えを受け取ることを意味します
//0 応答が得られないことを意味します
ボイド XGZP6859D::IIC_Send_Byte(バイトTXD)
{
バイトt;
ピンモード(IIC_SDA, 出力);
デジタル書き込み(IIC_SCL, 低い);
のために(t=0;t<8;t++)
{
もし(txd & 0x80)
デジタル書き込み(IIC_SDA, 高い);
それ以外
デジタル書き込み(IIC_SDA, 低い);
txd<<=1;
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 低い);
遅延マイクロ秒(IIC_DELAY_TIME);
}
デジタル書き込み(IIC_SCL, 低い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SDA, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
}
//1バイト読み取り, ACK を送信しながら ACK = 1, ack 中に nACK を送信 = 0
バイト XGZP6859D::IIC_Read_Byte(残念ながら変更してください)
{
で交換する,受信=0;
ピンモード(IIC_SDA, 入力);
のために(i=0;私<8;I ++ )
{
デジタル書き込み(IIC_SCL, 低い);
遅延マイクロ秒(IIC_DELAY_TIME);
デジタル書き込み(IIC_SCL, 高い);
遅延マイクロ秒(IIC_DELAY_TIME);
受け取る<<=1;
もし(デジタル読み取り(IIC_SDA)==高い)
受信++;
遅延マイクロ秒(IIC_DELAY_TIME);
}
デジタル書き込み(IIC_SDA, 高い);
返す、受け取る;
}
//指定されたアドレスに 1 バイトを書き込みます
ボイド XGZP6859D::write_one_byte(u8アドレス ,u8データ)
{
IIC_Start();
IIC_Send_Byte((バイト)(デバイスアドレス + 0));
serial.print(“Device_Address は “);
serial.println(デバイスアドレス + 0, 16進数);
IIC_Wait_Ack();
IIC_Send_Byte(住所);
IIC_Wait_Ack();
IIC_Send_Byte(データ);
IIC_Wait_Ack();
IIC_停止();
}
//指定されたアドレスから 1 バイトを読み取ります
バイト XGZP6859D::read_one_byte(u8アドレス)
{
バイトのマイデータ;
IIC_Start();
IIC_Send_Byte((バイト)(デバイスアドレス + 0));
IIC_Wait_Ack();
IIC_Send_Byte(住所);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte((バイト)(デバイスアドレス + 1));
IIC_Wait_Ack();
mydata = IIC_Read_Byte(0);
IIC_停止();
mydataを返します;
}
ボイド XGZP6859D::XGZP6859D_get_cal() //XGZP6859Dの測定動作
{
バイト i=0;
バイトバフ[5]; //5バイト変数, XGZP6859D から読み取られたバイトを保存するために使用されます
符号なしの長いプレッシャー_広告,温度_広告; //校正された圧力と温度を保存するために使用される変数
write_one_byte(0X30, 0x0a); //組み合わせたコンバージョンを指定します
その間 ((read_one_byte(0X30) & 0x08) == 0x80) //データ収集が終了したかどうかを判断します
{
serial.println(“XGZP6859D は準備ができていません”);; //データの準備ができていない間待ちます
遅れ(1000);
}
のために(i=0;私<5;I ++) //ADC出力の圧力と温度のデータを読み取る
バフ[私] = Read_One_Byte(0x06 + 私);
serial.print(“バフ[0…4] 0xです”);
serial.print(バフ[0], 16進数);
serial.print(“, 0x”);
serial.print(バフ[1], 16進数);
serial.print(“, 0x”);
serial.print(バフ[2], 16進数);
serial.print(“, 0x”);
serial.print(バフ[3], 16進数);
serial.print(“, 0x”);
serial.println(バフ[4], 16進数);
//ADCで変換した圧力値を演算
圧力_広告 = ((符号なしロング)((符号なしロング)(バフ[0] * 65536)) + ((符号なし整数)(バフ[1] * 256)) + ((バイト)バフ[2]));
serial.print(“pressure_ad は “);
serial.println(圧力_広告);
もし (圧力_広告 > 8388608) //
{
圧力 = (長さ)(((長さ)(圧力_広告 – 16777216)) / 8192);
//スパンは-500Pa~+500Paなので, だからkは 8192;kは実際の状態に応じて変更する必要があります; 圧力の単位はPaです
}
それ以外
{
圧力 = (長さ)(圧力_広告 / 8192);
}
//ADCで変換した温度値を計算
温度_広告 = ((符号なし整数)((符号なし整数)(バフ[3]<<8)) + ((バイト)バフ[4]));
もし (温度_広告 > 32768)
{
温度 = (フロート)(((長さ)(温度_広告 – 65536)) / 256);
//温度の単位は摂氏です
}
それ以外
{
温度 = (フロート)(温度_広告 / 256);
}
}
XGZP6859D My_XGZP6859D; //クラス XGZP6859D の My_XGZP6859D という名前のオブジェクトを定義します。
セットアップのボイド()
{
serial.begin(9600); //シリアルポートの初期化
My_XGZP6859D.IIC_Init(); //My_XGZP6859DのIICバスのピンを初期化する
}
ボイドループ()
{
My_XGZP6859D.XGZP6859D_get_cal(); //XGZP6859D_get_cal 関数を呼び出します() オブジェクト My_XGZP6859D を使用して圧力と温度を計算します
serial.print(My_XGZP6859D.圧力);
serial.println(” パ”);
serial.print(My_XGZP6859D.温度);
serial.println(” 摂氏”);
serial.println(“”);
遅れ(1000);
}