답변 : 아두이노 LM35 FSR
페이지 정보
작성자 master 작성일18-06-28 17:56 조회7,747회 댓글3건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-06-28 오후 5:59:59
// by Ok-Hyun Park
//
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2,3);
int lm35Pin=A0;
const int FSR_PIN=A1; // 압력센서
//
const float VCC=4.98;
const float R_DIV=3230.0;
//
int temperature,reading;
int fsrADC,yn=0,yn_1=0; // 온도센서 필터코드
unsigned long prev_time=0,current_time;
float fsrV,fsrR,force,fsrG;
//
int inPin=7; // 리드스위치
int ledPin=13;
int val=1;
//
byte data=0;
//
void setup(){
Serial.begin(9600);
BTSerial.begin(9600);
pinMode(inPin,INPUT);
pinMode(ledPin,OUTPUT);
}
//
void loop(){
val=digitalRead(inPin);
TEMP(); // LM35(온도센서)
FSR(); // MFSR-R18(압력센서)
if(BTSerial.available()){ data=BTSerial.read(); }
if(val==0){
digitalWrite(ledPin,1);
//
if(data=='q'){
BTSerial.print("s"); BTSerial.print(temperature);
BTSerial.print("\ta"); BTSerial.println(int(force/10));
}
if(data=='w'){
BTSerial.print("s"); BTSerial.print(0);
BTSerial.print("a"); BTSerial.println(0);
}
delay(250);
} else if(val==1){
digitalWrite(ledPin,0);
}
}
//
void TEMP(){
current_time=millis();
//
if((current_time-prev_time)>1000){ prev_time=current_time;
reading=analogRead(lm35Pin);
reading=analogRead(lm35Pin);
reading=analogRead(lm35Pin);
temperature=reading*500.0/1023.0;
yn=0.99*yn_1+0.01*temperature;
yn_1=yn;
}
}
//
void FSR(){
fsrADC=analogRead(FSR_PIN);
fsrV=fsrADC*VCC/1023.0;
fsrR=R_DIV*(VCC/fsrV-1.0);
fsrG=1.0/fsrR;
//
if(fsrR<=600){ force=(fsrG-0.00075)/0.00000032639; }
else{ force=fsrG/0.000000642857; }
}
이 소스로 돌려보시고
온도값이 정상인지 체크해보세요
댓글 : 3
조회수 : 7,747
카라멜님의 댓글
카라멜 작성일온도만 볼때는 제대로 나오는데, 저번에 도와주셨을때 문제처럼 압력센서가 눌리면 온도값이 바뀌네요.. ㅠㅠ
master님의 댓글
master
조금 수정했으니 다시 해보세요
카라멜님의 댓글
비공개
잘 작동됩니다!! 정말 감사합니다 ㅠㅠㅠ