Изменения яркости светодиодов

Я использую два разных типа кода и заметил, что в первой настройке последний светодиод тусклее, чем остальные. Затем во второй настройке первый светодиод ярче остальных. Я хотел бы знать, что вызывает это и как я могу это исправить. Моя конечная цель — подключить 30 светодиодов к Arduino Mega и синхронизировать их последовательность. Я строю проект с нуля, начиная с 3 светодиодов на Arduino Uno. Я очень ценю ваши идеи.

В первой настройке используется кнопка в качестве переключателя для последовательного включения 3 светодиодов с использованием резисторов 220 Ом. Первые два светодиода, подключенные к контактам 2 и 4, ярко светят, в то время как последний вы можете едва увидеть маленькую точку света.

кнопочное управление 3 светодиодами на Arduino Uno

Вот код для этого:

int ledState = 0;
int ledPin1 = 2;
int ledPin2 = 4;
int ledPin3 = 7;
int buttonState = 0;
const int buttonPin = 12;
int buttonNew;
int buttonOld;
int fiveInterval = 3000;
int oneInterval = 1000;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(buttonPin, INPUT);

}

void loop() {
  buttonNew = digitalRead(buttonPin);

  if(buttonOld == 0 && buttonNew == 1){
    if(ledState == 0){
      digitalWrite(ledPin1, HIGH);
      delay(fiveInterval);
      digitalWrite(ledPin2, HIGH);
      delay(fiveInterval);
      digitalWrite(ledPin3, HIGH);
      ledState = 1;
//      for(int i ){
//        
//      }
    }else{
      digitalWrite(ledPin1, LOW);
      digitalWrite(ledPin2, LOW);
      ledState = 0;
    }
  }
  buttonOld = buttonNew;
  delay(100);
}

Вторая настройка — это код, который я позаимствовал из учебника. 1-й светодиод (подключенный к контакту 2) в несколько раз ярче следующих светодиодов. Это синхронизированное включение / выключение 3 светодиодов с использованием резисторов 220 Ом. 3 последовательно загорающихся светодиода на Arduino Uno Вот код для этого:

#define LED_PIN_1 2
#define LED_PIN_2 4
#define LED_PIN_3 7
#define LED_NUMBER 3
byte LEDPinArray[LED_NUMBER] = { LED_PIN_1,
                                 LED_PIN_2,
                                 LED_PIN_3 };
int LEDIndex = 0;
void initAllLEDs()
{
  for (int i = 0; i < LED_NUMBER; i++) {
    pinMode(LEDPinArray[i], OUTPUT);
  }
}
void powerOnSelectedLEDOnly(int index)
{
  for (int i = 0; i < LED_NUMBER; i++) {
    if (i == index) {
      digitalWrite(LEDPinArray[i], HIGH);
    }
    else {
      digitalWrite(LEDPinArray[i], LOW);
    }
  }
}
void toggleNextLED()
{
  LEDIndex++;
  if (LEDIndex >= LED_NUMBER) {
    LEDIndex = 0;
  }
  powerOnSelectedLEDOnly(LEDIndex);
}
void setup()
{
  initAllLEDs();
  digitalWrite(LEDPinArray[LEDIndex], HIGH);
}
void loop() 
{
  delay(1000);
  toggleNextLED();
}

, 👍1

Обсуждение

крайний правый светодиод не имеет последовательно включенного резистора, @jsotola

код был бы проще, если бы вы использовали массивы... ledPin[1], ledPin[2] и т. д. таким образом, вы можете использовать цикл для включения всех, у которых индекс меньше или равно LEDIndex, @jsotola

Вы не настраиваете все светодиоды на ВЫХОД, поэтому один питается от внутреннего подтягивающего резистора., @Majenko

Спасибо всем за ваши полезные предложения. Я исправил ошибки, а также потратил некоторое время на написание кода с массивами, и теперь я могу синхронизировать свои 30 светодиодов с одинаковой яркостью в последовательности. Теперь перейдем к следующей задаче... управлять ими с помощью двух кнопок! :), @Genma