//선언부
enum State {
Start, //다른 Enum인자명, 함수명과 동일하면 안된다
NonPlaying,
Playing
};
State state=Start;
//switch
String Message="Unknown";
switch(state)
{
case Start:
Message="Start";
break;
case NonPlaying:
Message="NonPlaying";
break;
}
//enum연산
state=(State)((int)state+1);
enum 길이
슬프게도 이것보다 더 좋은 방법을 찾을수 없었다
enum State {
Start,
NonPlaying,
Playing,
Count
};
int _max=Count;
enum class
이름 충돌 방지한답시고 더 귀찮게 만들어놨다.
유지보수하는놈은 지능 덜 떨어진게 분명함. C#좀 보고 배워야 한다
//선언부
enum class State {
Start,
NonPlaying,
Playing
};
State state=State::Start;
//switch
String Message="Unknown";
switch(state)
{
case State::Start:
Message="Start";
break;
case State::NonPlaying:
Message="NonPlaying";
break;
}
//enum연산
state=(State)((int)state+1);
enum class 길이
enum class State {
Start,
NonPlaying,
Playing,
Count
};
int _max=(int)State::Count;
//연산에 적용
state=(State)((int)state-1);
if((int)state<0)
{
state=(State)((int)State::Count-1);
}
state=(State)((int)state+1);
if(state>=State::Count)
{
state=(State)0;
}
비프, 부저 (패시브)
void HandmadeTone(int pin,int frequency,int duration)
{
#if defined(ARDUINO_AVR_UNO)
tone(pin, frequency, duration);
#else
bool pinState=HIGH;
int delayTime=(1000*1000)/(frequency*4);
for(int i=0;i<(duration*1000)/delayTime;i++)
{
pinState=!pinState;
digitalWrite(pin, pinState);
delayMicroseconds(delayTime);
}
digitalWrite(pin, LOW);
#endif
}
void Beef()
{
int pin=4;
int frequency=768;
int duration=100;
HandmadeTone(pin, frequency, duration);
}
void BeefError()
{
int pin=4;
int frequency=768*0.25;
int duration=100;
HandmadeTone(pin, frequency, duration);
delay(100);
HandmadeTone(pin, frequency, duration);
}
#define NAMEOF(name) #name
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
int frequency=768;
Serial.print(__func__); //setup
Serial.print(NAMEOF(frequency)); //frequency
}
__func__ 가 함수명이고
NAMEOF는 define으로 선언해주어야 한다
완벽히 동일한 기능을 하는건 아니고 잘못된 값을 넣어도 잘만 컴파일 된다. IDE에서 이름확인하는데에만 쓰자