2014-11-27 4 views
-4

카운터를 만들고 싶습니다. 10 초마다 스위치의 상태를 확인하고 싶습니다. 예를 들어 스위치가 닫히면 10 초 카운터가 증가합니다. 열린 상태이면 다시 잠들고 10 초 후에 다시 깨어나 스위치 상태를 확인합니다. 카운트가 100에 도달하면 무언가를하십시오. 나는이카운터 용 C 프로그램

내 시도를하고 가겠어요 어떻게 :

for(int i=0;i<100;i++){ 
if(SW=1) { 
    i++; 
} 
else 
    i=0; 
} 
+3

당신은 텍스트 편집기와 컴파일러가 필요합니다. –

+3

사실상 의사 코드를 알려 주셨으므로 구현이 쉽습니다. 시도 해봐. – bitcell

+1

그래서 루프 내에서 루프 변수를 수정 하시겠습니까? – urzeit

답변

0
당신이 코드를 볼 수 있습니다

: 스위치 인 경우

int sw = 0; 
#define MAX 100 
#define gotosleep sleep(10) 

int main(void) 
{ 
    int num = 0; 
    while(1) { 
     gotosleep; 
     if(sw) 
      num++; 
     else 
      num = 0; 

     if(num == MAX) { 
      //do something 
      printf("Done\n"); 
      num = 0; 
      break; 
     } 
    } 

    return 0; 
} 
  1. 이동이 10
  2. 에 대한 잠 ON, 증가분 num, 그렇지 않으면 reset num to 0 and go to sleep
  3. numMAX 값에 도달했는지 확인한 다음 MAX과 같으면 무언가를 수행하고 break을 입력하십시오. (사이클 주석을 계속하려면 코드를 중단하십시오.) 다시
  4. 일어나 10 초 후에 스위치의 상태를 확인 -> 단계 난 당신이 질문에 구체적 필요가 있다고 생각이
3

. 스위치가 열릴 때마다 카운터를 재설정하려는 것 같습니다. 그게 틀림 없습니까? 여기 어쨌든

, 당신은

#include <stdio.h> 
#include <time.h> 
struct tm tm; 
time_t start,enxd; 
double sec; 
int counter; 
int main(){ 
    int switchCounter = 0; 
    int checkSwitch; 

    checkSwitch = 1; // I put this in purpose since I have no idea how you're going to read the switch. 
        // Thus, this assumes the switch is always closed. 

    while(switchCounter != 100){ 
     // 1. Wait for 10 seconds 
     sec = 0; 
     time(&start); 

     while(sec !=10){ 
      ++counter; 
      time(&enxd); 
      sec=difftime(enxd,start); 
     } 

     // 2. Read the state of the switch here. 
     // .............. 

     // 3. Simple if-else 
     if (checkSwitch == 1){ //switch is closed 
      switchCounter++; 
      printf("Counter incremented. Current = %i \n", switchCounter); 
     } 
     else //if switch is open 
     { 
      switchCounter = 0 ;// Iam confused here, is this what you want ? 
      printf("Switch is open \n"); 
     } 
    } 
    // 4. Finally when your counter reaches 100, you wanna do something here 
    // ............................ 

    return 0; 
} 

내가 정확하게 문제를 이해 한 경우가 :)

0

내가 아주 확실하지 않다 희망이 도움이 원하는 아마,하지만 당신은 다음 코드를 확인하실 수 있습니다 몇 가지 아이디어. 그것은 자기 설명입니다.

참고 : 로컬 기능을 테스트 할 수 있도록하십시오 테스트 코드

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

#define MAXVAL 100 
#define SLEEPTIME 10 

//extern int switchSet; //if defined in some other file 
int switchSet; 

int main() 
{ 
    int counter = 0; 
    int toSleep = 0; 
#if 0 
     //for testing 
    switchSet = MAXVAL; 
#endif 

    while (1) 
    { 
     toSleep = switchSet? SLEEPTIME:0; //check for the switch state, 0 = open, 1 = closed 
     if (toSleep) 
     { 
      printf("Going to sleep for %d sec\n", SLEEPTIME); 
      sleep(toSleep); 
     } 
     else 
     { 
      counter++; 
      printf ("No sleeping, counter is %d\n", counter); 
     } 
     if (counter == MAXVAL) 
     break; 
#if 0 
     //for testing 
     switchSet--; 
     if (switchSet < 0) switchSet = 0; 
#endif 
    } 

    printf("Do Something... Did, Done !!\n"); 

    return 0; 

}