<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>devnauts</title>
    <link>https://devnauts.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 1 Jul 2026 08:06:38 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>사용자-1</managingEditor>
    <item>
      <title>[Clojure/Lisp] Clojure에서 println 어렵게 해보기</title>
      <link>https://devnauts.tistory.com/222</link>
      <description>&lt;h3 id=&quot;println-어렵게-해보기&quot; data-ke-size=&quot;size23&quot;&gt;Clojure에서 println 어렵게 해보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lamda 함수 및 &quot;-&amp;gt;&quot; 연산자의 작동 방식 이해를 위해&lt;/p&gt;
&lt;pre class=&quot;brush:plain clojure&quot;&gt;;; 1)
(println &quot;hello&quot;)

;; 2)
((fn [str] (println str)) &quot;hello&quot;)

;; 3)
(-&amp;gt; &quot;hello&quot; (println))

;; 4)
(-&amp;gt; &quot;hello&quot; ((fn [str] (println str))))
&lt;/pre&gt;</description>
      <category>1. 연구 모듈/Lisp - Clojure</category>
      <category>Clojure</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/222</guid>
      <comments>https://devnauts.tistory.com/222#entry222comment</comments>
      <pubDate>Mon, 28 Mar 2022 07:05:26 +0900</pubDate>
    </item>
    <item>
      <title>[윈도우] 특정 경로에서 커맨드창 실행하기</title>
      <link>https://devnauts.tistory.com/221</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;특정 경로에서 커맨드창을 실행하기 위해서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 일반적인 환경에서는 시작 메뉴에 있는 명령 프롬프트 단축아이콘을 복사한 뒤 시작 위치 속성을 바꾸는 방법을 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 다음과 같은 배치 파일 코드는 특수한 조건에서만 동작합니다. (파이썬의 subprocess.Popen으로 실행했을 때라던가..)&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;brush:plain properties&quot;&gt;D:
cd \work

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2. 사무 모듈</category>
      <category>배치파일</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/221</guid>
      <comments>https://devnauts.tistory.com/221#entry221comment</comments>
      <pubDate>Mon, 13 Dec 2021 07:20:16 +0900</pubDate>
    </item>
    <item>
      <title>[윈도우] 여러 개의 배치파일을 각각의 커맨드창에서 실행하는 배치파일</title>
      <link>https://devnauts.tistory.com/220</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;여러 개의 배치파일을 각각의 커맨드창에서 실행하기 위한 배치파일입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;multi.bat&lt;/p&gt;
&lt;pre class=&quot;brush:plain armasm&quot;&gt;&amp;lt;경로 변경 커맨드&amp;gt;
start batch1.bat
start batch2.bat

&lt;/pre&gt;</description>
      <category>2. 사무 모듈</category>
      <category>배치파일</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/220</guid>
      <comments>https://devnauts.tistory.com/220#entry220comment</comments>
      <pubDate>Fri, 10 Dec 2021 07:42:09 +0900</pubDate>
    </item>
    <item>
      <title>[Clojure/Lisp] Clojure 맵에서 키워드를 키로 활용</title>
      <link>https://devnauts.tistory.com/217</link>
      <description>Clojure에서 키워드는 앞에 :이 붙은 요소인데, 설명을 읽어봐도 잘 이해가 되지 않으므로 사용용도를 통해 그 정체를 기억하자.
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;맵의 이름은 함수처럼 사용해서 데이터를 참조하는 것이 가능한데, 키워드를 키로 지정할 경우, 이 키워드도 함수처럼 사용하는 것이 가능하다. (다른 맵 간에 키워드 중복 사용도 무방)&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;맵-정의&quot;&gt;맵 정의&lt;/h2&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;
(def planet {:name &quot;earth&quot; :type &quot;terrestrial&quot;
        :satelite {:sateliteName &quot;moon&quot; :alternateName &quot;luna&quot;}})

&lt;/pre&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;데이터-참조&quot;&gt;데이터 참조&lt;/h2&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;
; 아래 세 구문 모두 같은 값 &quot;terrestrial&quot;을 갖는다.

(planet :type)
(get planet :type)
(:type planet)  ; 만약 키가 &quot;type&quot;(문자열)이라면, 이런 식의 사용은 불가능하다.

-&gt; &quot;terrestrial&quot;

&lt;/pre&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;연쇄-참조&quot;&gt;연쇄 참조&lt;/h2&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;
; 아래 세 구문 모두 같은 값 &quot;luna&quot;을 갖는다.

(:alternateName (:satelite planet))
(-&gt; planet :satelite :alternateName)
(get-in planet [:satelite :alternateName])

-&gt; &quot;luna&quot;

&lt;/pre&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;키가-존재하지-않을-경우&quot;&gt;키가 존재하지 않을 경우&lt;/h2&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;
; 존재하지 않는 키인 키워드를 사용할 경우 nil을 반환한다.

(:orbit planet)

-&gt; nil

&lt;/pre&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;키워드에-네임스페이스-사용&quot;&gt;키워드에 네임스페이스 사용&lt;/h2&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;
; / 기호를 사용해 키워드에 네임스페이스를 줄 수도 있다.

