2017-05-10 5 views
3

Arduino Uno 및 Windows 7을 사용하고 있습니다. 내 목표는 깜박이는 LED 표시등을 켜고 깜박이면 직렬 모니터에 "깜박임"을 인쇄하는 것입니다.동일한 Arduino 스크립트에서 Serial.print 및 digitalWrite 사용

아래 코드를 실행하면 2 초마다 "깜박임"이 직렬 모니터에 인쇄 될 수 있지만 표시등은 계속 켜져 있습니다. 선을 지울 때

표시등이 깜박이지만 아무 것도 인쇄되지 않습니다. 다음과 같이 내가 실행하고 코드는 다음과 같습니다

int LED3 = 0; 
void setup() { 
    // When I comment out the line below, the lights flash as intended, but 
    // nothing prints. When I have the line below not commented out, 
    // printing works, but the lights are always on (ie do not blink). 

    Serial.begin(9600); // This is the line in question. 
    pinMode (LED3, OUTPUT); 
} 

void loop() { 
    Serial.println("Blink"); 
    digitalWrite (LED3, HIGH); 
    delay(1000); 
    digitalWrite (LED3, LOW); 
    delay(1000); 
} 

나는이 문제의 원인을 명확하지 오전이 발생하고이 문제를 방지하는 방법을 이유에 대한 설명을 부탁드립니다. 고맙습니다!

답변

8

해킹 :

이 페이지는 아두 이노 직렬 연결에 대한 정보가 포함되어 있습니다?

핀 0과 1은 직렬 통신에 사용됩니다. 외부 회로에 핀 0과 1을 사용하는 것은 불가능하며 직렬 통신을 사용하거나 보드에 새로운 스케치를 업로드 할 수 있습니다.

시리얼은 Arduino 보드와 컴퓨터 또는 다른 장치 간의 통신에 사용됩니다. 모든 Arduino 보드에는 적어도 하나의 직렬 포트 (UART 또는 USART라고도 함)가 있습니다. 직렬 포트. 디지털 핀 0 (RX)과 1 (TX) 및 USB를 통해 컴퓨터와 통신합니다. 따라서 스케치에서 함수를 사용하면 디지털 입력 또는 출력에 핀 0과 1을 사용할 수 없습니다.

어떻게하면 핀이 직렬 및 디지털을 동시에 작동시킬 수 있는지 생각해보십시오. 네, 그게 뭘하려는거야 !!. 보레이트 (baud rate)로 핀 - 시리얼을 설정 한 다음 LED를 깜빡이는 데 사용했습니다.

이렇게하면 serial.begin(9600); it 데이터 전송률을 9600으로 직렬 데이터 전송을위한 초당 비트 (보오)로 설정합니다.이 기능에서 직렬 핀을 사용 했으므로 디지털 입력에 핀 0과 1을 사용할 수 없습니다 또는 출력 (LED와 유사). 당신이 serial.begin(9600); 당신의 핀을 자유롭게 사용할 수 있으며 따라서 출력을 얻을 수 있다고 언급 할 때.

이 문제를 방지하는 방법은 무엇입니까?

LED를 핀 0에서 디지털 핀으로 변경하십시오.

당신은 기대 (나는 그것에서 핀 7을 사용) 결과를 얻을 것이다 다음 코드 :

int LED3 = 7; //I have changed pin to 7 (you can use any except 0 and 1) 
void setup() { 
    // When I comment out the line below, the lights flash as intended, but 
    // nothing prints. When I have the line below not commented out, 
    // printing works, but the lights are always on (ie do not blink). 

    Serial.begin(9600); // This is the line in question. 
    pinMode (LED3, OUTPUT); 
} 

void loop() { 
    Serial.println("Blink"); 
    digitalWrite (LED3, HIGH); 
    delay(1000); 
    digitalWrite (LED3, LOW); 
    delay(1000); 
} 
+0

예. 이 코드가 설명 된대로 동작하고 질문에 응답하는지 확인할 수 있습니다. 고맙습니다! – Marjoram

+0

도움이되어서 기쁘게 생각합니다. – Billa

1

Arduino는 직렬 통신을 위해 핀 0과 1을 사용합니다. 핀 0은 RX이고 1은 TX입니다. 따라서 핀 0에 연결된 LED를 플래싱하려고 할 때, 두 핀은 모두 서로 쾅쾅 거리기 시작합니다.

LED를 다른 핀으로 옮기고 스케치를 일치하도록 업데이트하면 작업이 시작됩니다. https://www.arduino.cc/en/Reference/Serial

행복이 문제의 원인을

+0

음, 직렬는 TX와 RX 핀을 인수, 그래서 무슨 일이 있어도 방향 또는 레벨을하지 않습니다 설정하려고하십니까? (하지만 RX에 대한 입력 풀업에 대해서는 확실하지 않습니다.) – KIIV