commit
40c2b96e44
6 changed files with 188 additions and 0 deletions
-
6README.md
-
27project/flag.h
-
80project/project.ino
-
31project/pulse.h
-
22project/steam.h
-
22project/timer.h
@ -0,0 +1,6 @@ |
|||
<h1 align="center">기업연계 프로젝트2 팀명:소도기</h1> |
|||
<h3 align="center">15조 프로젝트 소스코드</h3> |
|||
|
|||
|
|||
<h3 align="left">Languages and Tools:</h3> |
|||
<p align="left"> <a href="https://www.arduino.cc/" target="_blank"> <img src="https://cdn.worldvectorlogo.com/logos/arduino-1.svg" alt="arduino" width="40" height="40"/> </a> <a href="https://www.w3schools.com/cpp/" target="_blank"> <img src="https://raw.githubusercontent.com/devicons/devicon/master/icons/cplusplus/cplusplus-original.svg" alt="cplusplus" width="40" height="40"/> </a> </p> |
|||
@ -0,0 +1,27 @@ |
|||
#ifndef __FLAG_H_ |
|||
#define __FLAG_H_ |
|||
|
|||
enum Index { |
|||
PulseCatch = 0, |
|||
TimerOn, |
|||
SteamOn, |
|||
}; |
|||
|
|||
class Flag { |
|||
private: |
|||
bool *flag; |
|||
public: |
|||
Flag(){ |
|||
flag = new bool[2]; |
|||
for(int i =0;i< 3;i++) |
|||
flag[i] = false; |
|||
} |
|||
inline void Set(Index index,bool val){ |
|||
flag[static_cast<int>(PulseCatch)] = val; |
|||
} |
|||
inline bool Get(Index index) { |
|||
return flag[static_cast<int>(index)]; |
|||
} |
|||
}; |
|||
|
|||
#endif |
|||
@ -0,0 +1,80 @@ |
|||
#include "pulse.h"
|
|||
#include "steam.h"
|
|||
//#include "flag.h"
|
|||
//#include "timer.h"
|
|||
//#define __DEBUG
|
|||
|
|||
const int trgiPin = 10; |
|||
const int echoPin = 11; |
|||
const int steamOnOffPin = 8; |
|||
|
|||
Pulse *pulse; |
|||
Steam *steam; |
|||
//Flag *flag;
|
|||
//Timer *timer;
|
|||
|
|||
void setup() |
|||
{ |
|||
|
|||
#ifdef __DEBUG
|
|||
Serial.begin(9600); // 시리얼 모니터를 사용하기 위해 보드레이트를 9600으로 설정합니다.
|
|||
#endif
|
|||
|
|||
pulse = new Pulse(trgiPin,echoPin); |
|||
steam = new Steam(steamOnOffPin); |
|||
//flag = new Flag();
|
|||
//timer = new Timer();
|
|||
} |
|||
|
|||
void loop() |
|||
{ |
|||
controll(); |
|||
update(); |
|||
|
|||
} |
|||
|
|||
|
|||
long distance; |
|||
void controll() { |
|||
pulse->Trig(); |
|||
long duration = pulse->Echo(); |
|||
distance = duration * 17 / 1000; // duration을 연산하여 센싱한 거리값을 distance에 저장합니다.
|
|||
#ifdef __DEBUG
|
|||
if (distance >= 200 || distance <= 0) // 거리가 200cm가 넘거나 0보다 작으면
|
|||
{ |
|||
Serial.println("거리를 측정할 수 없음"); // 에러를 출력합니다.
|
|||
} |
|||
else // 거리가 200cm가 넘지 않거나 0보다 작지 않으면
|
|||
{ |
|||
Serial.print(distance); // distance를 시리얼 모니터에 출력합니다.
|
|||
Serial.println(" cm"); // cm를 출력하고 줄을 넘깁니다.
|
|||
// distance가 10이면 10 cm로 출력됩니다.
|
|||
|
|||
} |
|||
delay(500); |
|||
#endif
|
|||
/*if(flag->Get(Index::SteamOn)) {
|
|||
steam->On(); |
|||
delay(100); |
|||
steam->Off(); |
|||
flag->Set(Index::SteamOn,false); |
|||
flag->Set(Index::TimerOn,false); |
|||
}*/ |
|||
} |
|||
|
|||
|
|||
bool isCatched = false; |
|||
void update() { |
|||
if (distance <= 35){ |
|||
isCatched = true; |
|||
}else if(distance >35 && isCatched) { |
|||
|
|||
delay(4000); |
|||
steam->On(); |
|||
delay(3000); |
|||
steam->Off(); |
|||
isCatched = false; |
|||
|
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,31 @@ |
|||
#ifndef __PULSE_H_ |
|||
#define __PLUSE_H_ |
|||
|
|||
class Pulse { |
|||
private: |
|||
int trigPin; |
|||
int echoPin; |
|||
public: |
|||
|
|||
Pulse(int t,int e) : trigPin(t),echoPin(e) { |
|||
pinMode(t,OUTPUT); |
|||
pinMode(e,INPUT); |
|||
} |
|||
void Trig() { // trigPin에 LOW를 출력하고 |
|||
digitalWrite(trigPin, LOW); // trigPin에 LOW를 출력하고 |
|||
|
|||
delayMicroseconds(2); // 2 마이크로초가 지나면 |
|||
|
|||
digitalWrite(trigPin, HIGH); // trigPin에 HIGH를 출력합니다. |
|||
|
|||
delayMicroseconds(10); // trigPin을 10마이크로초 동안 기다렸다가 |
|||
|
|||
digitalWrite(trigPin, LOW); |
|||
} |
|||
|
|||
unsigned long Echo() { |
|||
return pulseIn(echoPin,HIGH); |
|||
} |
|||
|
|||
}; |
|||
#endif |
|||
@ -0,0 +1,22 @@ |
|||
#ifndef __STEAM_H_ |
|||
#define __STEAM_H_ |
|||
|
|||
class Steam { |
|||
private: |
|||
int outputV5; |
|||
|
|||
|
|||
|
|||
public: |
|||
Steam(int outputPin) : outputV5(outputPin){ |
|||
pinMode(outputPin, OUTPUT); |
|||
} |
|||
void On() { |
|||
digitalWrite(outputV5,HIGH); |
|||
} |
|||
void Off() { |
|||
digitalWrite(outputV5,LOW); |
|||
} |
|||
}; |
|||
|
|||
#endif |
|||
@ -0,0 +1,22 @@ |
|||
#ifndef __TIMER_H_ |
|||
#define __TIMER_H_ |
|||
|
|||
class Timer { |
|||
private: |
|||
unsigned long prev; |
|||
unsigned long current; |
|||
public: |
|||
Timer() { |
|||
current = prev = millis(); |
|||
} |
|||
inline void ChkFirst() { |
|||
prev = millis(); |
|||
} |
|||
inline void ChkLast() { |
|||
current = millis(); |
|||
} |
|||
|
|||
unsigned long GetSecond() {return (current - prev) / 1000;} |
|||
}; |
|||
|
|||
#endif |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue