即使“if”条件不满足,我的OCR1A也在变化

时间:2016-03-12 19:11:40

标签: arduino-ide

我正在尝试编写一个使用Arduino Mega 2560上的引脚11的简单PWM伺服控制。该伺服应该按CW(顺时针)或CCW(逆时针)转动,具体取决于按住两个按钮中的一个(L和R)。我似乎遇到的问题是,即使'if'语句不为真,我设置为更改OCR1A(i)的变量也在递增。按钮工作正如我使用Serial.println(PINA)进行测试以确保。我真的不确定我哪里出错了。我将不胜感激任何帮助。

void setup() {
  // put your setup code here, to run once:
  TCCR1A |= (1<<COM1A1)|(1<<WGM11)|(1<<WGM10);
  TCCR1B = 0B00001100; // set mode 7 and prescale to 256
  DDRB |= (1<<PB5); // data direction register for PORTB(pwm output pin 11)
  DDRA = (1<<2)|(1<<3); // Last 2 digits of PORTA are inputs
  Serial.begin(9600); //initialize the serial
}

void loop() {
  int   i = 63;
  // This value controls the duty cycle, duty(%) = OCR1A/255*100
  // 63 is just a random start position
  OCR1A = i;
  int swL;
  int swR;
  swL = PINA & 0b00000001;
  swR = PINA & 0b00000010;
  while(i<160) {
    if (swR != 0b00000001) {
      i++; // increments OCR1A when button R is pressed
      Serial.println(PINA); // For testing button is pressed
      Serial.println(OCR1A); // debugging use
      Serial.println(i); // debugging use
      delay(100);
    }
    if(swL != 0b00000010) {
      i--; // negative increments when button L is pressed
      Serial.println(PINA);
      Serial.println(OCR1A);
      Serial.println(i);
      delay(100);
    }
  }
}

2 个答案:

答案 0 :(得分:0)

似乎PINA & 0b00000001swL提供了一些价值。现在我无法找到PINA的初始值,但我认为它是另一个具有二进制值的变量,所以当两个值执行 按位和 <时/ strong>他们为swL提供了不同的值

我想这就是if条件的原因 if (swL != 0b00000001)计算到TRUE,然后输入if语句。

另一个变量swR也是如此,因此它也会进入if statement

我可能错了,但看看这些台词:

swL = PINA & 0b00000001; swR = PINA & 0b00000010;

答案 1 :(得分:0)

谢谢,事实证明我只需要额外的一双眼睛。我的swR和swL被交换了。通过一些其他更改,它现在可以按预期工作。谢谢大家。