산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

XOD를 사용한 코드 없는 LCD 메뉴 생성

구성품 및 소모품

Arduino UNO
× 1
DFRobot Arduino LCD/키패드 실드
× 1

앱 및 온라인 서비스

XOD 환경

이 프로젝트 정보

Arduino 개발 보드를 구동하는 프로세서는 할아버지의 마이크로컨트롤러가 아닙니다. 이 프로세서는 처리 능력이 뛰어나며 여러 유형의 물리적 하드웨어와 센서를 동시에 모니터링하고 제어하는 ​​데 사용할 수 있습니다. Arduino용 XOD 그래픽 프로그래밍 IDE는 하드웨어 설계의 신속한 프로토타이핑 작업을 단순화할 수 있지만 시스템이 복잡해짐에 따라 사용자 제어 및 정보 관리의 문제가 있습니다. 논리적으로 제어합니다. 전용 버튼과 스위치는 간단한 프로젝트에서 작동하지만 곧 이를 배열하는 논리적 방법(또는 인클로저에 놓을 장소)이 없어집니다. 많은 디자인은 이러한 종류의 피드백을 제공하기 위해 특정 유형의 디스플레이를 사용합니다. 설정을 편집하고 요리 시간을 입력할 수 있는 작은 화면과 모호한 설정에 액세스하기 위한 너무 많은 "메뉴 다이빙"은 사용자 경험을 손상시킬 수 있지만 메뉴 기반 인터페이스는 모든 종류의 프로젝트에서 현실입니다.

마이크로컨트롤러용 C 또는 C++로 메뉴 기반 인터페이스를 개발하기 위한 소프트웨어 프레임워크는 학습 곡선이 가파르고 모든 것이 다른 모든 것과 상호 작용하는 경우가 많기 때문에 빠른 설계 변경이 어려울 수 있습니다. 이 프로젝트의 목표는 XOD 그래픽 프로그래밍 환경을 사용하여 끌어서 놓기/WYSIWYG 스타일의 인터페이스를 사용하여 Arduino 호환 마이크로컨트롤러 프로젝트에 대한 메뉴 기반 인터페이스의 프로토타입을 빠르게 제공하는 기능을 제공하는 것이었습니다. 생성된 메뉴 구조의 출력 및 입력 매개변수는 모듈식이며 일반적이며 다양한 입력 소스(스위치, 버튼, 인코더)와 함께 사용할 수 있어야 하며 광범위한 사용자에게 제공될 수 있는 일련의 일반 텍스트 출력을 생성합니다. 이 예에서 사용된 여러 줄 텍스트 LCD 모듈을 포함하여 다양한 XOD 지원 디스플레이 유형.

이 프로젝트에서 사용하는 XOD 환경에 익숙하지 않다면 먼저 xod.io에서 해당 프로젝트에 대한 자습서를 확인하십시오.

간단한 동기 부여 예제 스케치의 스크린샷은 다음과 같습니다. 이 XOD 패치 다이어그램을 섹션별로 살펴보고 모든 것이 어떻게 조화를 이루는지 설명하겠습니다.

