2017-05-15 4 views
-2

우리는 Arduino에 연결된 LED의 밝기를 키 스트로크로 변경하는 프로그램을 만들려고합니다. c-serial 포트 통신 부분은 끝났지 만 Arduino 부분에 몇 가지 문제가 있습니다.문자를 입력하여 Arduino의 LED 밝기를 변경하려고 시도했습니다.

int LedPin = 3; 
int brightness = 90; 
char deger; 
void setup() { 
    Serial.begin(9600); 
    pinMode(LedPin, OUTPUT); 
} 

void loop() { 
    if(Serial.available()>0) 
     deger = Serial.read(); 

    if(deger== 'C') { 
     brightness = 0; 
     analogWrite (LedPin, brightness); 
    } //to set the brightness to 0 after an error 

    if(deger== 'A') { 
     if(brightness>=255) 
      brightness = 0; 
     brightness=brightness+15; // to increase led brightness by 15 with every entry 
     analogWrite (LedPin, brightness); 
    } 

    if(deger== 'B') { 
     if(brightness<=0) 
      brightness = 254; 
     brightness=brightness-15; //to decrease led brightness by 15 with every entry 
     analogWrite (LedPin, brightness); 
    } 
} 

우리는 우리가 'B'를 입력 할 때 우리는 'A'와 감소를 입력 할 때 밝기가 증가하고 싶지만, B를 입력하면 입력하고 (15)에 의해 증가 될 때 어떤 일이 밝기 변화 무작위입니다. B가 우리의 의도와 완전히 반대되는 것을 볼 수 있습니다. A는 무작위입니다. 우리가 뭘 잘못하고 있니?

+1

시도 밝기 대신 INT – OldProgrammer

+2

최초의 문자 만들기 위해 밝기를 조정 코드 * 후 경계 테스트 * 이동 :

둘째로 경우 내부를 수정합니다. 그렇지 않으면 0에서 255 사이의 값을 analogWrite로 보냅니다. 나는 Arduinos에 대해 더 구체적인 조언을하기에는 익숙하지 않지만, 이것은 어떤 시스템에서도 일반적인 문제이다. – Torp

+0

동의. 밝기가 250 인 경우 밝기> 255가 거짓이면 밝기가 15 씩 증가하고 AnalogOutput에이 값을 씁니다. –

답변

1

코드에서 중요한 문제는 deger을 전역 변수로 사용하고 loop을 반복적으로 호출하기 때문에 밝기 증가/감소가 루프가 실행될 때마다 한 번만이 아니라 한 번만 적용된다는 것입니다. 키 누르기가 수신되었습니다.

여러 가지 방법 중 하나로이 문제를 해결할 수 있습니다. loop 끝에 deger을 삭제할 수 있습니다. 마지막 문자 인 if을 첫 번째 if 조건에 따라 대괄호로 묶으면 문자를 읽는 경우에만 실행될 수 있습니다. 모든

void loop() { 
    char deger = 0; 
0

먼저 나는 :이 호출 사이에 지속 할 필요가 없기 때문에

그러나, 대부분의 논리는, loop` '의 시작 선언 deger 로컬 변수를 확인하는 것입니다 있는 경우 스위치 대신에 3을 사용합니다.

switch(deger) 
{ 
case 'A': 
     if(brightness+15>=255) 
      { 
      brightness = 0; 
      } 
     brightness=brightness+15; 
     analogWrite (LedPin, brightness); 
break; 
}