Чем темнее, тем больше лампочек включается.

AeroFly
Offline
Зарегистрирован: 26.03.2019

Всем здрасте.

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

Сейчас прошел урок где зажигается светодиод, если темнеет.(фоторезистор)

И вот мне захотелось зделать так как в названии темы, но не выходит.(пока только 2 светодиода)

То сразу оба загораются, то только один.

Вот последнее, что делал, горит только один:

if (sensorWert < 400)
  {
  digitalWrite(LED1,HIGH);
  }
  else if (sensorWert > 400)
  {
    digitalWrite(LED1,LOW);
  }
  else if (sensorWert < 300)
  {
    digitalWrite(LED2,HIGH);
  }
  else if (sensorWert > 300)
  {
    digitalWrite(LED2,LOW);
  }

Вот так еще пробывал:

if (sensorWert < 400)
  {
  digitalWrite(LED1,HIGH);
  }
  if (sensorWert < 300)
  {
    digitalWrite(LED2,HIGH);
  }
  else
  {
    digitalWrite(LED2,LOW);
    digitalWrite(LED1,LOW);

Еще по всякому менял и никак. 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

А если так:

  if (sensorWert > 400)
  {
    digitalWrite(LED2, LOW);
    digitalWrite(LED1, LOW)
  } 
  else
  {
    digitalWrite(LED1, HIGH);
  }
  if (sensorWert < 300)
  {
    digitalWrite(LED2, HIGH);
  }

Только, сдается мне, что разница в освещении между 300 и 400  будет совсем небольшая, и не факт, что инграя со светом удасться попасть в диапазон между 300 и 400. В результате будет или 2 дода гореть или ноль.

AeroFly
Offline
Зарегистрирован: 26.03.2019

asam пишет:

А если так:


Спасибо. Интересное решение )) Вечером попробую.
asam пишет:

Только, сдается мне, что разница в освещении между 300 и 400  будет совсем небольшая, и не факт, что инграя со светом удасться попасть в диапазон между 300 и 400. В результате будет или 2 дода гореть или ноль.


Там всего между 200 и 500 показания меняются. Это при свете лампочки и без солнца.
Но хорошо, попробую днем, что бы диапазон побольше был.

AeroFly
Offline
Зарегистрирован: 26.03.2019

asam пишет:

А если так:

Получилось, но при повышении освещения 2й светодиод не отключается, пока не станет светлее, что бы и 1й отключился.

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

Вот так работает, хоть на 10 светодиодов:


  if (sensor < 400)
  {
    digitalWrite(LED1,HIGH); 
  }
  else
  {
    digitalWrite(LED1,LOW);
  }
   if (sensor< 300)
  {
    digitalWrite(LED2,HIGH); 
  }
  else
  {
    digitalWrite(LED2,LOW);

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Уважаемый, да хрен там сколько у Вас будет светодиодов. Вы главное поймите - КАЖДЫЙ светодиод включается при определенной освещенности и отключается тоже по определенной.

Напишите нормальнный алгоритм ЕСЛИ-ТО-ИНАЧЕ для каждого светодиода и все заработает. 

И не надо заниматься непотребством.

sadman41
Offline
Зарегистрирован: 19.10.2016
byte ledsPins[] = {A0, A3, 3, 8, 5, 4};
...
sensor = ...

ledsOnNum = 0;

if (sensor > 400) { ledsOnNum = 4; }
...
if (sensor > 800) { ledsOnNum = 8; }
...
for (byte i=0; i < sizeof(ledsPins); i++) {
  digitalWrite(ledsPins[i], (i < ledsOnNum)).
}

 

walt88
Offline
Зарегистрирован: 14.04.2019
void loop() {
	digitalWrite(LED1, sensor <= 100 ? HIGH : LOW); 
	digitalWrite(LED2, sensor <= 200 ? HIGH : LOW); 
	digitalWrite(LED3, sensor <= 300 ? HIGH : LOW); 
	digitalWrite(LED4, sensor <= 400 ? HIGH : LOW); 
	digitalWrite(LED5, sensor <= 500 ? HIGH : LOW); 
	digitalWrite(LED6, sensor <= 600 ? HIGH : LOW); 
	digitalWrite(LED7, sensor <= 700 ? HIGH : LOW); 
	digitalWrite(LED8, sensor <= 800 ? HIGH : LOW); 
	delay(100); 
}