본문 바로가기

분류 전체보기210

아두이노 reset -#2 이 방법은 소프트웨어적인 방법이다. 그래도 예제로 보이기 위해서는, 시발점, 트리거를 위해서 2번핀에 풀다운 버턴을 하나 달았다. 비전공자라서 그런지 항상 풀다운, 풀업이 헷갈린다. 그래도 몰라도 된다. 할때 마다 책보면 되니까... 일단 선을 연결하고 하드웨어를 만들자. 별것 없으니 사진만 봐도 충분 할 것 같다. 그리고 소스코드에서 함수를 호출 한다. 딜레이를 준이유는 직접하면 알겠지만, 한번 누르면 여러번 리셋된다. 그것을 방지하기 위한것이고, 리셋하는 함수는 실제로 한줄이다. #include #define BAUD 115200 void setup() { Serial.begin(BAUD); wdt_disable(); pinMode(2, INPUT); Serial.print("ARDUINO RESET.. 2020. 1. 27.
아두이노 reset -#1 아두이노에서 리셋을 하는 3가지 방법에 대해서 테스트 할 것이다. 두가지는 소프트웨어 리셋이고 한가지는 물리적인 핀을 사용하는것이다. 1. Wachdog Timer 를 사용하는 방법이라고 하는데 일단 WDT를 잘 모른다. 2. Zero Address 로 분기 하도록 하는 방법인데, 제일 문난한듯. 3. Reset 신호에 I/O 핀을 직접연결하여 필요시에 로우값을 주는 방법이다. 3.1 여기서 주의 해야 할 것도 있다. 3.2 기본적으로 모든핀은 로우로 시작하기 때문에 시작 하자 말자 setup에 high를 주어야 한다 3.3 안그러면 리셋이 무한 반복 된다. 그리고 테스트를 위해서 버턴을 하나 연결해서 진행 했다. 이제 천천히 해보자 2020. 1. 27.
아두이노 on/off 제어 - #3 여기서 핵심은 아래 소스코드의 함수 이다. 소스코드는 그렇게 길지는 않다. 그러나 어려운 논리로직이 들어 있다. 온오프에 대한 로직이다. 알아야 할 것은 1. static 변수의 의미 2. 물은표 연산자 3. 논리 합과 논리 곱 논리연산에 익숙하지 않는 프로그래머라면 종이에 적어 가면서 한번 적어 보는것도 좋을것 이다. 논리연산은 정말로 왕도가 없다. 많이 보고 눈으로 익히는게 최고 이다. bool control(double _1st, double _2st, double value) { bool case1; bool case2; static bool case3 = false; static bool case4 = false; case1 = value 2020. 1. 12.
아두이노 on/off 제어 - #2 여기서 데드밴드를 설정해 보자. 데드밴드에 생소한 사람도 있을것 같은데, 죽은 구간이다. 즉 한개 값으로 제어하는 경우 단순명확하지만, 특정상황에서는 작동이 반복될수가 있다. 켜지고 꺼지고 왔다 갔다. 물론 이렇게 되면 기기나 장치에 무리가 가서 고장이 발생하기 좋다. 그래서 죽은 구간을 설정한다, 즉 온도가 올라 갈때는 에어컨이 켜지고 온도가 내려 갈때는 꺼지고, 예를 들어 25도씨에 커진다고 하면 특정 상황에서는 에어컨이 켜지고 꺼지고를 반복하게 된다. 27도씨 정도에 커지고, 24도씨에 꺼지 만들수가 있다. 이런 경우 28도씨에서 26도씨에 들어 간다고 해서 꺼지는것은 아니다. 24도씨가 되어야 꺼진다. 반데로 23도씨에서 25씨가 된다고 해도 커지는것은 아니다. 즉 24도씨에서 27도씨에 죽은구간.. 2020. 1. 12.
아두이노 on/off 제어 - #1 제어의 제일 기본이면서, 제일 많이 사용하고, 제일 쉬운 제어 중하나가 온오프제어 이다. 그냥 단순하다 켜고, 꺼고 이게 전부다. 온도 값으로 만들까 하다가. 제일 쉬운 조도센서를 이용해서 만들었다. 그렇게 어렵지 않으니 소스코드 부터 봐도 될듯 하다. #define BAUD 115200 volatile int isonoff = 0; void setup() { Serial.begin(BAUD); pinMode(8, OUTPUT); digitalWrite(8, LOW); isonoff = 0; Serial.print("ARDUINO ONOFF TEST!!! \n"); } void loop() { int iA0 = analogRead (A0); int pA0 = map(iA0, 0, 1023, 0, 100).. 2020. 1. 12.
아두이노와 C/C++ 이야기 -#6 아래는 함수선언을 꼭해야하는 특수상황을 가정해서 만들어본 샘플 코드 입니다. 현업에서 30년 넘게 일한 저도 가끔 발생하는 상황이라. 초보분들에게 이런것도 설명해야 하나 의문이 들기는 합니다. #include /* run this program using the console pauser or add your own getch, system("pause") or input loop */ //void functionA(int i); //void functionB(int i); //void functionC(int i); void functionA(int i) { if(i ==1) functionB(i); else if(i ==2) functionC(i); return ; } void functionB(in.. 2020. 1. 12.
아두이노와 C/C++ 이야기 -#5 아두이노 같은 경우 아래 소스코드가 컴파일 오류를 발생하지는 않는다. 그러나 대부분의 다른 C/C++컴파일러 경우는 오류를 발생한다. 그래서 이전에 이야기한 규칙을 준수 하기 바란다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 void setup() { // put your setup code here, to run once: } void loop() { function(); } void function() { } http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter 표준 규칙 1 2 3 4 5 6 7 8 9.. 2020. 1. 10.
아두이노와 C/C++ 이야기 -#4 함수의 선언과 정의 부터 알아보자. 함수도 .h 파일에는 선언을 해야 하고 .cpp파일에는 정의를 해야 한다. 함수의 선언도 다른 파일에서 참조하는 경우만 필요하다. 컴파일러의 따라서 같은 파일이라도 함수의 선언이 미리 되어 있지 않으면 오류가 발생한다. .cpp에 함수의 선언을 한다고 오류가 발생하지 않는다. 그러나 다른 파일에서 사용한다면 오류가 발생한다. 그렇기 때문에 꼭, 받드시 .h에 선언하자. 만약 이 규칙을 지키지 않는다면 수많은 링크 에러가 당신을 괴롭게 할것이다. 1 2 3 4 5 6 7 8 9 10 11 12 //함수의 선언 이다. //.h void function(void); //함수의 정의 이다. //.cpp void function(void) { return ; } 2020. 1. 10.
아두이노와 C/C++ 이야기 -#3 이전글을 봤다면 .h와 .cpp 두가지 확장자를 보았을것이다. 모든것을 한번에 설명하기는 어렵지만, 관례적으로 같은 이름의 파일을 확장자만 다르게 두개 만들자. 이것은 C/C++언어에서 통용되는 규칙이므로 그냥 그렇게 하자. 물론 30년 이상 고수라면 꼭 그렇게 하지는 않는다. 여기서 주의 해야 할 것은 선언과 정의를 공부해야 한다. C/C++의 선언과 정의가 중요하다. 대부분 책에서는 가르치지 않고 생략하기 때문에 잘 모른다. 물론 하나의 파일에 모두 코딩한다면 잘 몰라도 된다. 여러개의 파일로 나누거나 원도우 프로그래밍, 리눅스쪽으로 온다면 중요한 개념이다. 변수의 선언과 정의 부터 알아보자. 변수는 정의만 있고 선언은 없다. 그렇지만 꼭 선언이 없는것은 아니다. .h 파일에는 선언을 해야 하고 .c.. 2020. 1. 10.