안녕하세요!
아두이노로 프로그램을 하나 계획 중인데요...
적외선 센서를 사용하여 온도를 감지하고, 그 온도가 올라가면 스피커를 통해 소리가 작아지고,
온도가 내려가면 스피커를 통해 소리가 커지는 프로그램을 만들고 싶은데요,
이게 아두이노 상으로 구성이 가능한가요???
현재
일정 온도 이상 되었을 때에 스피커에 소리가 나긴 하지만, 그 소리를 아직 조절을 못하고 있습니다 ㅠ
감사합니다
#include <i2cmaster.h>
int speakerPin = 8;
int LED = 4;
unsigned long int reg;
void setup(){
Serial.begin(9600);
Serial.println("Setup...");
pinMode(LED, OUTPUT);
pinMode (speakerPin, OUTPUT);
reg = 0x55aa55aaL;
i2c_init();
PORTC = (1 << PORTC4) | (1 << PORTC5);
}
void loop(){
int dev = 0x5A<<1;
int data_low = 0;
int data_high = 0;
int pec = 0;
i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x07);
i2c_rep_start(dev+I2C_READ);
data_low = i2c_readAck();
data_high = i2c_readAck();
pec = i2c_readNak();
i2c_stop();
double tempFactor = 0.02;
double tempData = 0x0000;
int frac;
tempData = (double)(((data_high & 0x007F) << 8) + data_low);
tempData = (tempData * tempFactor)-0.01;
float celcius = tempData - 273.15;
if (celcius > 35){
digitalWrite(LED, HIGH);
int sensorValue = analogRead(A0);
for(int thresholdvalue=0; sensorValue>thresholdvalue; thresholdvalue--){
unsigned long int newr;
unsigned char lobit;
unsigned char b31, b29, b25, b24;
b31 = (reg & (1L << 31)) >> 31;
b29 = (reg & (1L << 29)) >> 29;
b25 = (reg & (1L << 25)) >> 25;
b24 = (reg & (1L << 24)) >> 24;
lobit = b31 ^ b29 ^ b25 ^ b24;
newr = (reg << 1) | lobit;
reg = newr;
digitalWrite (speakerPin, reg & 1);
delayMicroseconds(5);
}
}else{
digitalWrite(LED, LOW);
delay(100);
}
Serial.println(celcius);
Serial.println();
}
|