러시아어로 된 Arduino 프로그래밍. 블로그 › Arduino: 프로그래밍 없는 프로그래밍. 프로그래밍 언어에 대한 일반적인 설명

안녕하세요! 저는 선생님 Alikin Alexander Sergeevich입니다 추가 교육, 저는 Labinsk의 청소년 및 청소년 기술 센터에서 "로봇 공학" 및 "무선 공학" 클럽을 이끌고 있습니다. ArduBlock 프로그램을 사용하여 Arduino를 프로그래밍하는 간단한 방법에 대해 조금 이야기하고 싶습니다.

나는 이 프로그램을 교육 과정에 도입했고 그 결과에 매우 만족합니다. 특히 간단한 프로그램을 작성하거나 어떤 종류의 프로그램을 만들 때 어린이들 사이에서 큰 수요가 있습니다. 초기 단계복잡한 프로그램. ArduBlock은 그래픽 프로그래밍 환경입니다. 즉, 모든 작업은 러시아어로 서명된 작업이 포함된 그려진 그림으로 수행되므로 Arduino 플랫폼 학습이 크게 단순화됩니다. 이 프로그램 덕분에 초등학교 2학년 아이들도 아두이노 작업을 쉽게 익힐 수 있습니다.

예, 누군가 스크래치가 여전히 존재하며 Arduino 프로그래밍을 위한 매우 간단한 그래픽 환경이라고 말할 수도 있습니다. 그러나 스크래치는 Arduino를 플래시하지 않고 다음을 사용하여 제어만 합니다. USB 케이블. Arduino는 컴퓨터에 의존하며 자율적으로 작동할 수 없습니다. 자신만의 프로젝트를 만들 때 Arduino의 주요 요소는 자율성입니다. 특히 로봇 장치를 만들 때는 더욱 그렇습니다.

스탠포드가 제공하는 65개 전공 중 적어도 절반은 프로그래밍 기술이 필요합니다. 약 4년 전 그들은 소위 학원이라는 곳에 등장했습니다. 마드리드 기술 및 디지털 예술 엔지니어링 센터 소장인 Laura Raya는 사람들이 실업을 방지하는 유일한 방법은 로봇 제어 방법을 배우는 것이라고 믿습니다. "가전제품이 생존하고 자율적으로 작동하는 방식과 이유에 대한 논리를 이해하십시오."라고 그는 말합니다. 제품은 더 이상 매뉴얼과 함께 판매되지 않습니다. 최소한의 기술적 직관을 가질 것으로 예상됩니다. 우리가 하는 모든 일은 알고리즘을 따릅니다.

NXT 또는 EV3와 같은 잘 알려진 LEGO 로봇조차도 Arduino 프로그래밍에 ArduBlock 프로그램이 등장하면서 더 이상 학생들에게 그다지 흥미롭지 않습니다. Arduino는 또한 어떤 LEGO 구성 키트보다 훨씬 저렴하며 많은 구성 요소를 오래된 가전 제품에서 간단히 가져올 수 있습니다. ArduBlock 프로그램은 초보자뿐만 아니라 Arduino 플랫폼의 활성 사용자에게도 도움이 될 것입니다.

이제 모든 사람이 방법과 이유를 이해해야 할 때입니다. 마이크로컴퓨팅의 등장으로 새로운 세계. 컴퓨터는 우리가 근무 외 시간에 만든 것에 비해 엄청나게 복잡했습니다. 다음은 컴퓨터의 다이어그램입니다. 좋아요, 좀 더 교훈적인 것을 시도해 보겠습니다.

컴퓨터는 다음과 같은 부분으로 구성됩니다. 예를 들어 주소는 3단어 길이 또는 12비트였습니다. 즉, 간단히 말해서 내부 페이지 매김을 반대로 한 것입니다. 클럭은 740kHz였으며 초당 600개의 명령을 실행할 수 있었습니다. 마이크로컨트롤러는 개별 작업을 독립적이고 안정적이며 안정적으로 수행하도록 설계되었습니다. 마이크로 컨트롤러를 프로그래밍하여 센서를 읽고, 수족관의 온도를 결정하고, 온도가 너무 낮으면 히터를 켜도록 할 수 있습니다. 냉각량이 너무 많이 증가합니다.

그렇다면 ArduBlock은 무엇입니까?이미 말했듯이 이것은 그래픽 프로그래밍 환경입니다. 거의 완전히 러시아어로 번역되었습니다. 하지만 ArduBlock의 하이라이트는 이것뿐만 아니라 우리가 작성한 ArduBlock 프로그램이 코드로 변환된다는 사실입니다. 아두이노 IDE. 이 프로그램은 Arduino IDE 프로그래밍 환경에 내장되어 있습니다. 즉, 플러그인입니다.

아래는 Arduino IDE에서 깜박이는 LED와 변환된 프로그램의 예입니다. 프로그램을 사용한 모든 작업은 매우 간단하며 모든 학생이 이해할 수 있습니다.

밖에 너무 오래 방치됨 허용 범위, 알람이 울립니다. 직관에 어긋나지만 전체 컴퓨터를 사용하는 것보다 마이크로 컨트롤러를 사용하는 것이 더 쉽고 어쨌든 대포로 새를 죽이는 것입니다. 그러나 마이크로컨트롤러가 전자제품에 침투했을 때 마이크로컨트롤러는 나쁜 놈이었습니다. 매우 비우호적인 프로그래머를 고용해야 했습니다. 자외선 소스 아래에 칩을 배치하는 데 필요한 메모리를 삭제합니다.

프로그램의 16진수 키보드를 입력하는 프로그래머도 있었습니다. 너무 오랫동안, 너무 오랜 시간 동안 마이크로컨트롤러는 선택된 소수의 비공개 그룹이 소유해 왔습니다. 가격이 비싸고 사용하기 어려웠으며 학습 도구도 아니었습니다. 어떤 학생에게도 보이지 않습니다.


프로그램을 작업한 결과 Arduino를 프로그래밍할 수 있을 뿐만 아니라 우리가 이해하지 못하는 명령도 Arduino IDE의 텍스트 형식으로 학습할 수 있지만 표준 명령을 작성하기에는 너무 게으른 경우 빠르게 사용할 수 있습니다. ArduBlok에서 간단한 프로그램을 스케치하고 Arduino IDE에서 디버깅하려면 마우스를 사용하세요.

여기에 취미로 이루어진 거대한 커뮤니티와 기업의 전폭적인 지원을 추가하면 우리는 훌륭한 생태계를 갖게 됩니다. 칩의 접점을 읽고 쓸 때 액세스가 매우 편리합니다. 보시다시피 설정과 루프라는 두 가지 섹션이 있습니다. 설치는 한 번 완료되고 루프는 루프로 완료됩니다.

그러면 당신은 이렇게 말할 것입니다: "하지만 Cardoso는 매우 비쌉니다." 베르너 폰 브라운은 그의 사람이 될 것이다 가장 친한 친구, Peenemünde에서 이 칩이 담긴 상자를 찾으면요. 당신은 히틀러의 가장 친한 친구가 될 위험이 있습니다. 원래 디자인은 "디자이너와 예술가"를 위해 만들어졌으므로 학습 곡선이 매우 사용자 친화적입니다. 우리 주변에 있고 스스로 일을 하는 모든 기계는 누군가가 올바른 지시를 내렸기 때문에 그렇게 합니다.

ArduBlok을 설치하려면 먼저 Arduino 공식 웹사이트에서 Arduino IDE를 다운로드하여 설치하고 작업 시 설정을 이해해야 합니다. 아두이노 보드우노. 이를 수행하는 방법은 동일한 웹사이트나 Amperka에 설명되어 있거나 YouTube에서 시청하세요. 글쎄, 이 모든 것이 파악되면 여기 공식 웹사이트에서 ArduBlok을 다운로드해야 합니다. 최신 버전을 다운로드하는 것을 권장하지 않습니다. 초보자에게는 매우 복잡하지만 2013-07-12 버전이 가장 좋고 이 파일이 그곳에서 가장 인기가 있습니다.

실험 3: 한 번인가 아니면 항상인가?

컴퓨터 프로그램은 대개 구두로 작성됩니다. 각 블록은 첫 번째 이미지와 마찬가지로 여러 줄의 코드와 동일합니다. 이렇게 하면 프로그래밍 언어의 마법의 단어를 몰라도 복잡한 프로그램을 만들 수 있습니다. 본질적으로 차이점은 이것이다. 메인 루프에는 여러 번 반복하려는 모든 블록을 넣습니다.

이 프로그램은 메인 루프용입니다. 더 큰 프로그램으로 실험해 봅시다. 마지막으로 시작 지침과 마스터 루프 모두에 블록을 배치해 보세요.

  • 이전에 생성한 프로젝트로 돌아가거나 다시 시작하세요.
  • 이 작업을 한 번 수행할지 아니면 매번 반복할지 선택하세요.
  • 여러 블록을 차례로 배치해 보세요.
이런 프로그램 작성 방법은 매우 유용합니다.

그런 다음 다운로드한 파일의 이름을 ardublock-all 및 "documents" 폴더로 바꿉니다. Arduino > tools > ArduBlockTool > tool 폴더를 생성하고 후자에는 다운로드하고 이름을 바꾼 파일을 생성합니다. ArduBlok은 누구에게나 작동합니다 운영 체제, Linux에서도 XP, Win7, Win8, Win7의 모든 예에서 직접 확인했습니다. 프로그램 설치는 모든 시스템에서 동일합니다.


이 프로그램은 가지고 있는 컨트롤러 카드가 무엇인지, 컴퓨터가 정확히 어디에 있는지 자동으로 확인합니다. 많은 다른 유형컨트롤러 보드. 프로그램을 만들고 이를 커뮤니티와 공유하세요. 춤추거나 놀거나 원하는 대로 무엇이든 할 수 있습니다. 이것은 많은 세부 사항을 숨겨 프로그래밍을 훨씬 쉽게 해주는 도구입니다.

그러므로 우리는 이 구성요소의 하드웨어 I/O 레지스터를 읽거나 써야 하며, 핀 이름과 레이아웃을 이해하기 위해 핀아웃을 살펴봐야 합니다. 프로그래밍 언어란 무엇입니까? . 다른 언어와 마찬가지로 프로그래밍 언어에도 고유한 구문 규칙이 있습니다. 단점은 낯선 사람이 당신을 이해하려고 노력하는 것과는 달리 프로그래밍에서는 구문 규칙을 엄격하게 따르지 않으면 프로그램이 실행되지 않는다는 것입니다. 한 가지 중요한 이점이 있습니다. 모든 프로그래밍 언어는 유사합니다.