(:etc/alternateName {:name/sateliteName &quot;moon&quot; :etc/alternateName &quot;luna&quot;})

-&gt; &quot;luna&quot;

&lt;/pre&gt;

&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;pre  style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;
&lt;테스트 환경&gt;
- OS : Windows 10
- Leiningen 버전 : 1.0.0
&lt;/pre&gt;</description>
      <category>1. 연구 모듈/Lisp - Clojure</category>
      <category>Clojure</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/217</guid>
      <comments>https://devnauts.tistory.com/217#entry217comment</comments>
      <pubDate>Tue, 7 Dec 2021 07:53:52 +0900</pubDate>
    </item>
    <item>
      <title>[Clojure/Lisp] Clojure에서 자바 클래스 사용하기</title>
      <link>https://devnauts.tistory.com/216</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Clojure 활용의 핵심! 자바 클래스 사용방법에 대해 정리해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;클래스-import&quot; data-ke-size=&quot;size23&quot;&gt;클래스 import&lt;/h3&gt;
&lt;pre class=&quot;brush:plain julia&quot;&gt;; 풀네임으로 쓰는 방법
java.util.Date  ; =&amp;gt; java.util.Date


; 줄여서 쓰는 방법
(import java.util.Date)
Date  ; =&amp;gt; java.util.Date

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;자동-import&quot; data-ke-size=&quot;size23&quot;&gt;자동 import&lt;/h3&gt;
&lt;pre class=&quot;brush:plain dart&quot;&gt;; java.lang 밑에 있는 클래스들은 별도의 import 없이 줄여쓰는 방법으로 쓸 수 있다
Math  ; =&amp;gt; java.lang.Math
String  =&amp;gt; java.lang.String

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;이너inner-클래스-import&quot; data-ke-size=&quot;size23&quot;&gt;이너(Inner) 클래스 import&lt;/h3&gt;
&lt;pre class=&quot;brush:plain lasso&quot;&gt;; 풀네임으로 쓰는 방법
java.util.Map$Entry  ; =&amp;gt; java.util.Map$Entry


; 줄여서 쓰는 방법
(import java.util.Map$Entry)
Map$Entry  ; =&amp;gt; java.util.Map$Entry

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;인스턴스-생성&quot; data-ke-size=&quot;size23&quot;&gt;인스턴스 생성&lt;/h3&gt;
&lt;pre class=&quot;brush:plain clojure&quot;&gt;; new 구문을 사용
(new java.util.Date)

; 약식 구문
(java.util.Date.)

; 약식 구문 (import 후)
(import java.util.Date)
(Date.)