<울>
  • 메뉴 컨트롤러 인터페이스 섹션
  • XOD의 패치 편집 화면 오른쪽에는 4개의 노드가 내림차순으로 연결되어 있습니다. 위에서 아래로 먼저 아날로그 입력 유형 노드가 있으며 Arduino의 아날로그 입력 포트 중 하나에 연결하도록 선택됩니다. 내 테스트에서 ATMega328 8비트 프로세서와 함께 Arduino Uno를 사용했으며 그 위에 16x2 LCD/키패드 실드가 연결되어 있습니다. 쉴드의 키패드는 쉴드 핀을 통해 Arduino의 "A0" 아날로그 입력에 연결되고 하드웨어는 패드의 버튼이 눌러지는 Arduino에 신호를 보내기 위해 다양한 레벨의 전압을 생성합니다.

    Arduino 스케치에 직접 인터페이스하지 않는 키패드의 "재설정" 버튼 외에 이 유형의 디스플레이 실드는 4개의 방향 버튼(위, 아래, 왼쪽 및 오른쪽, "선택" 버튼)을 제공합니다. 아날로그 입력 노드에 의해 공급되는 두 번째 노드에는 개별 키에 해당하는 다른 전압을 디코딩하는 코드가 포함되어 있으며 어떤 버튼을 눌렀는지에 따라 펄스형 트리거를 출력합니다. "타임아웃" 입력이 제공되어 XOD 개발자가 LCD 실드 키패드의 디바운스 타임아웃을 조정하여 잘못된 트리거를 방지하고 특정 애플리케이션의 버튼 또는 스위치 유형에 맞게 조정할 수 있습니다.

    아래의 세 번째 노드는 메뉴 컨트롤러 유형 노드로, 제어판에서 펄스 유형 트리거를 수락하고 메뉴 트리를 탐색하고 메뉴 트리의 상태 업데이트를 생성하는 선택 항목을 만드는 논리를 처리하는 코드가 포함되어 있습니다.

    현재 구현된 대로 사용자가 변경할 수 있는 일부 매개변수를 나타내는 제어 패널의 전위차계 또는 다이얼과 같이 외부 제어에서 변경할 수 있는 매개변수일 수 있는 단일 숫자 유형 입력을 허용합니다. 주어진 리프 유형 메뉴가 "Invoke" 입력에 대한 펄스를 수신하는 메뉴 컨트롤러에 의해 선택되면 왼쪽 메뉴 트리에서 사용자가 현재 보고 있는 화면 노드가 자체적으로 펄스를 출력합니다. 출력하고 또한 매개변수 변경 사항을 보냅니다. Arduino가 켜질 때 디스플레이에 시작 화면을 생성하는 데 사용할 수 있는 두 개의 문자열 입력도 있습니다.

    그 노드 뒤에는 XOD 환경 표준 라이브러리의 스톡 16x2 LCD 컨트롤러 모듈이 있지만 모듈을 사용할 수 있는 모든 유형의 디스플레이를 사용하여 여기에 출력 텍스트를 표시할 수 있습니다.

    <울>
  • 메뉴 트리 섹션
  • 스케치 스크린샷의 맨 위에는 트리와 같은 구조가 있는데, 컴파일되고 트리의 최종 출력 "루트"가 이를 수락하는 메뉴 컨트롤러 입력으로 라우팅되면 그림과 같이 탐색 가능한 메뉴가 자동으로 생성됩니다. 그래픽 디자이너. 현재 구현된 세 가지 유형의 메뉴 트리 노드인 "잎" 유형 메뉴 - 주황색 입력 포트가 없는 최종 하위 메뉴 - 이것은 사용자가 제어할 수 있는 일부 작업 또는 매개변수를 나타내며, 사용자가 여러 하위 하위 메뉴 중에서 선택할 수 있는 입력 및 출력과 하위 메뉴를 함께 그룹화하여 분기 유형 메뉴의 입력에 공급하여 그룹을 만드는 "연결" 유형 메뉴 옵션. 이 노드 집합을 연결하는 방법은 다이어그램에서 다소 자명할 것입니다.

    "분기" 유형 메뉴가 표시될 때 "호출"을 선택하면 잎 유형 메뉴처럼 출력이 생성되지 않고 연관된 하위 메뉴 그룹으로 내려갑니다. 서브 서브 메뉴, 서브 서브 서브 메뉴 등이 가능합니다! 특정 Arduino 모델 프로세서의 사용 가능한 RAM 및 플래시 메모리 리소스에 의해 주로 제한되는 복잡한 구조를 구현할 수 있습니다.

    <울>
  • 출력 섹션
  • 이 예에서 출력 섹션은 리프 유형 메뉴가 Arduino의 출력 핀을 통해 외부 하드웨어에 인터페이스하는 곳입니다. 각 리프 유형 메뉴에는 관련 디지털 출력 핀을 켜고 끄기 위해 버스를 통해 해당 플립플롭에 연결하는 펄스 유형 출력이 있습니다. 이러한 배열은 외부 릴레이나 LED를 제어하는 ​​데 사용할 수 있지만 펄스 출력은 매우 일반적이며 리프 유형 메뉴 화면에 액세스할 때 "Invoke"를 선택할 때 생성되는 출력 펄스는 다음과 같은 많은 작업을 수행하는 데 사용할 수 있습니다. 메뉴 컨트롤러의 매개변수 유형 입력 포트의 매개변수 데이터가 향후 사용을 위해 유지되는 내부 XOD 버퍼 유형 노드를 업데이트합니다.

    <울>
  • 현재 알려진 문제
  • 이 노드 세트는 테스트를 거쳤으며 Arduino Uno에서 그대로 정상적으로 작동해야 하지만 이 프로젝트의 기한까지 해결되지 않은 몇 가지 문제가 남아 있습니다. 현재로서는 스케치를 컴파일할 수 있는 트리 어딘가에 분기 유형 메뉴가 있어야 하지만 대부분의 프로젝트에서는 최소한 하나는 갖고 싶어할 것입니다. 인터페이스의 제목 화면으로 완전히 돌아가도록 의도된 메뉴 컨트롤러에 대한 "상위" 메뉴 입력은 현재 구현되지 않았지만 다음 개정판에서는 쉬운 기능이 되어야 합니다.

    4줄 디스플레이는 메뉴 컨트롤러 노드에서 지원되지만 4줄 텍스트 입력이 있는 리프 유형 메뉴 인터페이스는 아직 작성되지 않았습니다. 이 유틸리티의 메모리 오버헤드를 줄이기 위해 많은 노력을 기울였지만 XOD 변환기가 현재 상수 문자열을 저장하는 방식은 매우 낮은 RAM 오버헤드에 최적이 아니며 메뉴 기반 인터페이스에는 많은 텍스트가 있는 경향이 있습니다. 이 프로젝트의 경우 더 긴 문자열이 귀중한 프로그램 RAM을 소모하지 않도록 하기 위해 임시 해결책이 개발되었고 패치에 플래시 문자열 유형 노드 세트가 추가되었습니다. XOD 환경 업데이트에서 이 문제가 해결되기를 바라지만 현재로서는 해결 방법이 괜찮습니다.

    플래시 문자열 유형 노드를 사용하는 것은 그다지 어렵지 않지만 프로그램 메모리에 저장된 각각의 새 문자열에 대해 패치와 코드를 복제하고 노드 자체에 포함된 C++ 코드를 클릭하여 출력 문자열을 편집해야 합니다.

    리프 및 브랜치 노드의 "ID" 입력에는 아직 기능이 없습니다. 각 하위 메뉴 세트에 연결된 ID 번호가 순서대로 정렬되어 사용자가 디스플레이 세트에서 자신의 위치를 ​​추적할 수 있도록 하는 것이 좋지만 이를 C++로 코딩하는 방법에 대해서는 좀 더 생각해야 합니다. 자동으로 발생합니다.

    <울>
  • 계속 작업
  • ARM과 같은 AVR/ATmega 장치 외에 다른 Arduino 장치에 대한 추가 버그 테스트 및 테스트를 수행해야 합니다. 현재 메뉴 노드 유형 세트는 입력 및 출력이 더 다양해야 하므로 다소 제한적입니다. 런타임에 트리 구성 요소를 상호 연결/연결하는 대신 더 많은 컴파일 타임 메타프로그래밍을 사용하고 플래시 메모리에 많은 데이터를 저장하여 RAM 오버헤드를 줄이는 작업을 계속합니다.

    2/19/19 - 두 번째 예.

    이 두 번째 예제 스케치 스크린샷은 메뉴 컨트롤러를 사용하여 외부 또는 내부 값을 컨트롤러에 입력하고, 현재 및 이전 값을 원하는 메뉴 페이지에 표시하고, 새 값을 선택하고 버퍼에 저장하는 방법을 보여줍니다.

    오른쪽에서 메뉴 컨트롤러 노드는 "시계" 노드에 의해 공급되는 카운터의 출력으로 공급됩니다. 그러나 이것은 모든 종류의 내부 데이터 값이거나 아날로그 입력에 연결된 전위차계의 외부 값일 수 있습니다. 카운터의 출력은 또한 문자열 형식화 노드로 전송되고 일부 디스플레이 텍스트와 연결되어 해당 메뉴 페이지가 표시될 때 LCD의 두 번째 줄에 컨트롤러가 수신하는 현재 값을 표시합니다.

    리프 메뉴 "A"의 "호출" 및 "매개변수" 출력은 XOD 표준 라이브러리의 "버퍼" 노드로 전송됩니다. 그런 다음 버퍼의 출력은 XOD 스케치에서 피드백 루프를 분리하는 데 필요한 "지연" 노드를 제외하고 이전과 유사한 배열로 다시 라우팅됩니다. 버퍼에 저장된 값은 LCD의 첫 번째 줄에 표시됩니다.

    메뉴 컨트롤러 노드가 키패드 컨트롤러에서 "invoke" 트리거 펄스를 수신하면 A-out 노드는 거기에 있는 메뉴 컨트롤러의 매개변수 입력 값(이 경우 카운터 전류 값 및 "invoked" 트리거)을 출력합니다. 버퍼의 업데이트 루틴을 활성화하고 새 매개변수를 버퍼에 저장하는 펄스입니다. 그러면 디스플레이가 자동으로 업데이트되어 새로 저장된 값을 반영합니다.

    버퍼의 출력 포트는 사용자가 선택한 새 데이터 값을 반영하도록 동작을 변경하기 위해 원하는 수의 다른 노드로 라우팅될 수도 있습니다.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • XOD 메뉴 시스템 라이브러리
  • XOD 메뉴 시스템 라이브러리C/C++
    https://xod.io/libs/bitrex/xod-menu-system-11

    XOD 환경 내에서 파일 -> 라이브러리 추가... 옵션에서 스케치 라이브러리 브라우저에 bitrex/xod-menu-system을 추가합니다.
    미리보기 없음(다운로드만 가능).

    회로도

    XOD IDE를 사용하여 직접 열기 xodmenusystemrev1_1_4-1-19_fLVYrcSgbX.xodball

    제조공정

    1. Arduino만 사용하는 DTMF 디코더
    2. Arduino를 사용하여 모니터 Ambilight 만들기
    3. ARDUINO를 사용하는 초음파 부상 기계
    4. LCD 애니메이션 및 게임
    5. Arduino와 스마트폰을 사용한 DIY 전압계
    6. IoT를 사용한 심박수 모니터
    7. Arduino Uno WiFi를 사용하는 WebServerBlink
    8. Arduino + Processing + PHP를 사용한 자동차 카운터
    9. arduino를 사용한 자동화된 Dino 게임
    10. Arduino 및 RDA8057M을 사용하는 FM 라디오