간단히 말해서 7z Mail 디스크에 아카이브를 준비했는데 압축을 풀면 2개의 폴더가 있습니다. 한 명은 이미 일하고 있어요 아두이노 프로그램 IDE 및 다른 폴더의 내용은 Documents 폴더로 전송되어야 합니다.

ArduBlok에서 작업하려면 Arduino IDE를 실행해야 합니다. 그런 다음 도구 탭으로 이동하여 ArduBlok 항목을 찾아 클릭합니다. 여기에 우리의 목표가 있습니다.

프로그램은 위에서 아래로 읽혀집니다. 이는 프로그램을 동적으로 만드는 일련의 명령과 조건으로 구성됩니다. 우리가 프로그램을 실행하면 컴퓨터용으로 컴파일되어 그 때 실행된다고 합니다. 프로그래밍을 하려면 수학을 잘해야 하나요? . 덧셈, 뺄셈, 나눗셈, 곱셈이 무엇인지 안다면 프로그래밍의 세계는 바로 여러분의 것입니다.

변수, 상수 및 유형

그런데 어디가 어려운 걸까요? . 인간 활동을 일련의 지침으로 변환합니다. 예. 사람은 자신의 눈을 사용하여 자기 앞에 있는 움직임을 매우 잘 감지할 수 있습니다. 프로그래머가 직면하는 질문은 다음과 같습니다. 당신의 목표가 방의 온도를 측정하는 프로그램을 설정하는 것이라고 가정해 보겠습니다. 이것이 정보를 저장하는 변수와 상수의 역할이다.


이제 프로그램 인터페이스를 살펴 보겠습니다. 이미 알고 있듯이 설정은 없지만 프로그래밍을 위한 아이콘이 많이 있으며 각 아이콘은 Arduino IDE 텍스트 형식의 명령을 전달합니다. 새 버전에는 더 많은 아이콘이 있으므로 ArduBlok으로 알아보세요. 최신 버전어렵고 일부 아이콘은 러시아어로 번역되지 않습니다.

실내 온도가 27°라고 가정해 보겠습니다. Arduino 언어에서는 다음과 같이 작성합니다. 변수 선언 끝에 세미콜론이 있음을 눈치챘을 것입니다. 그렇기 때문에 처음에는 실수를 하기도 하고, 그것은 지극히 정상적인 일이고, 받아들이는 습관입니다. 우리는 변수와 상수에 대해 이야기했습니다. 여기서는 온도가 변수입니다. 즉, 프로그램에서 언제든지 변경할 수 있습니다. 이를 위해 더 간단한 것은 없습니다. 이제 온도가 31°라고 가정하고 다음과 같이 작성하겠습니다.

그러면 온도 변수는 다음과 같습니다. 하지만 온도가 변하지 않고 일정하다고 선언하면 온도를 변경할 수 없습니다. 그러나 이는 보안과 최적화의 문제입니다. 분명히 작은 프로그램의 경우 차이를 느끼지 못할 것 같지만 대규모에서는 이것이 결정적인 문제가 됩니다. 작성하는 모든 내용을 정확하게 프로그래밍하는 습관을 들이면 모호하지 않고 보다 효율적인 코드를 작성할 수 있습니다.


"관리" 섹션에서는 다양한 주기를 찾을 수 있습니다.


"포트" 섹션에서는 포트의 값과 이에 연결된 사운드 이미터, 서보 또는 초음파 근접 센서를 관리할 수 있습니다.

정밀도에 관해 말하자면, 변수를 정수로 설정했다는 것을 알 수 있습니다. 이번에는 좀 더 크므로 문자열로 선언하겠습니다. 문자열은 위와 같이 인용되어야 합니다. 이는 테스트 및 조건에 매우 유용하며 나중에 이해하게 될 것입니다.

이 섹션에서는 세 가지를 볼 수 있습니다. 중요한 요소, 코드 작성에 도움이 될 것입니다. 집에 3개의 방 온도가 있고 집의 평균 온도를 유지하려고 한다고 가정해 보겠습니다. 변수 선언부터 시작해 보겠습니다. 평균 온도 값을 계산해 봅시다.


"숫자/상수" 섹션에서는 디지털 값을 선택하거나 변수를 생성할 수 있지만 아래 내용은 사용하지 않을 것입니다.


"연산자" 섹션에서는 필요한 모든 비교 및 ​​계산 연산자를 찾을 수 있습니다.

실제로 변수를 생성하고 여기에 다른 변수의 값을 할당하거나 여기에서처럼 여러 변수의 합계를 할당할 수 있습니다. 개선된 버전에서는 코드가 다음과 같습니다. 이제 평균 온도가 나왔으니 어딘가에 놓아두는 것이 좋을 것 같습니다.

정보를 어딘가에 표시하거나 전송할 수 있는 가능성은 많습니다. 이는 입력과 출력이 있는 대화로 표시됩니다. 위에서 작성한 코드입니다. 실제로 이 괄호 사이에 테스트에 매우 유용한 내용을 넣을 수 있습니다. 로딩이 완료되면 모니터에 평균 온도가 표시됩니다. 위에서 언급했듯이 인쇄는 프로그램을 테스트하고 디버깅하는 데 매우 강력한 도구입니다. 이를 어디에나 배치할 수 있으므로 변수에 올바른 값이 있는지 확인할 수 있습니다.