; 생성자 파라미터 전달하는 경우
(java.net.URI. &quot;http://clojure.org&quot;)

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;인스턴스-메소드-호출&quot; data-ke-size=&quot;size23&quot;&gt;인스턴스 메소드 호출&lt;/h3&gt;
&lt;pre class=&quot;brush:plain scheme&quot;&gt;; . 구문을 사용
(let [d (java.util.Date.)]
  (. d getTime))

; 약식 구문
(let [d (java.util.Date.)]
  (.getTime d))

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;정적-메소드-호출&quot; data-ke-size=&quot;size23&quot;&gt;정적 메소드 호출&lt;/h3&gt;
&lt;pre class=&quot;brush:plain clojure&quot;&gt;; . 구문을 사용
(. Math floor 5.677)

; 약식 구문
(Math/floor 5.677)

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;연쇄-호출&quot; data-ke-size=&quot;size23&quot;&gt;연쇄 호출&lt;/h3&gt;
&lt;pre class=&quot;brush:plain css&quot;&gt;(.. (java.util.Date.) getTime toString)  ; (-&amp;gt; (java.util.Date.) (. getTime) (. toString)) 과 동일
                                         ; (-&amp;gt; (java.util.Date.) (.getTime) (.toString)) 과도 동일

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;동일-오브젝트에-복수-호출&quot; data-ke-size=&quot;size23&quot;&gt;동일 오브젝트에 복수 호출&lt;/h3&gt;
&lt;pre class=&quot;brush:plain clojure&quot;&gt;(doto (java.util.Stack.)
  (.push 42)
  (.push 13)
  (.push 7))  ; 첫번째 파라미터의 오브젝트가 나머지 호출의 첫번째 파라미터로 들어간다

; 아래와 같이 써도 동일
(doto (java.util.Stack.)
  (. push 42)
  (. push 13)
  (. push 7))

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;자바-필드멤버-변수-읽기&quot; data-ke-size=&quot;size23&quot;&gt;자바 필드(멤버 변수) 읽기&lt;/h3&gt;
&lt;pre class=&quot;brush:plain scheme&quot;&gt;; . 구문을 사용
(let [pt (java.awt.Point. 10 20)]
(. pt x))  ; pt.x를 읽음

; 약식 구문
(let [pt (java.awt.Point. 10 20)]
(.x pt))

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;자바-필드멤버-변수-쓰기&quot; data-ke-size=&quot;size23&quot;&gt;자바 필드(멤버 변수) 쓰기&lt;/h3&gt;
&lt;pre class=&quot;brush:plain scheme&quot;&gt;(let [pt (java.awt.Point. 10 20)]
  (set! (.y pt) 100))  ; pt.y -&amp;gt; 100으로 세팅됨

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;enum-타입-사용&quot; data-ke-size=&quot;size23&quot;&gt;Enum 타입 사용&lt;/h3&gt;
&lt;pre class=&quot;brush:plain stylus&quot;&gt;java.util.concurrent.TimeUnit/MILLISECONDS

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;상수-인스턴스의-자바-클래스-얻기&quot; data-ke-size=&quot;size23&quot;&gt;상수/인스턴스의 자바 클래스 얻기&lt;/h3&gt;
&lt;pre class=&quot;brush:plain clojure&quot;&gt;(class 1)       ; =&amp;gt; java.lang.Long
(class &quot;docs&quot;)  ; =&amp;gt; java.lang.String
(class (java.net.URI. &quot;http://github.com&quot;))  ; =&amp;gt; java.net.URI

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;클래스명으로-클래스-얻기&quot; data-ke-size=&quot;size23&quot;&gt;클래스명으로 클래스 얻기&lt;/h3&gt;
&lt;pre class=&quot;brush:plain clojure&quot;&gt;(Class/forName &quot;java.util.Date&quot;)  ; =&amp;gt; java.util.Date

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고: &lt;a class=&quot;uri&quot; href=&quot;http://clojure-doc.org/articles/language/interop.html&quot;&gt;http://clojure-doc.org/articles/language/interop.html&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #eeeeee; padding: 10px; border: 1px solid #eeeeee;&quot;&gt;&amp;lt;테스트 환경&amp;gt;
- OS : Windows 10
- Leiningen 버전 : 1.0.0
&lt;/pre&gt;
&lt;!--
[List/Clojure] Clojure에서 자바 클래스 사용하기

Clojure의 핵심! 자바 클래스 사용방법에 대해 정리해보았습니다.

### 클래스 import
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 자동 import
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 이너(Inner) 클래스 import
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 인스턴스 생성
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 인스턴스 메소드 호출
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 정적 메소드 호출
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 연쇄 호출
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 동일 오브젝트에 복수 호출
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 자바 필드(멤버 변수) 읽기
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 자바 필드(멤버 변수) 쓰기
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### Enum 타입 사용
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 상수/인스턴스의 자바 클래스 얻기
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;

### 클래스명으로 클래스 얻기
&lt;pre class=&quot;brush:plain&quot;&gt;

&lt;/pre&gt;


참고: &lt;http://clojure-doc.org/articles/language/interop.html&gt;






[List/Clojure] Clojure에서 자바 클래스 사용하기

Clojure 활용의 핵심! 자바 클래스 사용방법에 대해 정리해보았습니다.

### 클래스 import
```
; 풀네임으로 쓰는 방법
java.util.Date  ; =&gt; java.util.Date


; 줄여서 쓰는 방법
(import java.util.Date)
Date  ; =&gt; java.util.Date

```

### 자동 import
```
; java.lang 밑에 있는 클래스들은 별도의 import 없이 줄여쓰는 방법으로 쓸 수 있다
Math  ; =&gt; java.lang.Math
String  =&gt; java.lang.String
```

### 이너(Inner) 클래스 import
```
; 풀네임으로 쓰는 방법
java.util.Map$Entry  ; =&gt; java.util.Map$Entry


; 줄여서 쓰는 방법
(import java.util.Map$Entry)
Map$Entry  ; =&gt; java.util.Map$Entry

```

### 인스턴스 생성
```
; new 구문을 사용
(new java.util.Date)

; 약식 구문
(java.util.Date.)

; 약식 구문 (import 후)
(import java.util.Date)
(Date.)

; 생성자 파라미터 전달하는 경우
(java.net.URI. &quot;http://clojure.org&quot;)
```

### 인스턴스 메소드 호출
```
; . 구문을 사용
(let [d (java.util.Date.)]
  (. d getTime))

; 약식 구문
(let [d (java.util.Date.)]
  (.getTime d))
```

### 정적 메소드 호출
```
; . 구문을 사용
(. Math floor 5.677)

; 약식 구문
(Math/floor 5.677)
```

### 연쇄 호출
```
(.. (java.util.Date.) getTime toString)  ; (-&gt; (java.util.Date.) (. getTime) (. toString)) 과 동일
                                         ; (-&amp;gt; (java.util.Date.) (.getTime) (.toString)) 과도 동일
```

### 동일 오브젝트에 복수 호출
```
(doto (java.util.Stack.)
  (.push 42)
  (.push 13)
  (.push 7))  ; 첫번째 파라미터의 오브젝트가 나머지 호출의 첫번째 파라미터로 들어간다

; 아래와 같이 써도 동일
(doto (java.util.Stack.)
  (. push 42)
  (. push 13)
  (. push 7))
```

### 자바 필드(멤버 변수) 읽기
```
; . 구문을 사용
(let [pt (java.awt.Point. 10 20)]
(. pt x))  ; pt.x를 읽음

; 약식 구문
(let [pt (java.awt.Point. 10 20)]
(.x pt))
```

### 자바 필드(멤버 변수) 쓰기
```
(let [pt (java.awt.Point. 10 20)]
  (set! (.y pt) 100))  ; pt.y -&gt; 100으로 세팅됨
```

### Enum 타입 사용
```
java.util.concurrent.TimeUnit/MILLISECONDS
```

### 상수/인스턴스의 자바 클래스 얻기
```
(class 1)       ; =&gt; java.lang.Long
(class &quot;docs&quot;)  ; =&gt; java.lang.String
(class (java.net.URI. &quot;http://github.com&quot;))  ; =&gt; java.net.URI
```

### 클래스명으로 클래스 얻기
```
(Class/forName &quot;java.util.Date&quot;)  ; =&gt; java.util.Date
```


참고: &lt;http://clojure-doc.org/articles/language/interop.html&gt;

--&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>1. 연구 모듈/Lisp - Clojure</category>
      <category>Clojure</category>
      <category>java</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/216</guid>
      <comments>https://devnauts.tistory.com/216#entry216comment</comments>
      <pubDate>Mon, 6 Dec 2021 07:04:01 +0900</pubDate>
    </item>
    <item>
      <title>[wxPython] 버튼 오른쪽 아래로 정렬하기</title>
      <link>https://devnauts.tistory.com/215</link>
      <description>&lt;p&gt;버튼 오른쪽 아래로 정렬하는 예제입니다. 아래 Launcher Template 예제의 MainWindow.__init__() 부분에 교체하여 테스트할 수 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Launcher 어플 Template : &lt;a href=&quot;https://devnauts.tistory.com/68&quot; class=&quot;uri&quot;&gt;https://devnauts.tistory.com/68&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;
vbox = wx.BoxSizer(wx.VERTICAL)

button = wx.Button(self, id = 108, label = &quot;TITLE_8&quot;, size = (120, 50))
hbox = wx.BoxSizer(wx.HORIZONTAL)
hbox.AddStretchSpacer()
hbox.Add(button)
hbox.AddSpacer(10) # optional

self.Bind(wx.EVT_BUTTON, self.OnButton, button)

vbox.AddStretchSpacer()
vbox.Add(hbox, 0, wx.EXPAND | wx.ALL)
vbox.AddSpacer(10) # optional

self.SetSizer(vbox, True)
self.Layout()

&lt;/pre&gt;
&lt;pre  style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;
&lt;테스트 환경&gt;
OS : Windows 10
Python 버전 : 2.7
wxPython 버전 : 2.8.12.1
&lt;/pre&gt;

&lt;!--
[wxPython] 버튼 오른쪽 아래로 정렬하기

버튼 오른쪽 아래로 정렬하는 예제입니다. 아래 Launcher Template 예제의 MainWindow.__init__() 부분에 교체하여 테스트할 수 있습니다.

  - Launcher 어플 Template : &lt;https://devnauts.tistory.com/68&gt;
  
&lt;pre&gt;

&lt;/pre&gt;

&lt;pre  style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;
&lt;테스트 환경&gt;
OS : Windows 10
Python 버전 : 2.7
wxPython 버전 : 2.8.12.1
&lt;/pre&gt;



vbox = wx.BoxSizer(wx.VERTICAL)

button = wx.Button(self, id = 108, label = &quot;TITLE_8&quot;, size = (120, 50))
hbox = wx.BoxSizer(wx.HORIZONTAL)
hbox.AddStretchSpacer()
hbox.Add(button)
hbox.AddSpacer(10) # optional

self.Bind(wx.EVT_BUTTON, self.OnButton, button)

vbox.AddStretchSpacer()
vbox.Add(hbox, 0, wx.EXPAND | wx.ALL)
vbox.AddSpacer(10) # optional

self.SetSizer(vbox, True)
self.Layout()
--&gt;</description>
      <category>1. 연구 모듈/Python</category>
      <category>Python</category>
      <category>wxPython</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/215</guid>
      <comments>https://devnauts.tistory.com/215#entry215comment</comments>
      <pubDate>Fri, 3 Dec 2021 07:25:33 +0900</pubDate>
    </item>
    <item>
      <title>아두이노에서 지자기 센서(GY-271) 사용하기</title>
      <link>https://devnauts.tistory.com/213</link>
      <description>&lt;h2 id=&quot;아두이노에서-지자기-센서gy-271-사용하기&quot;&gt;???? - 5. 아두이노에서 지자기 센서(GY-271) 사용하기&lt;/h2&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;간단히 말하면 나침반 역할을 하는 센서입니다.&lt;/p&gt;
&lt;p&gt;칩셋이 원래는 HMC5883L이었으나 단종되어 최근에는 QMC5883L로 나오고 있는듯합니다. 하지만 보유중인 부품이 HMC5883L인 관계로 해당 칩셋 기준으로 테스트를 진행하겠습니다.&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;배선도&quot;&gt;배선도&lt;/h2&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bulKDL/btrlC6f5WWz/Gc8D0HYS1tRI5k9atcqa30/img.png&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/bulKDL/btrlC6f5WWz/Gc8D0HYS1tRI5k9atcqa30/img.png&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;417&quot;&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;관련-라이브러리-설치&quot;&gt;관련 라이브러리 설치&lt;/h2&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;구글에서 HMC5883L arduino library를 검색합니다.&lt;/li&gt;
&lt;li&gt;나온 결과 중에서 https://github.com/jarzebski/Arduino-HMC5883L 로 들어갑니다.&lt;/li&gt;
&lt;li&gt;라이브러리를 ZIP 파일로 다운받습니다. (CODE 버튼 누르고, Download ZIP 선택)&lt;/li&gt;
&lt;li&gt;아두이노 IDE를 실행&lt;/li&gt;
&lt;li&gt;스케치 &amp;gt; 라이브러리 포함하기 &amp;gt; .ZIP 라이브러리 추가 메뉴를 실행합니다.&lt;/li&gt;
&lt;li&gt;다운 받은 ZIP 파일을 선택합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;예제-실행&quot;&gt;예제 실행&lt;/h2&gt;
&lt;ol start=&quot;7&quot; type=&quot;1&quot;&gt;
&lt;li&gt;파일 &amp;gt;예제 밑에 Arduino-HMC5883L-master 항목이 생긴 것을 볼 수 있습니다.&lt;/li&gt;
&lt;li&gt;이 밑에 있는 HMC5883L_processing 예제를 열어서 컴파일 후 업로드합니다.&lt;/li&gt;
&lt;li&gt;툴 &amp;gt; 시리얼 모니터를 엽니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;실행-결과&quot;&gt;실행 결과&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;아래와 같이 노멀 벡터 X/Y/Z 요소, 보정 안된 방위 각도, 보정(HMC5883L 각도 이슈)된 방위 각도, 평활화(smooth) 처리된 방위각 순으로 출력되는 것을 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre  style=&quot;border-style: solid; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;1117.80:-376.28:-92.00:345.83:337.00:339
1123.32:-380.88:-82.80:345.70:337.00:339
1116.88:-369.84:-89.24:346.11:339.00:339
1127.92:-387.32:-73.60:345.48:337.00:339
1120.56:-371.68:-84.64:346.08:339.00:339
1139.88:-386.40:-72.68:345.71:337.00:339
1121.48:-371.68:-84.64:346.10:339.00:339
1139.88:-386.40:-70.84:345.71:337.00:339
1130.68:-385.48:-73.60:345.61:337.00:339
1138.96:-387.32:-70.84:345.65:337.00:339
1129.76:-387.32:-72.68:345.51:337.00:339
1138.96:-387.32:-69.00:345.65:337.00:339
1129.76:-386.40:-69.92:345.55:337.00:339
1122.40:-373.52:-80.96:346.03:339.00:339
1132.52:-387.32:-69.92:345.55:337.00:339
1123.32:-373.52:-81.88:346.04:339.00:339
1141.72:-388.24:-66.24:345.65:337.00:339
1123.32:-372.60:-81.88:346.08:339.00:339
1141.72:-388.24:-68.08:345.65:337.00:339

&lt;/pre&gt;


&lt;!--
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bulKDL/btrlC6f5WWz/Gc8D0HYS1tRI5k9atcqa30/img.png&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/bulKDL/btrlC6f5WWz/Gc8D0HYS1tRI5k9atcqa30/img.png&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;417&quot;&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

## ???? - 5. 아두이노에서 지자기 센서(GY-271) 사용하기

간단히 말하면 나침반 역할을 하는 센서입니다.

칩셋이 원래는 HMC5883L이었으나 단종되어 최근에는 QMC5883L로 나오고 있는듯합니다. 하지만 보유중인 부품이 HMC5883L인 관계로 해당 칩셋 기준으로 테스트를 진행하겠습니다.

## 배선도



## 관련 라이브러리 설치

1. 구글에서 HMC5883L arduino library를 검색합니다.
2. 나온 결과 중에서 https://github.com/jarzebski/Arduino-HMC5883L 로 들어갑니다.
3. 라이브러리를 ZIP 파일로 다운받습니다. (CODE 버튼 누르고, Download ZIP 선택)
4. 아두이노 IDE를 실행
5. 스케치 &gt; 라이브러리 포함하기 &gt; .ZIP 라이브러리 추가 메뉴를 실행합니다.
6. 다운 받은 ZIP 파일을 선택합니다.


## 예제 실행

7. 파일 &gt;예제 밑에 Arduino-HMC5883L-master 항목이 생긴 것을 볼 수 있습니다.
8. 이 밑에 있는 HMC5883L_processing 예제를 열어서 컴파일 후 업로드합니다.
9. 툴 &gt; 시리얼 모니터를 엽니다.


## 실행 결과

- 아래와 같이 노멀 벡터 X/Y/Z 요소, 보정 안된 방위 각도, 보정(HMC5883L 각도 이슈)된 방위 각도, 평활화(smooth) 처리된 방위각 순으로 출력되는 것을 확인할 수 있습니다.

&lt;pre  style=&quot;border-style: solid; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;/pre&gt;

1117.80:-376.28:-92.00:345.83:337.00:339
1123.32:-380.88:-82.80:345.70:337.00:339
1116.88:-369.84:-89.24:346.11:339.00:339
1127.92:-387.32:-73.60:345.48:337.00:339
1120.56:-371.68:-84.64:346.08:339.00:339
1139.88:-386.40:-72.68:345.71:337.00:339
1121.48:-371.68:-84.64:346.10:339.00:339
1139.88:-386.40:-70.84:345.71:337.00:339
1130.68:-385.48:-73.60:345.61:337.00:339
1138.96:-387.32:-70.84:345.65:337.00:339
1129.76:-387.32:-72.68:345.51:337.00:339
1138.96:-387.32:-69.00:345.65:337.00:339
1129.76:-386.40:-69.92:345.55:337.00:339
1122.40:-373.52:-80.96:346.03:339.00:339
1132.52:-387.32:-69.92:345.55:337.00:339
1123.32:-373.52:-81.88:346.04:339.00:339
1141.72:-388.24:-66.24:345.65:337.00:339
1123.32:-372.60:-81.88:346.08:339.00:339
1141.72:-388.24:-68.08:345.65:337.00:339


--&gt;</description>
      <category>1. 연구 모듈/비분류</category>
      <category>아두이노</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/213</guid>
      <comments>https://devnauts.tistory.com/213#entry213comment</comments>
      <pubDate>Fri, 26 Nov 2021 07:45:56 +0900</pubDate>
    </item>
    <item>
      <title>아두이노에서 기울기 센서(MPU-6050) 사용하기</title>
      <link>https://devnauts.tistory.com/212</link>
      <description>&lt;h2 id=&quot;아두이노에서-기울기-센서mpu-6050-사용하기&quot;&gt;???? - 4. 아두이노에서 기울기 센서(MPU-6050) 사용하기&lt;/h2&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;MPU-6050은 아두이노에서 사용할 수 있는 기울기 센서 중 하나입니다. MPU-6050은 (중력)가속도 3축 + 자이로 3축을 합쳐서 6축 센서라고 불리는데 가속도 센서는 정적인 상태에서만 정확한 측정이 가능하므로 자이로 센서로 이를 보정하는 식으로 측정이 이루어집니다. (자이로 3축 + 가속도 2축 + 온도 이렇게 6축이라는데도 있습니다) 기능으로는 Pitch, Roll, Yaw 세 방향의 기울기를 측정할 수 있는데, 실제로 테스트를 해봤을 때 Yaw값의 경우는 다소 정확하지 않은 느낌을 받았습니다.&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;배선도&quot;&gt;배선도&lt;/h2&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brrSar/btrlLwpZBKv/aMnOdk69NaOx8BPDXT6LYK/img.png&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/brrSar/btrlLwpZBKv/aMnOdk69NaOx8BPDXT6LYK/img.png&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;464&quot;&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;관련-라이브러리-설치&quot;&gt;관련 라이브러리 설치&lt;/h2&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;아두이노 IDE를 실행합니다.&lt;/li&gt;
&lt;li&gt;툴 -&amp;gt; 라이브러리 관리 메뉴를 실행합니다.&lt;/li&gt;
&lt;li&gt;라이브러리 매니저 화면에서 MPU6050를 검색합니다.&lt;/li&gt;
&lt;li&gt;MPU6050 by Electronic Cats를 설치합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;예제-실행&quot;&gt;예제 실행&lt;/h2&gt;
&lt;ol start=&quot;5&quot; type=&quot;1&quot;&gt;
&lt;li&gt;파일 &amp;gt;예제 밑에 MPU6050 항목이 생긴 것을 볼 수 있습니다.&lt;/li&gt;
&lt;li&gt;이 밑에 있는 MPU6050_DMP6 예제를 열어서 컴파일 후 업로드합니다.&lt;/li&gt;
&lt;li&gt;툴 &amp;gt; 시리얼 모니터를 엽니다.&lt;/li&gt;
&lt;li&gt;속도를 115200 보드레이트로 변경합니다.&lt;/li&gt;
&lt;p&gt;&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mzI6F/btrlEnhf0Ih/4lixOasoGMW4WNVgkIr8ik/img.png&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/mzI6F/btrlEnhf0Ih/4lixOasoGMW4WNVgkIr8ik/img.png&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;89&quot;&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;li&gt;시리얼 모니터 상단 입력란에 아무 값이나 입력하고 전송을 누르면 화면 출력이 시작됩니다.&lt;/li&gt;
&lt;p&gt;&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b04Zua/btrlDxkpqw8/UMa3EIG3kdquttD04FgWck/img.png&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/b04Zua/btrlDxkpqw8/UMa3EIG3kdquttD04FgWck/img.png&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;68&quot;&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 id=&quot;실행-결과&quot;&gt;실행 결과&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;센서를 기울임에 따라 Yaw, Pitch, Roll 값이 변경되는 것을 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre  style=&quot;border-style: solid; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;Initializing DMP...
Enabling DMP...
Enabling interrupt detection (Arduino external interrupt 0)...
DMP ready! Waiting for first interrupt...

ypr	30.79	18.42	-64.17
ypr	31.31	18.09	-63.87
ypr	31.79	18.02	-63.55
ypr	32.53	18.19	-62.95
ypr	33.78	19.00	-61.67
ypr	35.42	20.35	-59.94
ypr	37.08	21.77	-58.21
ypr	38.17	22.89	-57.00
ypr	38.77	23.71	-56.29
ypr	39.22	24.47	-55.71
ypr	39.75	25.41	-54.93
ypr	40.41	26.68	-53.86
ypr	41.32	28.44	-52.36
ypr	42.19	30.52	-50.78
ypr	42.77	32.47	-49.49
ypr	43.36	34.06	-48.33
ypr	43.91	35.41	-47.32
ypr	44.24	36.57	-46.51
ypr	44.41	37.62	-45.85
ypr	44.76	38.83	-45.03
ypr	45.24	40.09	-44.09
ypr	45.65	41.30	-43.15
ypr	46.17	42.65	-42.10
ypr	46.70	43.95	-41.17
ypr	46.98	44.78	-40.65
ypr	46.97	45.16	-40.28

&lt;/pre&gt;

&lt;!--
&lt;p&gt;&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brrSar/btrlLwpZBKv/aMnOdk69NaOx8BPDXT6LYK/img.png&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/brrSar/btrlLwpZBKv/aMnOdk69NaOx8BPDXT6LYK/img.png&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;464&quot;&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mzI6F/btrlEnhf0Ih/4lixOasoGMW4WNVgkIr8ik/img.png&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/mzI6F/btrlEnhf0Ih/4lixOasoGMW4WNVgkIr8ik/img.png&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;89&quot;&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b04Zua/btrlDxkpqw8/UMa3EIG3kdquttD04FgWck/img.png&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/b04Zua/btrlDxkpqw8/UMa3EIG3kdquttD04FgWck/img.png&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;68&quot;&gt;&lt;/figure&gt;&lt;/p&gt;

## ???? - 4. 아두이노에서 기울기 센서(MPU-6050) 사용하기

MPU-6050은 아두이노에서 사용할 수 있는 기울기 센서 중 하나입니다. MPU-6050은 (중력)가속도 3축 + 자이로 3축을 합쳐서 6축 센서라고 불리는데 가속도 센서는 정적인 상태에서만 정확한 측정이 가능하므로 자이로 센서로 이를 보정하는 식으로 측정이 이루어집니다. (자이로 3축 + 가속도 2축 + 온도 이렇게 6축이라는데도 있습니다) 기능으로는 Pitch, Roll, Yaw 세 방향의 기울기를 측정할 수 있는데, 실제로 테스트를 해봤을 때 Yaw값의 경우는 다소 정확하지 않은 느낌을 받았습니다. 


## 배선도


## 관련 라이브러리 설치

1. 아두이노 IDE를 실행합니다.
2. 툴 -&gt; 라이브러리 관리 메뉴를 실행합니다.
3. 라이브러리 매니저 화면에서 MPU6050를 검색합니다.
4. MPU6050 by Electronic Cats를 설치합니다.


## 예제 실행

5. 파일 &gt;예제 밑에 MPU6050 항목이 생긴 것을 볼 수 있습니다.
6. 이 밑에 있는 MPU6050_DMP6 예제를 열어서 컴파일 후 업로드합니다.
7. 툴 &gt; 시리얼 모니터를 엽니다.
8. 속도를 115200 보드레이트로 변경합니다. 
9. 시리얼 모니터 상단 입력란에 아무 값이나 입력하고 전송을 누르면 화면 출력이 시작됩니다.

## 실행 결과

- 센서를 기울임에 따라 Yaw, Pitch, Roll 값이 변경되는 것을 확인할 수 있습니다.

&lt;pre  style=&quot;border-style: solid; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;/pre&gt;



Initializing DMP...
Enabling DMP...
Enabling interrupt detection (Arduino external interrupt 0)...
DMP ready! Waiting for first interrupt...

ypr	30.79	18.42	-64.17
ypr	31.31	18.09	-63.87
ypr	31.79	18.02	-63.55
ypr	32.53	18.19	-62.95
ypr	33.78	19.00	-61.67
ypr	35.42	20.35	-59.94
ypr	37.08	21.77	-58.21
ypr	38.17	22.89	-57.00
ypr	38.77	23.71	-56.29
ypr	39.22	24.47	-55.71
ypr	39.75	25.41	-54.93
ypr	40.41	26.68	-53.86
ypr	41.32	28.44	-52.36
ypr	42.19	30.52	-50.78
ypr	42.77	32.47	-49.49
ypr	43.36	34.06	-48.33
ypr	43.91	35.41	-47.32
ypr	44.24	36.57	-46.51
ypr	44.41	37.62	-45.85
ypr	44.76	38.83	-45.03
ypr	45.24	40.09	-44.09
ypr	45.65	41.30	-43.15
ypr	46.17	42.65	-42.10
ypr	46.70	43.95	-41.17
ypr	46.98	44.78	-40.65
ypr	46.97	45.16	-40.28



--&gt;</description>
      <category>1. 연구 모듈/비분류</category>
      <category>아두이노</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/212</guid>
      <comments>https://devnauts.tistory.com/212#entry212comment</comments>
      <pubDate>Wed, 24 Nov 2021 07:50:39 +0900</pubDate>
    </item>
    <item>
      <title>아두이노에서 스위치 사용하기 (내부풀업 방식)</title>
      <link>https://devnauts.tistory.com/211</link>
      <description>&lt;h2 id=&quot;누를-것이-필요해-내부풀업-사용&quot; data-ke-size=&quot;size26&quot;&gt;???? - 3. 누를 것이 필요해! (내부풀업 사용)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 스위치에 풀다운 저항을 붙여서 많이 사용하는데, 여기서는 귀차니즘에 굴복하라!는 일일과제 달성을 위하여 내부 풀업 저항을 이용한 방법을 확인해보겠습니다. 이 경우, 출력값이 버튼을 누르지 않았을 때 HIGH, 눌렀을 경우에 LOW로 들어오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;배선도&quot; data-ke-size=&quot;size23&quot;&gt;배선도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;5864&quot; data-origin-height=&quot;3208&quot; data-filename=&quot;push2.png&quot; width=&quot;525&quot; height=&quot;287&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B6dBm/btrdFn3L35e/fDRXFFbLsopkzZwAX0PQT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B6dBm/btrdFn3L35e/fDRXFFbLsopkzZwAX0PQT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B6dBm/btrdFn3L35e/fDRXFFbLsopkzZwAX0PQT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB6dBm%2FbtrdFn3L35e%2FfDRXFFbLsopkzZwAX0PQT0%2Fimg.png&quot; data-origin-width=&quot;5864&quot; data-origin-height=&quot;3208&quot; data-filename=&quot;push2.png&quot; width=&quot;525&quot; height=&quot;287&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;소스&quot; data-ke-size=&quot;size23&quot;&gt;소스&lt;/h3&gt;
&lt;pre class=&quot;brush:c arduino&quot;&gt;void setup() {
  pinMode(4, INPUT_PULLUP);
}

void loop() {
  int buttonD4 = digitalRead(4);

  if (buttonD4 == LOW) {
    Serial.println(&quot;button pressed!&quot;);
  }
}

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;실행-결과&quot; data-ke-size=&quot;size23&quot;&gt;실행 결과&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 소스를 테스트해보면 위에서 말한대로 입력이 들어오는 것을 확인할 수 있다.&lt;/li&gt;
&lt;li&gt;하지만 실사용의 경우에는 아래와 같이 previous 값 관리를 해야 버튼이 한번 눌릴 때 이벤트 처리가 여러번 되는 것을 방지할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;brush:c arduino&quot;&gt;void setup() {
  pinMode(4, INPUT_PULLUP);
}

int buttonD4Prev = HIGH;

void loop() {
  int buttonD4 = digitalRead(4);

  if (buttonD4Prev == HIGH &amp;amp;&amp;amp; buttonD4 == LOW) {
    Serial.println(&quot;button pressed!&quot;);
  }
  buttonD4Prev = buttonD4;
}

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>1. 연구 모듈/비분류</category>
      <category>아두이노</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/211</guid>
      <comments>https://devnauts.tistory.com/211#entry211comment</comments>
      <pubDate>Fri, 20 Aug 2021 07:38:58 +0900</pubDate>
    </item>
    <item>
      <title>아두이노에서 포텐셔미터 사용하기</title>
      <link>https://devnauts.tistory.com/210</link>
      <description>&lt;h2 id=&quot;돌릴-것이-필요해-포텐셔미터&quot; data-ke-size=&quot;size26&quot;&gt;???? - 2. 돌릴 것이 필요해! (포텐셔미터)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흔히 가변저항으로 알려진 포텐셔미터의 사용법을 확인해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;배선도&quot; data-ke-size=&quot;size23&quot;&gt;배선도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;4008&quot; data-origin-height=&quot;2424&quot; data-filename=&quot;poten2.png&quot; width=&quot;523&quot; height=&quot;316&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKKcKz/btrdEklWxly/CfkgcSnX1a3L9krB5Kbuak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKKcKz/btrdEklWxly/CfkgcSnX1a3L9krB5Kbuak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKKcKz/btrdEklWxly/CfkgcSnX1a3L9krB5Kbuak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKKcKz%2FbtrdEklWxly%2FCfkgcSnX1a3L9krB5Kbuak%2Fimg.png&quot; data-origin-width=&quot;4008&quot; data-origin-height=&quot;2424&quot; data-filename=&quot;poten2.png&quot; width=&quot;523&quot; height=&quot;316&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;소스&quot; data-ke-size=&quot;size23&quot;&gt;소스&lt;/h3&gt;
&lt;pre class=&quot;brush:c arduino&quot;&gt;void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
}

&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;실행-결과&quot; data-ke-size=&quot;size23&quot;&gt;실행 결과&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시리얼 모니터를 통해 결과를 확인해보면 포텐셔미터를 돌림에 따라 0 ~ 1023 사이의 값이 출력되는 것을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>1. 연구 모듈/비분류</category>
      <category>아두이노</category>
      <author>사용자-1</author>
      <guid isPermaLink="true">https://devnauts.tistory.com/210</guid>
      <comments>https://devnauts.tistory.com/210#entry210comment</comments>
      <pubDate>Fri, 20 Aug 2021 07:35:24 +0900</pubDate>
    </item>
  </channel>
</rss>