c++ 아두이노 코딩 질문

c++ 아두이노 코딩 질문

작성일 2024.04.30댓글 1건
    게시물 수정 , 삭제는 로그인 필요

아두이노 c++ 예제를 하던도중 너무 안풀려서 답지를 보고 공부할려고 합니다..

1. 아두이노에 연결된 버튼(2번)을 누르면 (일반 버튼이라 잠깐 눌렀다가 때지는 형태) 
구구단 1단이 for문을 활용하여 시리얼 보드에 출력됨, 1~9까지 출력됨 (9까지만 출력되고 스탑)
2. 버튼을 누르면 2단이 출력됨
3. 계속 출력되다가 9단이 출력되고 나서 버튼을 다시누르면 1단으로 돌아가서 출력됨

아두이노의 voidloop문은 특정 조건이 계속 반복 되는거라 for 중간에 break등으로 함수를 끊어도 다시 처음으로 돌아가서 무한 반복이 되더라구요. 특정 조건이 완료되면 코드가 실행 되는 도중이라도 무조건적으로 코드가 멈추고 다음 신호에 따른행동을 취하게하는.. 이런 코드를 짜고싶습니다. 

버튼도 혹시 어떻게 연결해야 하는지 간단하게 알려주시면 감사하겠습니다

코딩 고수님들의 답변 부탁드리겠습니다


#c++ 아두이노 #c++ 아두이노 시리얼 통신 #아두이노 c++ 문법 #아두이노 c++ 연동 #아두이노 c c++ #아두이노 ide c++

profile_image 익명 작성일 -

질문이 좀 복합적이라 까다롭지만 답변이 안 달릴까 약간 염려되서 ChatGPT답변 코드를 들고왔습니다.

완벽하진 않지만 참고는 되실 것 같습니다.

다른 분이 좋은 답변을 주시면 그걸 답변확정해 주세요.

loop문에 대한 부분은 아래 코드에 보시면 while문으로 loop가 끝나지 않게 잡아두는 방식을 썼습니다.

const int buttonPin = 2; // 버튼 핀 번호 int buttonState = 0; // 버튼 상태 변수 int currentDan = 1; // 현재 출력 중인 구구단 void setup() { // 시리얼 통신 시작 Serial.begin(9600); // 버튼 핀을 입력으로 설정 pinMode(buttonPin, INPUT); } void loop() { // 버튼 상태 읽기 buttonState = digitalRead(buttonPin); // 버튼이 눌렸을 때 if (buttonState == HIGH) { // 현재 구구단 출력 printMultiplicationTable(currentDan); // 다음 구구단으로 이동 currentDan++; // 10단이면 처음부터 다시 시작 if (currentDan > 9) { currentDan = 1; } // 버튼이 떼질 때까지 대기, //while로 잡아놓으면 loop함수가 끝나지 않아 여기 멈춰 있게 됩니다. while (buttonState == HIGH) { buttonState = digitalRead(buttonPin); delay(10); // 디바운싱을 위한 짧은 딜레이 } } } // 구구단 출력 함수 void printMultiplicationTable(int dan) { Serial.println("구구단 " + String(dan) + "단"); for (int i = 1; i <= 9; i++) { Serial.println(String(dan) + " x " + String(i) + " = " + String(dan * i)); delay(500); // 출력 간 딜레이 } }

버튼, 즉 스위치 연결 자체는 그냥 원하는 핀과 GND를 연결하시면 됩니다.

하지만 이러면 스위치가 눌리지 않은 상태에서 전기가 불안정하다 보니

정전기 등 요인으로 이상하게 스위치가 막 눌리는 현상이 나타납니다.

그래서 안 눌렸을 때 5v인 풀업 저항, 0v인 풀다운 저항을 연결해주면 안정적이 됩니다.

다행히 아두이노엔 프로그램으로 풀업을 걸어줄 수 있습니다.

이건 인터넷에 잘 설명해주신 분이 계셔서 퍼왔습니다.

가서 자세히 읽어보시면 좋을 것 같네요^^

void setup() { pinMode(3, INPUT_PULLUP); // 3번 핀은 스위치와 연결됩니다. 내부 풀업저항을 사용합니다. pinMode(4, OUTPUT); // 4번핀은 LED와 연결되어있습니다. } void loop() { int Switch = digitalRead(3); // digitalRead로 읽은 3번핀의 정보를 1과 0으로만 표현하도록 합니다. if (Switch = HIGH) { // 스위치가 HIGH. 1이라는 값을 나타내게되면, LED가 HIGH 가 됩니다. digitalWrite(4, HIGH); } else { // 스위치가 HIGH가 아니라면, LED는 LOW가 됩니다. digitalWrite(4, LOW); } }

도움이 되셨으면 좋겠습니다. 좋은 하루 되세요^^

아두이노 종류에 따른 코딩 관련 질문

... 즉, 아두이노 우노와 아두이노 나노 모두 아두이노 IDE(통합 개발 환경)를 사용하여 C/C++ 기반의 프로그래밍 언어로 코딩할 수 있습니다. 따라서, 아두이노 우노와 아두이노...

아두이노 코딩 C, C++ 질문 serial.print...

스위치를 누르면 어떤 시스템이 시작되고 다시한번 더 누르면 시스템이 종료되도록 코딩하고있는데요 시작할때랑 종료될때 시리얼모니터에 문구가 한번씩...

아두이노 코딩( c,c++ ) 질문하나만요...

... 방식의 코딩이 요구됩니다. 예를 들면 시리얼 통신을 통해 데이터를 전송받아... if(c == '1'){ ....이하생략 이런 방식으로 코딩을 하면 데이터가 수신되었을 때...

스텝모터 아두이노 코딩 질문입니다.

최근에 아두이노 코딩질문질문자입니다! 자동차를 만드는것은... ```C++ int irPin = 2; // 적외선 센서 핀 번호 int threshold = 500; // 적외선 센서 감도...

급]아두이노,c++출입관리 코딩질문

RFID와 LCD모듈,아두이노 UNO를 이용하여 출입관리를 하려고... 안드로이드, 아두이노 개발자입니다. 스마트폰 어플로 블루투스 통신을 이용하여 아두이노 제어 전문 입니다....