유틸리티 섹션은 주로 시간이 표시된 아이콘을 사용합니다.


"TinkerKit Bloks"는 구입한 TinkerKit 센서에 대한 섹션입니다. 물론 우리에게는 그런 세트가 없지만 이것이 아이콘이 다른 세트에 적합하지 않다는 의미는 아니며 반대로 LED를 켜거나 아이콘을 켜는 것과 같은 아이콘을 사용하는 것이 매우 편리합니다. 단추. 이 기호는 거의 모든 프로그램에서 사용됩니다. 그러나 특이한 점이 있습니다. 선택하면 포트를 나타내는 잘못된 아이콘이 있으므로 해당 아이콘을 제거하고 목록 상단의 "숫자/상수" 섹션에 있는 아이콘으로 대체해야 합니다.

아주 나쁜 것은 아니지만, 이 거만한 용어는 단순히 두 개 이상의 캐릭터 라인을 병합하는 것을 의미합니다. 실제로 여기서 해결책을 얻지 않는 한. 어느 좋은 프로그램제어 구조가 없을까요? 이것은 비동적 프로그램이 될 것입니다.

지금까지 우리가 설치한 작은 프로그램은 코딩 방법을 가르치는 데는 완벽하지만 약간 지루합니다. 프로그래밍의 목표는 제공된 내용에 따라 결정을 내리는 자율적인 프로그램을 만드는 것입니다. 이 부분에서는 가장 중요한 4가지 관리 구조를 살펴보겠습니다.


"DF 로봇" - 이 섹션은 지정된 센서가 있는 경우 사용되며 때로는 발견됩니다. 오늘의 예도 예외는 아닙니다. "조정 가능한 IR 스위치"와 "라인 센서"가 있습니다. "라인 센서"는 Amperka 회사 제품이기 때문에 사진의 센서와 다릅니다. 그들의 동작은 동일하지만 감도 조절기가 있기 때문에 Ampere 센서가 훨씬 좋습니다.

비교 연산자에 대한 작은 표를 외워야 합니다. 이 테이블은 모든 관리 구조에 유효합니다. 동일성을 테스트할 때 변수를 선언할 때 등호가 이미 사용되었기 때문에 단순한 등호 대신 이중 등호를 사용합니다.

이 예에서는 10이 5보다 큰지 여부를 확인합니다. true인 경우 녹색으로 둘러싸인 괄호 사이에서 실행됩니다. 거짓일 경우 노란색으로 둘러싸인 보상 사이에 적힌 내용이 실행됩니다. 그래서 당신은 이 유형의 유용성을 보기 시작했습니다. 10이 5보다 크므로 조건은 참이고 녹색으로 둘러싸인 괄호 안의 작업을 수행합니다. 뒤에 오는 내용은 무시됩니다.


“Seedstudio Grove” - 조이스틱만 있지만 이 섹션에서는 센서를 사용한 적이 없습니다. 새 버전에서는 이 섹션이 확장되었습니다.


그리고 마지막 섹션은 “링커 키트”입니다. 나는 그 안에 제시된 센서를 발견하지 못했습니다.

반면에 훨씬 더 필요한 경우에는 스위치라는 또 다른 제어 구조를 고려해야 합니다. 그리고 창 바로 뒤에는 변수를 테스트할 가치가 있다고 기록합니다. 즉, 어떤 경우도 선택하지 않으면 기본적으로 실행되는 것은 무엇이든 실행됩니다. 안에 영어 단어해킹을 의미한다 프랑스 국민. 이 명령은 스위치를 종료하고 싶다고 프로그램에 알릴 수 있기 때문에 매우 유용합니다. 이전에 사례를 이미 확인했더라도 스위치는 모든 사례를 확인한다는 점을 알아야 합니다.

스트립을 따라 움직이는 로봇에 대한 프로그램의 예를 보여주고 싶습니다. 로봇은 조립과 구입이 매우 간단하지만, 가장 먼저 해야 할 일이 있습니다. 획득 및 조립부터 시작하겠습니다.

다음은 부품 세트 자체이며 모든 것은 Amperka 웹 사이트에서 구매했습니다.


시간과 효율성 측면에서 잠재적인 이득이 있습니다. 우리가 이야기하고 있다고 가정 해 봅시다. 예, 표현식은 true이므로 중괄호 안에 있는 내용이 true인 경우 실행합니다. 표현식이 참인 경우에만 하나가 반환됩니다. 당신은 이해하겠지만, 당신이 설정한 설정을 사용한 루프일 뿐입니다. 강력하면서도 때로는 위험한 도구입니다.

비슷해 보이지만 덜 위험한 또 다른 주기가 있습니다. 이것이 우리의 최종 거버넌스 구조이자 포럼입니다. 위에서 설명한 것처럼 증분은 변수에 숫자를 추가하는 동작입니다. 반대 현상을 감소라고 하며 변수에서 숫자를 빼는 동작입니다. 증가와 감소는 숫자를 사용하여 수행되는 경우가 많습니다. 우리는 이런 식으로 증가할 수 있음을 보았습니다.

  1. AMP-B001 모터 쉴드 (2채널, 2A) RUB 1,890
  2. AMP-B017 트로이카 쉴드 RUB 1,690
  3. AMP-X053 배터리실 3×2 AA 1 60 RUR
  4. AMP-B018 디지털 라인 센서 RUB 2,580
  5. ROB0049 MiniQ 이륜 플랫폼 RUB 1,1890
  6. SEN0019 적외선 장애물 센서 RUB 1,390
  7. FIT0032 적외선 장애물 센서용 마운트 RUB 1,90
  8. A000066 아두이노 우노 1 1150 RUR


먼저 바퀴 달린 플랫폼을 조립하고 와이어를 모터에 납땜해 보겠습니다.


그런 다음 보드를 장착할 랙을 설치하겠습니다. 아두이노 우노오래된 것에서 가져온 것 마더보드또는 기타 유사한 고정 장치.


그런 다음 Arduino UNO 보드를 이 랙에 연결하지만 볼트 하나를 조일 수 없습니다. 커넥터가 방해가 됩니다. 물론 납땜을 풀 수도 있지만 이는 귀하의 재량에 달려 있습니다.


다음으로 우리는 고정합니다 적외선 센서특수 장착에 장애물이 있습니다. 감도 조절 장치가 상단에 위치해 있어 쉽게 조정할 수 있습니다.



이제 디지털 라인 센서를 설치합니다. 여기서는 두 개의 볼트와 4개의 너트를 찾아야 합니다. 플랫폼 자체와 라인 센서 사이에 두 개의 너트를 설치하고 나머지는 센서를 고정합니다.


다음으로 Motor Shield를 설치합니다. 그렇지 않으면 이를 모터 드라이버라고 부를 수 있습니다. 우리의 경우 점퍼에 주목하세요. 모터에 별도의 전원을 사용하지 않을 것이므로 이 위치에 설치합니다. 만일의 경우에 대비하여 Arduino UNO USB 커넥터의 우발적인 단락을 방지하기 위해 하단 부분은 전기 테이프로 밀봉되어 있습니다.



Motor Shield 위에 Troyka Shield를 설치합니다. 센서 연결의 편의를 위해 필요합니다. 우리가 사용하는 센서는 모두 디지털이므로 라인 센서는 핀이라고도 불리는 포트 8과 9에 연결되고 적외선 장애물 센서는 포트 12에 연결됩니다. 포트 4, 5, 6, 7은 모터 쉴드에서 모터를 제어하는 ​​데 사용되므로 사용할 수 없습니다. 학생들이 알아낼 수 있도록 특별히 빨간색 마커로 이 포트를 칠하기도 했습니다.


이미 눈치채셨다면 만약을 대비해 검은색 부싱을 추가해 우리가 설치한 배터리 칸이 날아가지 않도록 했습니다. 그리고 마지막으로 일반 탄성 밴드로 전체 구조를 고정합니다.

배터리함 연결에는 2가지 유형이 있습니다. Troyka Shield에 첫 번째 전선 연결. 전원 플러그를 납땜하여 Arduino UNO 보드 자체에 연결하는 것도 가능합니다.



우리 로봇이 준비되었습니다. 프로그래밍을 시작하기 전에 모든 것이 어떻게 작동하는지 배워야 합니다. 즉:
- 모터:
포트 4와 5는 하나의 모터를 제어하는 ​​데 사용되고, 6과 7은 다른 모터를 제어하는 ​​데 사용됩니다.
우리는 포트 5와 6의 PWM을 사용하여 모터의 회전 속도를 조절합니다.
포트 4와 7에 신호를 보내 앞으로 또는 뒤로.
- 센서:
우리는 모두 디지털이므로 1 또는 0의 형태로 논리 신호를 제공합니다.
그리고 이를 조정하기 위해 특수 조절 장치가 있으며 적합한 드라이버를 사용하여 교정할 수 있습니다.

자세한 내용은 Amperke에서 확인할 수 있습니다. 왜 여기에? Arduino 작업에 대한 많은 정보가 있기 때문입니다.

글쎄, 우리는 아마도 모든 것을 표면적으로 살펴보고 연구했으며 물론 로봇을 조립했을 것입니다. 이제 프로그래밍해야 합니다. 오랫동안 기다려온 프로그램입니다!


그리고 프로그램은 Arduino IDE로 변환되었습니다.

