Светодиод Arduino PWM не загорается и не гаснет

Я пытаюсь сделать тыкву с привидениями Arduino, используя датчик PIR, чтобы активировать светодиоды для огней и рта. Я хочу, чтобы светодиоды во рту немедленно отключились, а глаза исчезли. Я работаю над этим уже несколько часов и не могу понять, почему светодиоды в глазах не исчезают или не исчезают, хотя тот же фрагмент кода отлично работает в своей собственной программе. Я, вероятно, пропускаю что-то маленькое и легкое, но не могу найти это.

Быть нежным. Я знаю, что код грязный. Я пробовал множество разных вещей и, как правило, комментирую их, а не удаляю, если они мне понадобятся позже.

 //Uses a PIR sensor to detect movement.
//Randomly selects a number that corresponds to a set of LED's
//Lights up LED's 
//Author: 
//Date: 11/12/2014

int inputPin = A1;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status
//int randNumber;                 //variable for holding the random number
//int eyeblue =6;                 //Variable for Blue eye LED's
//int eyered =9;                  //Variable for Red eye LED's
//int eyegreen =3;                //Variable for Green eye LED's
//int mouthblue =10;              // Variable for Blue mouth LED's
//int mouthred = 11;              //Variable for Red mouth LED's
//int mouthgreen = 5;            //Variable for Green eye LED's
int eyespin = 0;
int mouthpin = 0;

int moutharray[] ={
  5,10,11};
int eyesarray[] = {
  3,6,9};
//int thisPin ;


void setup(){
  Serial.begin(9600);
  pinMode(inputPin, INPUT);     // declare PIR sensor as input
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  //randomSeed(analogRead(0));
}

void motion(){

  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {            // check if the input is HIGH
    eyes();
    //mouth();
    delay(1000);

    if (pirState == LOW) {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
      delay(300);
    }
  } 
  else {
    delay(300);    
    if (pirState == HIGH){
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
  }
}


void eyes(){  
  eyespin = eyesarray [random (0, 3)];
  mouthpin = moutharray[random (0, 3)];

  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    digitalWrite(eyespin, fadeValue);   // turn the LED on (HIGH is the voltage level)
    delay(30);                            
  } 

  digitalWrite(mouthpin, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);               // wait for a second


  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    digitalWrite(eyespin, fadeValue);    // turn the LED off by making t
    delay(30);
  }
  digitalWrite(mouthpin, LOW);    // turn the LED off by making the voltage LOW

    delay(500);               // wait for a second

}

void loop(){
  // eyes();
  // mouth();
  motion();
}

person Dajan Ra    schedule 15.11.2014    source источник


Ответы (1)


Очень простая оплошность. Линия:

for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
digitalWrite(eyespin, fadeValue);    

Должно быть написано:

for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
analogWrite(eyespin, fadeValue);

Обратите внимание, что теперь это AnalogWrite, а не digitalWrite. Цифровая запись может выдавать только значения 0/1, нам нужно 0-255.

Надеюсь, это исправит ситуацию для вас.

person Drew    schedule 21.11.2014