Мне нужен код для пары из 6 LDR/LED

Каждый LDR подключен к одному светодиоду, потому что я делаю модель парковки. Я пробовал, но безуспешно. Помогите!

    int ledPin = 11;
int sensorInput = A0;

boolean ledIsOn = false;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int lightLevel = analogRead(A0);

  if (ledIsOn) {
    if (lightLevel > 600) {
      ledIsOn = false;
    }
  } else {
    if (lightLevel < 400) {
      ledIsOn = true;
    }
  }

  digitalWrite(ledPin, ledIsOn);

  Serial.println(lightLevel);
}

*это код для одного светодиода на один датчик LDR, но я не могу сделать 6 светодиодов на 6 LDR

и я сделал этот код для 6 LDR

#define pin_size 6
const int pin[pin_size] = { A0, A1, A2, A3, A4, A5};

void setup() {

  Serial.begin(9600);

}

void loop() {
  for (int i = 0 ; i < pin_size; i++) {
    Serial.print(analogRead(pin[i]));
    Serial.print(" - ");
    Serial.print(i);
    Serial.print("  |  ");

  }
  Serial.print("\n");
  delay(1000);

}

, 👍-1

Обсуждение

Добро пожаловать в Arduino:SE. Пожалуйста, имейте в виду, что это не бесплатный дизайн-центр и не техническая энциклопедия по запросу. Пожалуйста, пересмотрите свой вопрос, показав свою работу и выводы на данный момент. Возможно, вам будет полезно просмотреть сайт [tour](https://arduino.stackexchange.com/tour) и [Help Centre](https://arduino.stackexchange.com/help) и, в частности, [ask]., @sempaiscuba

Я попытался ... пожалуйста, покажите работу, которую вы проделали ... у вас есть вопрос? ... вы ничего не спросили., @jsotola

Если вы хотите, чтобы одно и то же действие повторялось несколько раз с несколькими настройками или значениями, может быть полезно обобщить его, создав класс, а затем создав один экземпляр объекта для каждой пары светодиод + фоторезистор., @Majenko

можете ли вы объяснить подробнее?, @Rana

вы опубликовали рабочий код для одной пары LDR/LED .... пожалуйста, опубликуйте код, который не работает, @jsotola

Это код для одного светодиода на один датчик LDR, но я не могу сделать 6 светодиодов на 6 LDR, @Rana

примечание: вам не нужен этот оператор if (ledIsOn) { ..... только две строки if (lightLevel > 600) ledIsOn = false; и if (lightLevel < 400) ledIsOn = true;, @jsotola

Хорошо, можете ли вы помочь мне с кодом для 6 LDR и 6 светодиодов, но я не могу этого сделать., @Rana

используйте lightLevel_1, ledIsOn_1, lightLevel_2, ledIsOn_2, lightLevel_3, ledIsOn_3 и т. д., @jsotola

Кажется, я не могу этого сделать ... вы все еще не опубликовали свой код, который вы попробовали, но он не работает так, как ожидалось, @jsotola

Я отредактировал свой пост сейчас, @Rana

У меня есть код для 6 LDR, но я не знаю, как сделать код с 6 LDR и 6 светодиодами., @Rana

выводит ли этот код значения из 6 LDR? ..... сделайте сравнение внутри цикла for .... добавьте код, который использует lightLevel[i] и ledIsOn[i], @jsotola

этот код предназначен только для 6 LDR, и мне нужно добавить к нему 6 светодиодов, поскольку мой проект заключается в создании 6 пар LDR/LED., @Rana

можете ли вы мне помочь с кодами?, @Rana

Вы действительно понимаете, что именно делает код для 1 пары LDR/LED? Кажется, нет. Вы уже создали цикл for, который перебирает все аналоговые входы. Теперь создайте массив с номерами контактов светодиодов, как вы делали с аналоговыми контактами. Внутри цикла for сделайте то, что вы делали раньше с 1 парой LDR/LED: считайте аналоговое значение в переменную, проверьте, находится ли переменная выше 600 или ниже 400, и используйте digitalWrite() с соответствующим номером контакта (из массива), чтобы установить правильное значение. Если вы не можете этого сделать, вы не поняли, что делает исходный код., @chrisl


1 ответ


1

Вам нужно преобразовать все обычные переменные в массивы. Цикл по каждому индексу и выполнить то же самое, что и раньше для каждого индекса.

const int pin_size 6
int ledPins[] = {3, 4, 5, 6, 7, 8};
int sensorPins[] = {A0, A1, A2, A3, A4, A5};
boolean ledIsOn[] = {false, false, false, false, false, false};

void setup() {
  for (int i = 0 ; i < pin_size; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
  Serial.begin(9600);
}

void loop() {
  for (int i = 0 ; i < pin_size; i++) {
    int lightLevel = analogRead(sensorPins[i]);

    if (ledIsOn[i]) {
      if (lightLevel > 600) {
        ledIsOn[i] = false;
      }
    } else {
      if (lightLevel < 400) {
        ledIsOn[i] = true;
      }
    }

    digitalWrite(ledPins[i], ledIsOn[i]);

    Serial.println(lightLevel);
  }
}
,

похоже, вы выполнили школьное задание ОП., @jsotola

@jsotola Я не был до конца уверен и отнесся к этому с пониманием., @Gerben

Вы, возможно, правы в своих мыслях... Я не хочу принижать ваш выбор ответа, мне просто интересно, узнал ли автор чего-нибудь, @jsotola