무효 설정() ( pinMode(8 , INPUT); pinMode(12 , INPUT); pinMode(9 , INPUT); pinMode(4 , OUTPUT); pinMode(7 , OUTPUT); pinMode(5, OUTPUT); pinMode(6 , OUTPUT); ) void loop() ( if (digitalRead(12)) ( if (digitalRead(8)) ( if (digitalRead(9)) ( digitalWrite(4, HIGH); 아날로그Write(5, 255); 아날로그Write( 6, 255); digitalWrite(7, HIGH); ) else ( digitalWrite(4, HIGH); AnalogWrite(5, 255); digitalWrite(6, 50); digitalWrite(7, LOW); ) ) else ( if (digitalRead (9)) ( digitalWrite(4, LOW); 아날로그Write(5, 50); 아날로그Write(6, 255); digitalWrite(7, HIGH); ) else ( digitalWrite(4, HIGH); 아날로그Write(5, 255); AnalogWrite(6, 255); digitalWrite(7, HIGH); ) else ( digitalWrite(4, HIGH); AnalogWrite(5, 0); digitalWrite(7, HIGH); ) )

결론적으로 이 프로그램은 교육을 위한 신의 선물이라고 말하고 싶습니다. 독학을 위해서라도 Arduino IDE 명령을 배우는 데 도움이 될 것입니다. 주요 특징은 50개 이상의 설치 아이콘이 있으며 "결함"이 시작된다는 것입니다. 예, 실제로 이것은 ArduBlok에서만 프로그래밍하는 것이 Arduino IDE에서의 프로그래밍을 가르쳐주지는 않기 때문에 이것이 가장 중요한 부분입니다. 소위 "글리치"는 프로그램의 정확한 디버깅을 위해 명령을 생각하고 기억해 볼 수 있는 기회를 제공합니다.

나는 당신의 성공을 기원합니다.

소개

Freeduino/Arduino는 C/C++를 기반으로 하는 특수 프로그래밍 언어로 프로그래밍되어 있으며 해당 기능을 사용할 수 있습니다. 엄밀히 말하면 별도의 아두이노 언어 Arduino 컴파일러가 없는 것처럼 존재하지 않습니다. 작성된 프로그램은 최소한의 변경으로 C/C++ 프로그램으로 변환된 다음 AVR-GCC 컴파일러에 의해 컴파일됩니다. 그래서 실제로는 전문적으로 사용됩니다. AVR 마이크로컨트롤러 C/C++ 옵션.

차이점은 간단한 개발 환경과 마이크로 컨트롤러 "온보드"에 위치한 주변 장치에 대한 액세스를 단순화하는 기본 라이브러리 세트를 얻을 수 있다는 것입니다.

동의합니다. 초당 9600비트의 속도로 직렬 포트 작업을 시작하여 한 줄로 호출하는 것이 매우 편리합니다.

Serial.begin(9600);

그리고 "네이키드" C/C++를 사용하는 경우 마이크로컨트롤러에 대한 문서를 처리하고 다음과 같이 호출해야 합니다.

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 - 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 - 1);
sbi(UCSR0B, RXEN0);
sbi(UCSR0B, TXEN0);
sbi(UCSR0B, RXCIE0);

다음은 Arduino 프로그래밍의 주요 기능과 특징에 대한 간략한 개요입니다. C/C++ 언어의 구문에 익숙하지 않은 경우 관련 문헌을 참조하는 것이 좋습니다. 이 문제, 또는 인터넷 소스.

반면에 제시된 모든 예제는 매우 간단하며 추가 문헌을 읽지 않고도 소스 텍스트를 이해하고 자신의 프로그램을 작성하는 데 어려움이 없을 가능성이 높습니다.

보다 완전한 문서( 영어)은 프로젝트의 공식 웹사이트(http://www.arduino.cc)에 표시됩니다. 포럼, 추가 라이브러리에 대한 링크 및 해당 설명도 있습니다.

Arduino 프로젝트 공식 웹사이트의 설명과 유사하게 "포트"는 해당 번호 아래의 커넥터에 연결된 마이크로컨트롤러 접점을 의미합니다. 추가적으로 시리얼 통신 포트(COM 포트)가 있습니다.

프로그램 구조

프로그램에서 두 가지를 선언해야 합니다. 주요 기능: setup() 및 루프().

setup() 함수는 Freeduino 보드의 전원을 켜거나 재설정할 때마다 한 번 호출됩니다. 변수를 초기화하고 디지털 포트의 작동 모드를 설정하는 데 사용합니다.

loop() 함수는 본문에 설명된 명령을 순차적으로 반복해서 실행합니다. 저것들. 함수가 완료된 후 다시 호출됩니다.

간단한 예를 살펴보겠습니다.

void setup() // 초기 설정
{
startSerial(9600); // 직렬 포트 속도를 9600bps로 설정
핀모드(3, INPUT); // 데이터 입력을 위한 3번째 포트 설정
}

// 프로그램은 세 번째 포트에 신호가 있는지 확인하고 응답을 보냅니다.
// 컴퓨터의 직렬 포트에 대한 문자 메시지로
void loop() // 프로그램 본문
{
if (digitalRead(3) == HIGH) // 3번째 포트를 폴링하기 위한 조건
serialWrite("H"); // 문자 "H" 형식의 메시지를 COM 포트로 보냅니다.
또 다른
serialWrite("L"); // 문자 "L" 형식의 메시지를 COM 포트로 보냅니다.
지연(1000); // 1초 지연
}

pinMode(포트, 모드);

설명:

신호를 입력하거나 출력하기 위해 지정된 포트를 구성합니다.

매개변수:

port - 모드를 설정하려는 포트 번호(0에서 13 사이의 정수 값).

모드 - INPUT(입력) 또는 OUTPUT(출력)입니다.

핀모드(13, 출력); //13번째 핀이 출력이 됩니다.
핀모드(12, INPUT); //12번째가 입력입니다.

메모:

아날로그 입력은 숫자 14(아날로그 입력 0) ~ 19(아날로그 입력 5)를 사용하여 액세스하여 디지털 입력/출력으로 사용할 수 있습니다.

digitalWrite(포트, 값);

설명:

지정된 포트의 전압 레벨을 높음(HIGH) 또는 낮음(LOW)으로 설정합니다.

매개변수:

포트: 포트 번호

값: 높음 또는 낮음

디지털쓰기(13, HIGH); // 핀 13을 "하이" 상태로 설정

값 = digitalRead(포트);

설명:

지정된 포트의 값을 읽습니다.

매개변수:

포트: 폴링된 포트 번호

반환 값: int 유형의 포트(HIGH 또는 LOW)에 대한 현재 값을 반환합니다.

int 값;
발 = 디지털읽기(12); // 12번째 핀을 폴링합니다.

메모:

읽고 있는 포트에 아무것도 연결되어 있지 않으면 digitalRead() 함수가 HIGH 또는 LOW 값을 잘못 반환할 수 있습니다.

아날로그 신호 입력/출력

값 = 아날로그읽기(포트);

설명:

지정된 아날로그 포트에서 값을 읽습니다. Freeduino에는 6개 채널, 각각 10비트의 아날로그-디지털 변환기가 포함되어 있습니다. 이는 0 ~ 5V의 입력 전압이 0 ~ 1023의 정수 값으로 변환됨을 의미합니다. 판독 분해능은 5V/1024 값 = 0.004883 V/값(4.883 mV)입니다. 아날로그 입력 값을 읽는 데 약 100nS(0.0001C)가 걸리므로 최대 읽기 속도는 초당 약 10,000회입니다.

매개변수:

반환 값: 지정된 포트에서 읽은 0~1023 범위의 int 숫자를 반환합니다.

int 값;
val = 아날로그읽기(0); // 0번째 아날로그 입력의 값을 읽습니다.

메모:

아날로그 포트는 기본적으로 신호 입력으로 정의되어 있으며 디지털 포트와 달리 pinMode 함수를 호출하여 구성할 필요가 없습니다.

AnalogWrite(포트, 값);

설명:

포트에 아날로그 값을 출력합니다. 이 기능은 3, 5, 6, 9, 10, 11개의 Freeduino 디지털 포트에서 작동합니다.

LED 밝기 변경, 모터 제어 등에 사용할 수 있습니다. AnalogWrite 함수를 호출한 후 해당 포트는 AnalogWrite 함수(또는 동일한 포트의 digitalRead / digitalWrite 함수)에 대한 또 다른 호출이 있을 때까지 전압 펄스 폭 변조 모드에서 작동하기 시작합니다.

매개변수:

포트: 폴링되는 아날로그 입력의 번호

값: 0~255 사이의 정수. 값 0은 지정된 포트에서 0V를 생성합니다. 값 255는 지정된 포트에서 +5V를 생성합니다. 0과 255 사이의 값의 경우 포트는 0과 +5V 전압 레벨 사이를 빠르게 교대로 시작합니다. 값이 높을수록 포트가 HIGH(5V) 레벨을 더 자주 생성합니다.

AnalogWrite(9, 128); // 핀 9를 2.5V에 해당하는 값으로 설정합니다.

메모:

AnalogWrite를 호출하기 전에 신호를 출력하도록 포트를 설정하기 위해 pinMode를 호출할 필요가 없습니다.

신호 생성 주파수는 약 490Hz입니다.

시간 = 밀리초();

설명:

Freeduino가 현재 프로그램을 실행한 이후의 밀리초 수를 반환합니다. 카운터는 약 9시간 후에 오버플로되어 재설정됩니다.

반환 값: 부호 없는 긴 값을 반환합니다.

서명되지 않은 오랜 시간; // unsigned long 유형의 시간 변수 선언
시간 = 밀리초(); // 밀리초 단위로 전송

지연(time_ms);

설명:

지정된 밀리초 동안 프로그램을 일시 중지합니다.

매개변수:

time_ms – 프로그램 지연 시간(밀리초)

지연(1000); //1초 동안 정지

지연마이크로초

DelayMicroseconds(time_μs);

설명:

지정된 마이크로초 동안 프로그램을 일시 중지합니다.

매개변수:

time_μs – 프로그램 지연 시간(마이크로초)

지연마이크로초(500); //500마이크로초 동안 일시중지

pulseIn(포트, 값);

설명:

디지털 포트에서 펄스(높음 또는 낮음)를 읽고 펄스 지속 시간을 마이크로초 단위로 반환합니다.

예를 들어, 함수를 호출할 때 "value" 매개변수가 HIGH로 설정된 경우 pulseIn()은 포트에 높은 신호 레벨이 도착할 때까지 기다립니다. 도착하는 순간부터 포트가 수신할 때까지 카운트다운이 시작됩니다. 낮은 수준신호. 이 함수는 펄스 길이를 반환합니다( 높은 수준) 마이크로초 단위입니다. 10마이크로초에서 3분까지의 펄스로 작동합니다. 이 함수는 펄스가 감지될 때까지 결과를 반환하지 않습니다.

매개변수:

port: 펄스를 읽는 포트 번호

값: 펄스 유형 HIGH 또는 LOW

반환 값: 펄스 지속 시간을 마이크로초 단위로 반환합니다(int 유형).

지속 기간; // int 유형의 기간 변수 선언
기간 = pulseIn(핀, HIGH); // 펄스 지속 시간을 측정합니다.

직렬 데이터 전송

프리두이노에는 직렬 데이터 전송을 위한 컨트롤러가 내장되어 있어 프리두이노/아두이노 장치 간 통신과 컴퓨터와의 통신 모두에 사용할 수 있습니다. 컴퓨터에서 해당 연결은 USB COM 포트로 표시됩니다.

통신은 디지털 포트 0과 1을 통해 이루어지므로 직렬 기능을 사용하는 경우 디지털 I/O에 사용할 수 없습니다.

Serial.begin(baud_rate);

설명:

전송 속도를 설정합니다 COM 포트직렬 데이터 전송을 위한 초당 비트 수입니다. 컴퓨터와 통신하려면 다음과 같은 표준화된 속도 중 하나를 사용하십시오: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 또는 115200. 또한 다른 마이크로컨트롤러와 통신할 때 다른 속도를 정의할 수도 있습니다. 포트 0과 1.

매개변수:

baud_rate: 초당 비트 단위의 데이터 흐름 속도입니다.

Serial.begin(9600); //속도를 9600bps로 설정

시리얼.사용 가능

개수 = Serial.available();

설명:

직렬 포트를 통해 수신된 바이트는 프로그램이 읽을 수 있는 마이크로컨트롤러 버퍼에 저장됩니다. 이 함수는 버퍼에 누적된 바이트 수를 반환합니다. 직렬 버퍼는 최대 128바이트를 저장할 수 있습니다.

반환 값:

int 값(직렬 버퍼에서 읽을 수 있는 바이트 수)을 반환하거나, 사용할 수 없는 경우 0을 반환합니다.

if (Serial.available() > 0) ( // 버퍼에 데이터가 있는 경우
// 여기서 데이터 수신 및 처리가 있어야 합니다.
}

char = Serial.read();

설명:

직렬 포트 버퍼에서 다음 바이트를 읽습니다.

반환 값:

직렬 포트에서 들어오는 데이터의 첫 번째 사용 가능한 바이트 또는 들어오는 데이터가 없는 경우 -1입니다.

수신바이트 = Serial.read(); // 바이트 읽기

설명:

직렬 포트 입력 버퍼를 지웁니다. 버퍼의 데이터는 손실되며 Serial.read() 또는 Serial.available()에 대한 추가 호출은 Serial.flush() 호출 이후 수신된 데이터에 적합합니다.

Serial.flush(); // 버퍼 지우기 - "처음부터" 데이터 수신 시작

설명:

직렬 포트로 데이터를 출력합니다.

매개변수:

이 함수에는 출력 데이터의 유형과 형식에 따라 여러 가지 호출 형식이 있습니다.

Serial.print(b, DEC)는 b의 10진수 표현인 ASCII 문자열을 인쇄합니다.

정수 b = 79;

Serial.print(b, HEX)는 숫자 b의 16진수 표현인 ASCII 문자열을 인쇄합니다.

정수 b = 79;

Serial.print(b, OCT)는 숫자 b의 8진수 표현인 ASCII 문자열을 인쇄합니다.

정수 b = 79;
Serial.print(b, OCT); //문자열 "117"을 포트에 출력합니다.

Serial.print(b, BIN)는 숫자 b의 이진 표현인 ASCII 문자열을 인쇄합니다.

정수 b = 79;
Serial.print(b, BIN); //문자열 "1001111"을 포트에 출력합니다.

Serial.print(b, BYTE)는 b의 하위 바이트를 인쇄합니다.

정수 b = 79;
Serial.print(b, BYTE); //숫자 79(1바이트)를 표시합니다. 모니터에서
//직렬 포트에서 "O" 기호를 얻습니다.
//코드는 79

Serial.print(str) str이 문자열 또는 문자 배열인 경우 str을 COM 포트 바이트 바이트로 보냅니다.

문자 바이트 = (79, 80, 81); //값이 79,80,81인 3바이트 배열
Serial.print("여기에 바이트가 있습니다:"); //"Here our bytes:" 줄을 출력합니다.
Serial.print(바이트); //코드 79,80,81로 3자를 출력합니다 –
//이것은 문자 "OPQ"입니다

Serial.print(b) b가 byte 또는 char 유형인 경우 숫자 b 자체를 포트에 인쇄합니다.

문자 b = 79;
Serial.print(b); //포트에 "O" 문자를 출력합니다.

Serial.print(b) b가 정수 유형인 경우 b의 10진수 표현을 포트에 인쇄합니다.

정수 b = 79;
Serial.print(b); //문자열 "79"를 포트에 출력합니다.

설명:

Serial.println 함수는 Serial.print 함수와 유사하며 동일한 호출 옵션을 갖습니다. 유일한 차이점은 데이터 뒤에 캐리지 리턴 문자(ASCII 13 또는 "\r")와 새 줄 문자(ASCII 10 또는 "\n")라는 두 개의 추가 문자가 출력된다는 것입니다.

예제 1과 예제 2는 포트에 동일한 내용을 출력합니다.

정수 b = 79;
Serial.print(b, DEC); //문자열 "79"를 포트에 출력합니다.
Serial.print("\r\n"); //문자 "\r\n"을 표시합니다 – 줄 바꿈
Serial.print(b, HEX); //문자열 "4F"를 포트에 출력합니다.
Serial.print("\r\n");//문자 "\r\n"을 인쇄합니다 – 줄 바꿈

정수 b = 79;
Serial.println(b, DEC); //"79\r\n" 문자열을 포트에 출력합니다.
Serial.println(b, HEX); //"4F\r\n" 문자열을 포트에 출력합니다.

직렬 포트 모니터에서 우리는 얻습니다.