본문 바로가기

분류 전체보기210

아두이노와 한글 -#4 저번에 UFT8과 16에 대해서 공부 했다. 약간의 개념만 잡았다면 성공한것이다. 그리고 초성중성종성을 분리 할 수 있다면 거의 이해한것이다. 초성중성종성을 분리하기 전에 먼저 점과 폰트에 대해서 이해를 해야 한다. 글자한자에 대한 점들로 구성되어져 있고 그것들이 만들어진것이 폰트이다. 일단 점으로 글자를 만들어 보자. 이전에도 많이 사용했던 LCD를 이용해보자. 분명이 한계도 있고 쓰기에 많이 불편하지만, 그레도 한글 한자를 표현함으로써 어떤식으로 구현하는지를 이해 하자. https://mikeyancey.com/hamcalc/lcd_characters.php 위사이트에서 글자를 만들어 보자. LCD는 5x8해서 가로 5칸, 세로 8줄이다. 그것을 만들어 출력하는것이다. 자동으로 만들어 주고 있지만, .. 2020. 10. 24.
아두이노와 한글 -#3 지금까지 UTF, 유니코드에 대한 설명없이 그냥 시작했다. 그러기에는 기초지식이 너무 부족한게 사실이다. 그래서 아래링크를 읽어 보면 조금더 이해가 갈것 같다. 상세한 내용보다는 기본개념만 잡고 가기 바란다. 출처: https://studyforus.tistory.com/167 https://onlywis.tistory.com/2 https://sleepyeyes.tistory.com/3 https://kaspyx.tistory.com/37 https://kcal2845.tistory.com/34 2020. 10. 19.
아두이노와 한글 -#2 현재 UTF-8이 통일을 하고 있는 추세이다. WEB도 거의 표준이고 나머지 공개소프트웨어들도 대부분 기본적으로 UTF8을 사용한다. 그러면 우리는 딱히 공부할 필요가 없다. 그러나 현실은 꼭 그렇지만 않다. UTF16도 있고 CP949도 있고 다양하게 많다. 그중에 하나가 원도우다. 마이크로소프트는 그들이 가지고 있는 강력한 지워권을 통해서 반기들 들고 있다. 그래서 우리가 사용하는 원도우 시스템과 통신을 하거나 전달 할때는 다른것도 공부해야 하는것이다. 아두이노 보드에서 원도우 컴퓨터의 아두이노 시리얼모니터로 한글을 보낼때, 둘다 UTF8이기 때문에 한글이 잘 출력된다. 그러면 아두이노 보드에서 원도우 컴퓨터의 다른 소프트웨어로 보낸다고 할때 잘 출력된다는 보장은 없다. 그소프트웨어가 UFT8을 사용.. 2020. 10. 19.
아두이노와 한글 -#1 사실 공학하는 사람은 한글을 잘 다루지 않는다. 본인도 프로그래밍은 오래 했지만 한글을 다루거나, 어려움이 없었다. 그냥 잘되니까.... 사실 우물안에 살다 보니 그런것이다. 보통사람들은 우물안에 산다고 했을때 하수 아닌가? 이런 생각도 하술 있지만, 전혀 아니다. 그만큼 프로그래밍의 영역이 방대하기 떄문이다. 잡담은 그만하고 본론에 들어가서 아두이노의 작년 버전만해도 한글이 출력되지 않았다. 안되었다기 보다는 조치를 취해죠야 되었다는 표현이 정확하였다. 그런데 최신버전은 한글을 그냥 잘 지원해 준다. 아두이노 끼리 시리얼 전송으로 전송해도 잘가고 다른 시리얼 소프트웨어 putty나 테라템에도 잘 전달이 된다. 그래서 딱히 모르고 살아도 문제는 없다. 왜...? 같은 우물에 살고 있기 떄문이다. 정확하게.. 2020. 10. 19.
아두이노와 미분방정식 항상 그렇지만 오늘하는 주제는 재미로 하는 주제 입니다. 인터넷을 보다가 아두이노 328P, 우노보드가 286 컴퓨터보다 빠르다는 기사를 봤습니다. 과연...? 사실 본인이 컴퓨터 처음공부 할떄는 286,XT 컴퓨터 이전이라.... XT컴퓨터에 도스가 와.... 오락실에서만 하던 테트리스가 흑백이지만. 플로피디스크에 돌아 갈떄 와 했던 기억이.... 그래서 한번해 봤습니다. 우노가 미분방정식을 풀수 있는지...? 결론부터 이야기 하면 2차 미분방정식을 푸는데 0.0008,9초 정도 걸리는것보니 정말 빠르네요. 식이 간단한것도 있지만, 그래도 미분방정식이니 재미있게 한번 보죠. 두원의 교점을 구하는 문제 입니다. 사실 제가 아는 방법만해도 많으니, 방법의 소개는 그만 두고, 제일 쉬운 뉴턴랍슨 방법으로 풀.. 2020. 10. 8.
아두이노와 가변인자 #4 마지막으로 sprintf를 대체할만한 xprintf를 만들어 보자. sprintf만 가지고도 충분히 좋기는 하지만, 한가지 부족한 실수 문제를 극복하자. 별다른 이유는 없다. 가변인자에 대한 설명이다. 가변인자를 바로 활용하기는 어렵겠지만, 기본개념만 알고가는것도, 이런것이 있다는것도 재미있는 코딩 생활이 될것이다. #include #include void xprintf(char* p, char *types, ...) { va_list ap; int i = 0; va_start(ap, types); while (types[i] != '\0') { if(types[i]=='%') { i++; switch (types[i]) { case 'i': p += sprintf(p, "%d", va_arg(ap, i.. 2020. 9. 29.
아두이노와 가변인자 #3 앞에서 가변인자의 대략적인 형식을 배웠다면, 이제 본격적으로 형태를 공부하자. 단순한 문장인데, 앞에 특별한 단어를 삽입해서 출력을 하는 함수이다. #include #include void errorPrintf(char* p, char* fmt, ...) { va_list ap; strcpy(p, "[ERROR] "); va_start(ap, fmt); vsprintf(p + strlen(p), fmt, ap); va_end(ap); } void setup() { Serial.begin(9600); } void loop() { char buf[25]; errorPrintf(buf, "%d %s", 1, "xxx"); Serial.println(buf); delay(1000); } Colored by Co.. 2020. 9. 29.
아두이노와 가변인자 #2 가변인자란 말그래도 인자의 개수가 정해져 있지 않다. C++의 함수의 오버로딩과의 개념과도 다르다. printf의 경우 함수의 인자의 개수가 정의 되어 있지 않다. 사실 이런식으로 코딩을 하지 않겠지만, 아래 예시는 가변인자의 기본개념이다. 인자의 개수가 정의 되어 있지 않다는거다. #include #include int sum(int count, ...) { int res = 0; va_list ap; int i; va_start(ap, count); for(i=0; i 2020. 9. 29.
아두이노와 가변인자 #1 아두이노와 가변인자 C 프로그래밍을 하면서 자주사용하는 부분이다. 그러나 이정도까지는 잘 모른다. 본인도 그렇고 그다지 잘 활용하지는 않는 부분이다. C언어의 printf는 의외로 활용도가 높다. C++의 cout이 있지만, 아직까지 printf를 선호 한다. 그러나 아두이노로오면, 시리얼 print가 있지만, 왠지.. 쓰래기 같다. 문장울 만들가애 왠지 불편하다. 그래서 본인은 sprintf를 선호한다. 아무래도 활용도가 자유롭다. 단 한가지만 제외한다면, 실수 출력이 되지 않는다. 대충 편법으로 극복은 하지만 이것도 불편하다. p+= sprintf(p, "%s", String(12.34,2).c_str()); 그래서 가변인자에 대해서 알아보자. 솔찍히 아두이노 컴파일러가 이정도까지 지원할지는 몰랐다... 2020. 9. 29.