2013-10-03 2 views
4

첫 번째 루프 이후에 간단히 중지되는 작은 Arduino 프로그래밍이 있습니다. 나는 무엇인가 간과 할지도 모른다. .. 그러나 나는 일어나고있는 것에 관해 단지 우둔하다.내 Arduino가 1 분 대기 후 멈춤

여기 난 단지 디버그 에코로 직렬 사용되는 코드

int led = 13; 
//int led = 10; 
unsigned long windtime = 1000 * 2; // 2 seconds 
unsigned long pausetime = 1000 * 60; // 1 minute 

// the setup routine runs once when you press reset: 
void setup() {     
    // initialize the digital pin as an output. 
    pinMode(led, OUTPUT); 

    Serial.begin(9600); 
} 

// the loop routine runs over and over again forever: 
void loop() { 
    Serial.print("Wind"); 
    digitalWrite(led, HIGH); 
    delay(windtime);    

    Serial.print("Pause"); 
    digitalWrite(led, LOW);  
    delay(pausetime); 
} 

입니다.

아이디어가 있으십니까?

+0

당신이 준 프로그램은 좋은 것처럼 보입니다 ... 하드웨어 버그를 배제하지 마십시오. 아마도 디버거가 중단 점으로 켜져 있습니까? – AndyG

+0

활성 디버거가 없습니다. 내 Arduino UNO와 Nano는 첫 번째 깜박 이후에 멈 춥니 다. – Alex

+0

지연 대신 millis()를 사용해 보았습니까? 또한 직렬 초기화없이 프로그램을 시험해보고 작동하는지 확인하십시오. 하드웨어 문제 일 수도 있습니다. – praks411

답변

0

부호없는 long이 덮어 쓰여지고있을 수 있습니다. 디버깅 방법으로 하드 코딩 상수 값인 delay(6000)을 6 초 동안 사용해보십시오. 하드웨어가 작동 중인지 여부를 확인할 수 있습니다. 지연 값이 unsigned long을해야하는 경우

마지막으로, 확실하지, 나는 보통 int 아닌 아두 이노에 int (2 바이트)를 저장할 수있는 것보다 더 큰 60,000을 위해 사용합니다. 임베디드 시스템은 실제로 더 작은 시스템이라는 것을 기억하십시오.

이 예 : http://arduino.cc/en/Tutorial/BlinkWithoutDelay을 의미합니다. 지연 값은 int 여야합니다.

희망이 도움이됩니다.

+0

서명 [http://arduino.cc/en/Reference/delay]에서 알 수 있듯이 지연 (...)은 부호없는 long을 허용합니다. – Alex

+0

더 작은 값을 사용하여 작동하는지 확인해 보셨습니까? – ladislas

+0

내 대답을 확인하십시오. 나는 그것의 궁극적 인 이해가 없어도 작동하게 만들었습니다. – Alex

5

명시 적으로 숫자 리터럴을 long (L)으로 설정해야하며 사용하는 것처럼 보입니다. 그렇지 않으면 작동하지 않습니다.

unsigned long seconds = 1000L; // !!! SEE THE CAPITAL "L" USED!!! 
unsigned long minutes = seconds * 60; 
unsigned long hours = minutes * 60; 

을 다음 단순히 평소와 같이 지연 (millisec) 사용 : 그것은 근무

delay(5 * minutes); 

을 자동 변환의 어떤 종류가 굉장하지만 그때까지 간단하게 사용이 있으면 누구든지 설명 할 수있는 경우 나를. 당신의 라인

2

:

unsigned long pausetime = 1000 * 60; // 1 minute 

아두 이노 1000 (정수) 및 60 (정수)을보고하고 그래서에 ... 정수 슬롯을 시도 것이라고 답변을 작동합니다! 즉, pausetime에 제공 할 수있는 가장 큰 대답은 32,767입니다. 이보다 더 큰 것은 라운드를 감쌀 것이므로, -5536에 60,000에서 32,768의 2 로트를 뺀 것입니다.

실전에서 보려면 Serial.print (1000 * 60)를 추가하십시오. 및 설정에> 당신의 도구에 시리얼 모니터를보고 :

// the setup routine runs once when you press reset: 
void setup() {     
    // initialize the digital pin as an output. 
    pinMode(led, OUTPUT); 
    Serial.begin(9600); 
    Serial.print(1000 * 60); 
} 

서명되지 않은 갈망이 숫자의 끝에 UL 또는 UL를 추가로 상수를 사용하는 아두 이노를 강제로.

관련 문제