کد:
// ارتباط با استفاده از سنسور SPI, قراردادن کتابخانه:
#include <SPI.h>
//آدرس های رجیستر حافظه سنسور:
const int PRESSURE = 0x1F; //3 most significant bits of pressure
const int PRESSURE_LSB = 0x20; //16 least significant bits of pressure
const int TEMPERATURE = 0x21; //16 bit temperature reading
const byte READ = 0b11111100; // SCP1000's read command
const byte WRITE = 0b00000010; // SCP1000's write command
// پین های استفاده شده برای ارتباط با سنسور
// کنترل شده است SPI چیزهای دیگر که نیاز دارید توسط کتابخانه
const int dataReadyPin = 6;
const int chipSelectPin = 7;
void setup() {
Serial.begin(9600);
// SPI شروع کتابخانه :
SPI.begin();
// data ready و chip select دادن مقدار اولیه به پین های :
pinMode(dataReadyPin, INPUT);
pinMode(chipSelectPin, OUTPUT);
//SCP1000 پیکربندبه صورت کم نویز:
writeRegister(0x02, 0x2D);
writeRegister(0x01, 0x03);
writeRegister(0x03, 0x02);
// دادن زمان به سنسور برای راه ندازی:
delay(100);
}
void loop() {
//انتخاب مد رزولیشن بالا
writeRegister(0x03, 0x0A);
// نشد هیچ کاری انجام ندهید High data ready تا وقتی پین، :
if (digitalRead(dataReadyPin) == HIGH) {
//خواندن دیتا درجه حرارت
int tempData = readRegister(0x21, 2);
// تبدیل درجه حرارت به سیلیسیوس و نمایش آن:
float realTemp = (float)tempData / 20.0;
Serial.print("Temp[C]=");
Serial.print(realTemp);
//خواندن سه بیت با ارزش دیتا فشار:
byte pressure_data_high = readRegister(0x1F, 1);
pressure_data_high &= 0b00000111; //شما فقط به بیت های 2 تا 0 نیاز دارید
//خواندن 16 بیت کم ارزش دیتا فشار:
unsigned int pressure_data_low = readRegister(0x20, 2);
//ترکیب دو بخش داخل یک شماره 19-بیت :
long pressure = ((pressure_data_high << 16) | pressure_data_low)/4;
// نمایش درجه حرارت:
Serial.println("\tPressure [Pa]=" + String(pressure));
}
}
//SCP1000 خواندن یا نوشتن روی رجیستر از :
unsigned int readRegister(byte thisRegister, int bytesToRead ) {
byte inByte = 0; // SPI بایت دریافتی از
unsigned int result = 0; // برگرداندن نتیجه
Serial.print(thisRegister, BIN);
Serial.print("\t");
// SCP1000 ،منتظر 6 بیت برای نام رجیستر بیت. شیفت بیت های باقیمانده با دو بیت
thisRegister = thisRegister << 2;
// حالا ترکیب آدرس و دستور داخل یک بایت
byte dataToSend = thisRegister & READ;
Serial.println(thisRegister, BIN);
// برای انتخاب دستگاه low روی chip select قرارگیری :
digitalWrite(chipSelectPin, LOW);
// فرستاندن رجیستر دستگاهی که شما می خواهید بخوانید:
SPI.transfer(dataToSend);
// فرستادن یک مقدار از 0 برای خواندن اولین بایت برگشت داده شده:
result = SPI.transfer(0x00);
// کاهش شماره بایت های باقیمانده برای خواندن:
bytesToRead--;
// اگر هنوز بایت دیگری برای خواندن دارید:
if (bytesToRead > 0) {
// شیفت دادن اولین بایت باقیمانده برای خواندن دومین بایت:
result = result << 8;
inByte = SPI.transfer(0x00);
// فقط ترکیب بایت با قبلی دریافت شده:
result = result | inByte;
//کاهش شماره بایت های باقیمانده برای خواندن:
bytesToRead--;
}
// chip select برای انتخاب high قرارگیری روی:
digitalWrite(chipSelectPin, HIGH);
// برگرداندن نتیجه:
return(result);
}
// SCP1000 فرستادن دستور نوشتن به
void writeRegister(byte thisRegister, byte thisValue) {
// منتظر 6 بیت برای آدرس رجیستر بایت. شیفت بیت های باقیمانده با دو بیت SCP1000 ،
thisRegister = thisRegister << 2;
//ترکیب آدرس رجیستر و دستور داخل یک بایت:
byte dataToSend = thisRegister | WRITE;
// برای انتخاب دستگاه high روی chip select قرارگیری :
digitalWrite(chipSelectPin, LOW);
SPI.transfer(dataToSend); //Send register location
SPI.transfer(thisValue); /فرستادن مفدار برای ثبت در رجیستر
// chip select برای انتخاب دوباره high قرارگیری روی:
digitalWrite(chipSelectPin, HIGH);
}
لینک سایت: