2016-10-15 2 views
0

대학 프로젝트에서 온도 센서에서 최대 값을 감지해야합니다. 계속 표시하고 싶습니다. 그리고 다음 값이 이전 값보다 높으면 값이 변경되어야합니다. 그렇지 않으면 마지막 최대 값을 유지해야합니다.센서 값의 홀딩 피크

int value=0, peak=0,check=0; 
value=adcread(0); //reading value from sensor 
check=value; //copying sensor value to a variable 
if(check>peak) //checking if sensor value is greater than peak then update the peak 
peak=check; 
printf("%d",check); 

항상 센서 값과 동일한 피크 값을 표시합니다. 이 코드가 작동하지 않습니다. 무엇이 잘못되었는지 말해주세요. 감사합니다.

+0

인쇄중인 값을 확인하십시오. 그런 다음 문제가 나타날 때까지 다시 살펴보십시오. – molbdnilo

+3

이전 최고 값을 기억하려면 로컬 변수를 사용할 수 없습니다. 그것은 정적이거나 전역 변수 여야합니다. – KIIV

+0

변수'check'가 완전히 제거 될 수 있습니다. – user3629249

답변

2

peak은 자동 저장 장치의 로컬 변수이며 항상 0으로 초기화되기 때문입니다. 센서의 결과가 음수가 될 수있는 경우

  • peak

    이 음수 값을 업데이트하지 않습니다 및
  • peak가 제로로 함수를 통과 할 때마다 초기화됩니다 :이 두 가지 문제가 발생합니다.

    static int peak = INT_MIN; 
    

    이 변수가 실행될 때마다 그 값을 유지한다고 의미 자동 스토리지에서 정적 스토리지 peak 이동 다음과 같이

peak 변화 선언이 문제를 해결한다.

이것을 컴파일하려면 <limits.h>을 포함해야합니다.

+1

내 문제를 해결했습니다. –

+0

이 문은 자동 저장 장치의 로컬 변수이므로 항상 0으로 초기화됩니다. , 지역 변수는 스택에서 쓰레기가 발생하는 것을 포함합니다. 그러나 전역/정적 변수는 (기본값으로) 0으로 초기화됩니다. – user3629249

+0

@ user3629249 OP에 명시 적 초기화자가 0으로 설정되어 있다는 것은 무엇을 의미합니까? – dasblinkenlight