'Serial.read()'로 읽어서 쓸 때는 이런 현상이 없습니다. 그런데 'Serial.readBytesUntil()'를 사용하여 데이터를 읽었더니 1초 정도 반응이 느린 듯한 느낌을 받았습니다. 아래 스크린샷을 보면 연속으로 명령을 보냈는데 묘하게 다음 요청의 응답이 오는데 1초가량의 텀이 있는 것 처럼 보입니다. 문제없는 스크린샷을 보면 좀 더 명확해집니다. 이건 각 명령어의 텀이 없습니다. 1. 원인 문서를 확인해 보았습니다. arduino reference - Serial.readBytesUntil() 문서에 보니 1) 결정된 길이를 읽거나(지정된 버퍼를 채울 때까지) 2) 지정된 시간이 초과하거거나( Serial.setTimeout() ) 3) 지정된 종결 문자가 올 때(함수별로 차이 있음)..
저가 아두이노 호환 보드인 "Elegoo Nano"를 샀습니다. 스케치를 업로드했더니..... avrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x30avrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x30 1. 오류의 원인'Elegoo Nano V3.0'의 부트로더(Bootloader)가 예전 버전이라 기본 프로세서의 보드레이트(Baudrate)와 다르다고 합니다.그래서 프로세서를 예전 버전으로 설정..
직접 라이브러리를 만들어서 수동으로 넣었는데..... "[라이브러리].h"를 위한 복수개의 라이브러리가 발견되었습니다. 1. 생성자가 잘못된 경우직접 만든 라이브러리에서 문제가 생겼다면 거의 이 문제입니다. 생성자는 클래스 이름과 같아야 하는데 실수로 잘못 넣은 경우죠. 예를 들면 이런 경우입니다. 클래스 이름은 'StepperMulti5'인데 생성자 이름이 'Stepper'로 잘못 들어가 있습니다.이 오류는 수정해주시면 됩니다. 2. 실제로 중복된 경우실제로 라이브러리가 여러 군데 있는 경우가 있습니다. 확인해봐야 할 경로는 1) 아두이노가 설치된 폴더의 'libraries'폴더2) 'C:\Users\[사용자 계정]\AppData\Roaming\Arduino\libraries' 폴더3) 내 문서에 'A..
* 공개프로젝트로 전환된 포스팅입니다. * 참고 : [Arduino] StepperAsync5 - 비동기 스탭 모터 라이브러리 저번에 "한 번에 2개 이상의 스테핑 모터를 제어하기"를 했었는데....... 'Stepper'라이브러리가 업데이트 많이 됐군요. ㅎㅎㅎ 버전에 맞춰 업데이트해보았습니다. 연관글 영역 이전 글에서 'Stepper.h'는 '.step()'이 동작하는 동안 다른 동작을 할 수 없다고 이야기했습니다. (참고 : [Arduino] 'Stepper.h'는 두개의 모터를 제어할 수 없다. ) 그래서 'Stepper.h'를 수정한 라이브러를 작성하고 사용하는 방법에 대한 포스팅입니다. 기존 'Stepper'를 수정하는 방법은 이전 글에서 다뤘으므로 이 포스팅은 수정된 코드만 나열합니다. 1...
* 공개프로젝트로 전환된 포스팅입니다. * 참고 : [Arduino] ButtonClickCheck - 버튼 상태 저장 및 확인 라이브러리 버튼 처리가 귀찮아서 라이브러리를 만들었습니다. 버튼을 누르고 있을 때, 누르지 않을 때, 눌리고 첫 이벤트를 구분하여 리턴해주는 라이브러리입니다. 버튼이 플로팅(floating)상태라면 당연하게도 제대로 동작하지 않습니다. (참고 : [Arduino] 버튼(Button)의 값이 정확하지 않을때 - 풀 업(Pull Up), 풀 다운(Pull Down) 사용 방법 ) 연관글 영역 1. 버튼 구현하기 아두이노는 게임 루프처럼 무한루프가 돌면서 여러 가지 상태를 판단하여 동작하게 됩니다. 이 상태에서 그냥 버튼을 눌렸다고 동작을 시키면 버튼이 몇 번 눌렸는지, 언제 눌렸는..
간만에 만들 게 있어서 아두이노를 연결하고 버튼을 연결했는데..... 간단하게 코드를 만들어서 올리고.... #define Button01 2 void setup() { Serial.begin(9600); pinMode(Button01, INPUT); } void loop() { Serial.println(digitalRead(Button01)); delay(10); } 버튼을 누르지 않았을 때 입력값이 이상합니다??? 연관글 영역 1. 플로팅(floating) 버튼을 누르지 않고 있을 때 값이 랜덤하게 나오는 것을 플로팅(floating)상태라고 합니다. 이 상태에서는 버튼값이 0이나 1이 아닙니다. ( 참고 : stackExchange - Button state changing randomly, Ar..
인텔에서 아두이노 호환보드로 갈릴레오라는 보드를 내놨습니다. (참고 : Arduino - Intel Galileo) 아두이노 호환보드라는 것은 아두이노에서 돌아가는 하드웨어와 소프트웨어를 그대로 사용할 수 있는 보드를 뜻합니다. 그런데 MS에서 인텔 갈릴레오 개발 보드에 올릴 수 있는 윈도우 8.1을 공개했습니다 ㅡ.ㅡ (참고 : MS, 사물 인터넷 개발을 위한 개발자용 윈도우 프리뷰 버전 공개) 사물 인터넷과 개발보드 사물 인터넷 제품이라는 것은 일반적인 제품들에 인터넷이 연결하여 다양한 동작이나 데이터수집이 가능해진 제품을 말합니다. 이런 제품들을 개발 할 때 필요한 것이 개발 보드라는 것입니다. 저도 이런 제품을 다루기 위해 하드웨어를 공부했는데.....쉽지 않습니다 ㅋ 그래서 소프트웨어 개발자도 ..
아두이노는 자체적으로 멀티쓰래드를 지원하지 않습니다. 그러다 보니 쓰래드 작업을 하고 싶으면 방법이 없죠. 결론부터 이야기하자면 아두이노에서 다른 언어의 쓰래드와 같은 동작을 하는 구현은 불가능합니다. 지금부터 소개할 라이브러리도 시분할로 쓰래드처럼 보이도록 해둔 것이지 쓰래드라고 볼 수 없죠. 1. 'ArduinoThread' 프로젝트 깃허브에 'ivanseidel'라는 분께서 만든 프로젝트입니다. (참고 : github - ivanseidel / ArduinoThread ) 소스코드를 보면 우리가 생각하는 쓰래드처럼 동작하지 않을 것 같습니다. 구현된 방식이 아두이노의 'loop()'에서 쓰래드 컨트롤러를 지속해서 호출하면서 타이밍 맞을 때 쓰래드로 지정한 함수를 호출하는 방식입니다. 구조만 봐서는 ..
스텝모터와 스텝모터 제어용칩을 여러가지 테스트하다보니 불편해서 컴퓨터없이 전원만 넣고 테스트할 필요성을 느꼈습니다. 1. 기획 테스트를 위한 기능은 2가지입니다. 속도 조절과 앞과 뒤로 움직이는 동작 입니다. 스텝모터는 스텝을 조절할 수 있지만 7세그먼트나 LCD없이 스텝을 조절하는 동작을 넣는건 사용상 데이터를 보여주기 힘들기 때문에 1회전을 기준으로 합니다. 속도조절의 경우 증가/감소 각각 스위치를 넣는 것도 좋지만 정밀하게 속도 조절을 할것이 아니기 때문에 누를때마다 속도가 증가하다가 최대치가 되면 다시 0이 되도록 하는 것이 인터페이스상 더 좋을것 같습니다. 정리하면 속도조절 : 스위치 1개를 이용하여 속도 증가. 속도를 표시하기위해 LED의 발기를 조절 한다. 앞/뒤 회전 : 속도조절값을 기준으..
푸시버튼은 눌렀을 때 인풋이 보드로 들어가는 가장 기본이 되는 센서입니다. 이 포스팅에서는 버튼을 눌렀을 때 LED에 불이 들어오는 동작을 통해 푸시버튼을 사용해 봅시다. 연관글 영역 1. 보드 구성 간단하면서도 간단하지 않은 배선입니다 ㅎㅎ 2번 핀을 스위치의 입력으로 사용합니다. 7번 핀을 LED 출력으로 사용합니다. 저항은 10k를 썼습니다. 2. 펌웨어 작성 스위치가 눌리면 LED가 들어오게 해야 하는데..... 직접 스위치에 배선하지 않고 아두이노에 연결하여 값을 받아 LED를 켜게 되면 문제가 하나 있습니다. 아두이노의 반복 주기에 따라 스위치값을 읽지 못하거나 생각했던것 보다 여러 번 작동할 수 있죠. #define LED2 #define BTN 7 int m_nBtn = 0; void se..