i2c_DSM501A_particle_sensor_20240330151128.ino
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[pico_wiki_driver_03.py]]
#code(C){{{
/**********
DSM501A とarduinoの接続
#3 vcc 5v
#4 vout1 pin8
#5 GND GND
**********/
#include <Wire.h>
int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
unsigned int icon=0;
#define SLAVE_ADDRESS 0x15
void setup() {
Serial.begin(9600);
pinMode(8,INPUT);
starttime = millis();
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);
//Wire.setClock(400000); //400Khz i2c clock
// define callbacks for i2c communication
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
}
void loop() {
duration = pulseIn(pin, LOW);
lowpulseoccupancy = lowpulseoccupancy+duration;
if ((millis()-starttime) > sampletime_ms)
{
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // I...
concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520...
icon=concentration;
//Serial.print(lowpulseoccupancy);
// Serial.print(",");
Serial.print(ratio);
Serial.print(",");
Serial.print(concentration);
Serial.print(" _ ");
Serial.println(icon);
lowpulseoccupancy = 0;
starttime = millis();
}
}
byte cmd[5];
int writeFlag;
byte wx[5];
void receiveEvent(int n) {
// Serial.print("receiveEvent, n=");
// Serial.print(n);
// Serial.print(",cmd=");
if(n>1) writeFlag=1; else writeFlag=0;
for(int i=0; i<n; i++){
if(Wire.available()){
cmd[i]=Wire.read();
// Serial.print(cmd[i],HEX);
}
}
// Serial.println();
if(!writeFlag) return;
if(cmd[0]==0x03){ // if read, read MSB of the sample ra...
// if write, set MSB of the sa...
} else if(cmd[0]==0x04) { // if read, read LSB of the s...
// if write, set LSB of the s...
}
}
void requestEvent(){
byte w;
// Serial.print("requestEvent, cmd=");
// Serial.println(cmd[0],HEX);
if(writeFlag) {
// Serial.println("w, return.");
return;
}
else{
// Serial.println("r, ...");
}
if(cmd[0]==0x00) { // if read, read currentActivity
w= (icon >>8) & 0xff;
Wire.write(w);
// Serial.print("current=");
// Serial.println(w);
} else if(cmd[0]==0x01){ // if read, read MSB of the ac...
unsigned int wi=concentration;
wx[1]=wi & 0xff; wi=wi>>8;
wx[0]=wi & 0xff;
w=wx[0];
Wire.write(w);
// Serial.print("activity=");
// Serial.print(activity);
// Serial.print(", activity[0]=");
// Serial.println(wx[0]);
} else if(cmd[0]==0x02) { // if read, read LSB of the a...
unsigned int wi=concentration;
wx[1]=wi & 0xff; wi=wi>>8;
wx[0]=wi & 0xff;
w=wx[1];
Wire.write(w);
// Serial.print("activity=");
// Serial.print(activity);
// Serial.print(", activity[1]=");
// Serial.println(wx[1]);
} else if(cmd[0]==0x03){ // if read, read MSB of the sa...
unsigned int wi=concentration;
wx[3]=wi & 0xff; wi=wi>>8;
wx[2]=wi & 0xff; wi=wi>>8;
wx[1]=wi & 0xff; wi=wi>>8;
wx[0]=wi & 0xff;
w=wx[2];
Wire.write(w);
// Serial.print("sampleRate_ms=");
// Serial.print(sampleRate_ms);
// Serial.print(", sampleRate_ms[2]=");
// Serial.println(wx[2]);
} else if(cmd[0]==0x04) { // if read, read LSB of the s...
unsigned int wi=concentration;
wx[3]=wi & 0xff; wi=wi>>8;
wx[2]=wi & 0xff; wi=wi>>8;
wx[1]=wi & 0xff; wi=wi>>8;
wx[0]=wi & 0xff;
w=wx[3];
Wire.write(w);
// Serial.print("sampleRate_ms=");
// Serial.print(sampleRate_ms);
// Serial.print(", sampleRate_ms[3]=");
// Serial.println(wx[3]);
}
}
}}}
終了行:
[[pico_wiki_driver_03.py]]
#code(C){{{
/**********
DSM501A とarduinoの接続
#3 vcc 5v
#4 vout1 pin8
#5 GND GND
**********/
#include <Wire.h>
int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
unsigned int icon=0;
#define SLAVE_ADDRESS 0x15
void setup() {
Serial.begin(9600);
pinMode(8,INPUT);
starttime = millis();
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);
//Wire.setClock(400000); //400Khz i2c clock
// define callbacks for i2c communication
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
}
void loop() {
duration = pulseIn(pin, LOW);
lowpulseoccupancy = lowpulseoccupancy+duration;
if ((millis()-starttime) > sampletime_ms)
{
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // I...
concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520...
icon=concentration;
//Serial.print(lowpulseoccupancy);
// Serial.print(",");
Serial.print(ratio);
Serial.print(",");
Serial.print(concentration);
Serial.print(" _ ");
Serial.println(icon);
lowpulseoccupancy = 0;
starttime = millis();
}
}
byte cmd[5];
int writeFlag;
byte wx[5];
void receiveEvent(int n) {
// Serial.print("receiveEvent, n=");
// Serial.print(n);
// Serial.print(",cmd=");
if(n>1) writeFlag=1; else writeFlag=0;
for(int i=0; i<n; i++){
if(Wire.available()){
cmd[i]=Wire.read();
// Serial.print(cmd[i],HEX);
}
}
// Serial.println();
if(!writeFlag) return;
if(cmd[0]==0x03){ // if read, read MSB of the sample ra...
// if write, set MSB of the sa...
} else if(cmd[0]==0x04) { // if read, read LSB of the s...
// if write, set LSB of the s...
}
}
void requestEvent(){
byte w;
// Serial.print("requestEvent, cmd=");
// Serial.println(cmd[0],HEX);
if(writeFlag) {
// Serial.println("w, return.");
return;
}
else{
// Serial.println("r, ...");
}
if(cmd[0]==0x00) { // if read, read currentActivity
w= (icon >>8) & 0xff;
Wire.write(w);
// Serial.print("current=");
// Serial.println(w);
} else if(cmd[0]==0x01){ // if read, read MSB of the ac...
unsigned int wi=concentration;
wx[1]=wi & 0xff; wi=wi>>8;
wx[0]=wi & 0xff;
w=wx[0];
Wire.write(w);
// Serial.print("activity=");
// Serial.print(activity);
// Serial.print(", activity[0]=");
// Serial.println(wx[0]);
} else if(cmd[0]==0x02) { // if read, read LSB of the a...
unsigned int wi=concentration;
wx[1]=wi & 0xff; wi=wi>>8;
wx[0]=wi & 0xff;
w=wx[1];
Wire.write(w);
// Serial.print("activity=");
// Serial.print(activity);
// Serial.print(", activity[1]=");
// Serial.println(wx[1]);
} else if(cmd[0]==0x03){ // if read, read MSB of the sa...
unsigned int wi=concentration;
wx[3]=wi & 0xff; wi=wi>>8;
wx[2]=wi & 0xff; wi=wi>>8;
wx[1]=wi & 0xff; wi=wi>>8;
wx[0]=wi & 0xff;
w=wx[2];
Wire.write(w);
// Serial.print("sampleRate_ms=");
// Serial.print(sampleRate_ms);
// Serial.print(", sampleRate_ms[2]=");
// Serial.println(wx[2]);
} else if(cmd[0]==0x04) { // if read, read LSB of the s...
unsigned int wi=concentration;
wx[3]=wi & 0xff; wi=wi>>8;
wx[2]=wi & 0xff; wi=wi>>8;
wx[1]=wi & 0xff; wi=wi>>8;
wx[0]=wi & 0xff;
w=wx[3];
Wire.write(w);
// Serial.print("sampleRate_ms=");
// Serial.print(sampleRate_ms);
// Serial.print(", sampleRate_ms[3]=");
// Serial.println(wx[3]);
}
}
}}}
ページ名: