BASIC4MCU | 질문게시판 | 아두이노 스톱워치 질문있습니다
페이지 정보
작성자 icecold 작성일2021-04-12 11:35 조회3,251회 댓글1건본문
안녕하세요
MS5837 압력센서를 이용해서 수심 0.01m 이상이 되면 스톱워치가 작동을 하고 다시 0으로 돌아오면 정지되면서
시리얼 모니터에 경과 시간을 알려주는 코딩을 하고 있습니다
수심측정은 제대로 되는데 스톱워치는 제대로 동작하지 않고
수심이 0으로 돌아오면 자동으로 리셋이 됐으면 하는데, 다시 0.01m 이상이 되면 시간이 이어서 동작하네요
나중에 다른 코드들도 추가를 할까 생각중이라 timer0_millis로 리셋하지 않고 사용하는 방법이 있을지 궁금합니다
미리 감사드립니다
#include <Wire.h>
#include "MS5837.h"
MS5837 sensor;
unsigned long adttime; //이전시간
unsigned long adtstop; //카운트정지시간
int adt_hour; //시
int adt_minute; //분
int adt_second; //초
float ADTdepth; // Depth값 저장
void ADT (void){
sensor.read();
float ADTdepth = sensor.depth();
if (ADTdepth>0.01)
{
adttime = millis();
adt_hour = adttime/3600000; //시
adt_minute = adttime/60000%60; //분
adt_second = adttime/1000%60; //초
}
else if (ADTdepth==0)
{
adtstop=millis()-adttime;
adttime=adtstop;
}
}
void setup()
{
Wire.begin();
Serial.begin(115200);
Serial.println("TEST");
while (!sensor.init()) {
Serial.println("Init failed!");
Serial.println("\n\n\n");
}
sensor.setFluidDensity(997); // kg/m^3 (freshwater, 1029 for seawater)
}
void loop()
{
sensor.read();
ADT();
Serial.print("/ 수심: ");
Serial.print(sensor.depth());
Serial.print(" m ");
Serial.print("동작 시간 :");
Serial.print(adt_hour);
Serial.print("h ");
Serial.print(adt_minute);
Serial.print("m ");
Serial.print(adt_second);
Serial.println("s ");
}
댓글 1
조회수 3,251master님의 댓글
master 작성일
#include <Wire.h>
#include "MS5837.h"
MS5837 sensor;
//
unsigned long t,adtstart,adtstop,adttime;
int adt_hour,adt_minute,adt_second;
float ADTdepth;
//
void ADT(void){
t=millis();
sensor.read();
float ADTdepth = sensor.depth();
if(ADTdepth>0.01){
adtstop=t;
adttime=t-adtstart;
adt_hour =adttime/3600000; //시
adt_minute=adttime/60000%60; //분
adt_second=adttime/1000%60; //초
}
else if(ADTdepth==0){ adtstart=t; }
}
//
void setup(){
Wire.begin();
Serial.begin(115200); Serial.println("TEST");
while (!sensor.init()) {
Serial.println("Init failed!"); Serial.println("\n\n\n");
}
sensor.setFluidDensity(997); // kg/m^3 (freshwater, 1029 for seawater)
}
//
void loop(){
ADT();
Serial.print("/ 수심: "); Serial.print(sensor.depth()); Serial.print(" m ");
Serial.print("동작 시간 :"); Serial.print(adt_hour); Serial.print("h ");
Serial.print(adt_minute); Serial.print("m ");
Serial.print(adt_second); Serial.println("s ");
}
이 코드로 돌려보세요