<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=NUM_%ED%8C%A8%EB%93%9C_%ED%82%A4%EB%B3%B4%EB%93%9C</id>
	<title>NUM 패드 키보드 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=NUM_%ED%8C%A8%EB%93%9C_%ED%82%A4%EB%B3%B4%EB%93%9C"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=NUM_%ED%8C%A8%EB%93%9C_%ED%82%A4%EB%B3%B4%EB%93%9C&amp;action=history"/>
	<updated>2026-09-08T13:06:56Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=NUM_%ED%8C%A8%EB%93%9C_%ED%82%A4%EB%B3%B4%EB%93%9C&amp;diff=2583&amp;oldid=prev</id>
		<title>2026년 8월 22일 (토) 03:50에 Devcafe님의 편집</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=NUM_%ED%8C%A8%EB%93%9C_%ED%82%A4%EB%B3%B4%EB%93%9C&amp;diff=2583&amp;oldid=prev"/>
		<updated>2026-08-22T03:50:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026년 8월 22일 (토) 12:50 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot;&gt;9번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;9번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== KEY 배선 ===  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== KEY 배선 ===  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;2.1 수직으로 연결한 ROW&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;2.1 수직으로 연결한 ROW&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ROW1 : GPIO 10&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;ROW1 : GPIO 10&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ROW2 : GPIO 9&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;ROW2 : GPIO 9&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ROW3 : GPIO 6&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;ROW3 : GPIO 6&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ROW4 : GPIO 8&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;ROW4 : GPIO 8&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;2.2 수평(저항 다이오드)으로 연결한 COL&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;2.2 수평(저항 다이오드)으로 연결한 COL&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;COL1 : GPIO 5&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;COL1 : GPIO 5&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;COL2 : GPIO 4&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;COL2 : GPIO 4&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;COL3 : GPIO 12&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;COL3 : GPIO 12&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== KEY 눌림시 실행되는 명령 ===  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== KEY 눌림시 실행되는 명령 ===  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K1] : 왼쪽 컨트롤 + INSERT키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K1] : 왼쪽 컨트롤 + INSERT키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K2] : 왼쪽 컨트롤 + 왼쪽 ALT키 + INSERT키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K2] : 왼쪽 컨트롤 + 왼쪽 ALT키 + INSERT키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K3] : 왼쪽 컨트롤 + 왼쪽 SHIFT키 + INSERT키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K3] : 왼쪽 컨트롤 + 왼쪽 SHIFT키 + INSERT키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K4] : 왼쪽 컨트롤 + F12키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K4] : 왼쪽 컨트롤 + F12키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K5] : 왼쪽 컨트롤 + F11키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K5] : 왼쪽 컨트롤 + F11키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K6] : 왼쪽 컨트롤 + F10키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K6] : 왼쪽 컨트롤 + F10키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K7] : 왼쪽 컨트롤 + 등호(=)키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K7] : 왼쪽 컨트롤 + 등호(=)키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K8] : 왼쪽 컨트롤 + 마이너스(-)키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K8] : 왼쪽 컨트롤 + 마이너스(-)키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K9] : 왼쪽 컨트롤 + F9키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K9] : 왼쪽 컨트롤 + F9키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[K10] : ESC키&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/ins&gt;[K10] : ESC키&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=NUM_%ED%8C%A8%EB%93%9C_%ED%82%A4%EB%B3%B4%EB%93%9C&amp;diff=2582&amp;oldid=prev</id>
		<title>Devcafe: 새 문서:  * ESP32-S3-Zero 칩을 사용하여 10개(K1~K10) 매크로 키패드 생성     === KEY 배열 ===   [K1][K2][K3]   [K4][K5][K6]   [K7][K8][K9][K10]  === KEY 배선 ===  2.1 수직으로 연결한 ROW ROW1 : GPIO 10 ROW2 : GPIO 9 ROW3 : GPIO 6 ROW4 : GPIO 8  2.2 수평(저항 다이오드)으로 연결한 COL COL1 : GPIO 5 COL2 : GPIO 4 COL3 : GPIO 12  === KEY 눌림시 실행되는 명령 ===  [K1] : 왼쪽 컨트롤 + INSERT키 [K2] : 왼쪽 컨트롤 + 왼쪽 ALT키 + INSER...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=NUM_%ED%8C%A8%EB%93%9C_%ED%82%A4%EB%B3%B4%EB%93%9C&amp;diff=2582&amp;oldid=prev"/>
		<updated>2026-08-22T03:49:39Z</updated>

		<summary type="html">&lt;p&gt;새 문서:  * ESP32-S3-Zero 칩을 사용하여 10개(K1~K10) 매크로 키패드 생성     === KEY 배열 ===   [K1][K2][K3]   [K4][K5][K6]   [K7][K8][K9][K10]  === KEY 배선 ===  2.1 수직으로 연결한 ROW ROW1 : GPIO 10 ROW2 : GPIO 9 ROW3 : GPIO 6 ROW4 : GPIO 8  2.2 수평(저항 다이오드)으로 연결한 COL COL1 : GPIO 5 COL2 : GPIO 4 COL3 : GPIO 12  === KEY 눌림시 실행되는 명령 ===  [K1] : 왼쪽 컨트롤 + INSERT키 [K2] : 왼쪽 컨트롤 + 왼쪽 ALT키 + INSER...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
* ESP32-S3-Zero 칩을 사용하여 10개(K1~K10) 매크로 키패드 생성 &lt;br /&gt;
  &lt;br /&gt;
=== KEY 배열 ===&lt;br /&gt;
  [K1][K2][K3]&lt;br /&gt;
  [K4][K5][K6]&lt;br /&gt;
  [K7][K8][K9][K10]&lt;br /&gt;
&lt;br /&gt;
=== KEY 배선 === &lt;br /&gt;
2.1 수직으로 연결한 ROW&lt;br /&gt;
ROW1 : GPIO 10&lt;br /&gt;
ROW2 : GPIO 9&lt;br /&gt;
ROW3 : GPIO 6&lt;br /&gt;
ROW4 : GPIO 8&lt;br /&gt;
&lt;br /&gt;
2.2 수평(저항 다이오드)으로 연결한 COL&lt;br /&gt;
COL1 : GPIO 5&lt;br /&gt;
COL2 : GPIO 4&lt;br /&gt;
COL3 : GPIO 12&lt;br /&gt;
&lt;br /&gt;
=== KEY 눌림시 실행되는 명령 === &lt;br /&gt;
[K1] : 왼쪽 컨트롤 + INSERT키&lt;br /&gt;
[K2] : 왼쪽 컨트롤 + 왼쪽 ALT키 + INSERT키&lt;br /&gt;
[K3] : 왼쪽 컨트롤 + 왼쪽 SHIFT키 + INSERT키&lt;br /&gt;
[K4] : 왼쪽 컨트롤 + F12키&lt;br /&gt;
[K5] : 왼쪽 컨트롤 + F11키&lt;br /&gt;
[K6] : 왼쪽 컨트롤 + F10키&lt;br /&gt;
[K7] : 왼쪽 컨트롤 + 등호(=)키&lt;br /&gt;
[K8] : 왼쪽 컨트롤 + 마이너스(-)키&lt;br /&gt;
[K9] : 왼쪽 컨트롤 + F9키&lt;br /&gt;
[K10] : ESC키&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  펌웨어 만들기 === &lt;br /&gt;
:- arduino IDE&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  ESP32-S3-Zero 10키(K1~K10) 매크로 키패드 - USB HID(유선)&lt;br /&gt;
  - Arduino IDE 설정 필수:&lt;br /&gt;
      Tools &amp;gt; USB Mode        = &amp;quot;USB-OTG (TinyUSB)&amp;quot;&lt;br /&gt;
      Tools &amp;gt; USB CDC On Boot = &amp;quot;Disabled&amp;quot;  (CDC 켜져 있으면 HID가 안 잡히는 경우가 있음)&lt;br /&gt;
    보드는 Tools &amp;gt; Board &amp;gt; esp32 &amp;gt; &amp;quot;Waveshare ESP32-S3-Zero&amp;quot; 선택&lt;br /&gt;
    &lt;br /&gt;
  키 배열:&lt;br /&gt;
    [K1][K2][K3]&lt;br /&gt;
    [K4][K5][K6]&lt;br /&gt;
    [K7][K8][K9][K10]&lt;br /&gt;
&lt;br /&gt;
  실제 매트릭스는 4행 x 3열이며, K10만 Row4/Col1에 위치(Row4의 Col2,3은 미사용):&lt;br /&gt;
    Row1: K1  K2  K3&lt;br /&gt;
    Row2: K4  K5  K6&lt;br /&gt;
    Row3: K7  K8  K9&lt;br /&gt;
    Row4: K10  -   -&lt;br /&gt;
&lt;br /&gt;
  배선:&lt;br /&gt;
    ROW1 = GPIO10   ROW2 = GPIO9   ROW3 = GPIO6   ROW4 = GPIO8   (전부 OUTPUT)&lt;br /&gt;
    COL1 = GPIO5    COL2 = GPIO4   COL3 = GPIO12                  (전부 INPUT_PULLUP)&lt;br /&gt;
&lt;br /&gt;
  다이오드 방향: 캐소드(띠)가 Row 쪽을 향하도록 납땜하세요.&lt;br /&gt;
    (Row를 LOW로 구동 시, Col의 내부 풀업에서 전류가 흘러들어와야 눌림 감지)&lt;br /&gt;
&lt;br /&gt;
  보드 설정 (Tools 메뉴):&lt;br /&gt;
    Board          : ESP32S3 Dev Module&lt;br /&gt;
    USB Mode       : USB-OTG (TinyUSB)   ← 필수&lt;br /&gt;
    USB CDC On Boot: Disabled             (필요하면 Enabled로 바꿔 시리얼 디버그 확인 가능)&lt;br /&gt;
    Flash Size     : 4MB (32Mb)           ← 실제 칩과 반드시 일치시킬 것&lt;br /&gt;
&lt;br /&gt;
  동작: [K1]~[K9]는 지정된 단축키 조합을, [K10]은 ESC를 전송합니다.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;USB.h&amp;gt;&lt;br /&gt;
#include &amp;lt;USBHIDKeyboard.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
USBHIDKeyboard Keyboard;&lt;br /&gt;
&lt;br /&gt;
const int ROW_PINS[4] = {10, 9, 6, 8};   // R1, R2, R3, R4&lt;br /&gt;
const int COL_PINS[3] = {5, 4, 12};      // C1, C2, C3&lt;br /&gt;
&lt;br /&gt;
// 키맵: keys[] 배열에 최대 3개 키코드까지 지정 (0=미사용)&lt;br /&gt;
// 예: {KEY_LEFT_CTRL, KEY_INSERT, 0} → Ctrl+Insert&lt;br /&gt;
struct KeyAction {&lt;br /&gt;
  uint8_t keys[3];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
KeyAction keymap[4][3] = {&lt;br /&gt;
  { {KEY_LEFT_CTRL, KEY_INSERT, 0},                    // K1: Ctrl+Insert&lt;br /&gt;
    {KEY_LEFT_CTRL, KEY_LEFT_ALT, KEY_INSERT},         // K2: Ctrl+Alt+Insert&lt;br /&gt;
    {KEY_LEFT_CTRL, KEY_LEFT_SHIFT, KEY_INSERT} },     // K3: Ctrl+Shift+Insert&lt;br /&gt;
&lt;br /&gt;
  { {KEY_LEFT_CTRL, KEY_F12, 0},                       // K4: Ctrl+F12&lt;br /&gt;
    {KEY_LEFT_CTRL, KEY_F11, 0},                       // K5: Ctrl+F11&lt;br /&gt;
    {KEY_LEFT_CTRL, KEY_F10, 0} },                     // K6: Ctrl+F10&lt;br /&gt;
&lt;br /&gt;
  { {KEY_LEFT_CTRL, &amp;#039;=&amp;#039;, 0},                           // K7: Ctrl+(=)&lt;br /&gt;
    {KEY_LEFT_CTRL, &amp;#039;-&amp;#039;, 0},                           // K8: Ctrl+(-)&lt;br /&gt;
    {KEY_LEFT_CTRL, KEY_F9, 0} },                      // K9: Ctrl+F9&lt;br /&gt;
&lt;br /&gt;
  { {KEY_ESC, 0, 0},                                   // K10: ESC&lt;br /&gt;
    {0, 0, 0},                                         // (미사용)&lt;br /&gt;
    {0, 0, 0} }                                        // (미사용)&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bool keyState[4][3] = { {false} };&lt;br /&gt;
unsigned long lastDebounceTime[4][3] = { {0} };&lt;br /&gt;
const unsigned long DEBOUNCE_MS = 15;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  for (int r = 0; r &amp;lt; 4; r++) {&lt;br /&gt;
    pinMode(ROW_PINS[r], OUTPUT);&lt;br /&gt;
    digitalWrite(ROW_PINS[r], HIGH); // 평소 HIGH, 스캔할 때만 LOW&lt;br /&gt;
  }&lt;br /&gt;
  for (int c = 0; c &amp;lt; 3; c++) {&lt;br /&gt;
    pinMode(COL_PINS[c], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  USB.begin();&lt;br /&gt;
  Keyboard.begin();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void pressKeys(const KeyAction &amp;amp;action) {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
    if (action.keys[i] != 0) Keyboard.press(action.keys[i]);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void scanMatrix() {&lt;br /&gt;
  for (int r = 0; r &amp;lt; 4; r++) {&lt;br /&gt;
    digitalWrite(ROW_PINS[r], LOW);&lt;br /&gt;
    delayMicroseconds(20);&lt;br /&gt;
&lt;br /&gt;
    for (int c = 0; c &amp;lt; 3; c++) {&lt;br /&gt;
      bool pressed = (digitalRead(COL_PINS[c]) == LOW);&lt;br /&gt;
      unsigned long now = millis();&lt;br /&gt;
&lt;br /&gt;
      if (pressed != keyState[r][c] &amp;amp;&amp;amp; (now - lastDebounceTime[r][c]) &amp;gt; DEBOUNCE_MS) {&lt;br /&gt;
        lastDebounceTime[r][c] = now;&lt;br /&gt;
        keyState[r][c] = pressed;&lt;br /&gt;
&lt;br /&gt;
        if (pressed) {&lt;br /&gt;
          pressKeys(keymap[r][c]);&lt;br /&gt;
        } else {&lt;br /&gt;
          Keyboard.releaseAll();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Serial.printf(&amp;quot;R%dC%d %s\n&amp;quot;, r + 1, c + 1, pressed ? &amp;quot;DOWN&amp;quot; : &amp;quot;UP&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    digitalWrite(ROW_PINS[r], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  scanMatrix();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>