Дано: 1. Arduino UNO или NANO Китайская - 1шт или другая, куда скетч влезет. 2. GY-30 Датчик освещенности - 1шт (А4 и А5 // выходы SDA и SCL (Add - в земле)) 3. HC-SR04 Датчик измерения расстояния - 1шт (8,9// выходы для Trig и Echo) 4. Светодиодик, работающий, 1шт (как то жив на 5 вольтах) Логика (хотелось бы): Если светло, более 500lx думает датчик GY-30, то просто ждем. Если темно в помещении, наже 500lx думает датчик GY-30, то пусть HC-SR04 измеряет расстояние до объекта и если до объекта менее 90 см, то надо потихоньку-потихоньку включить светодиодик. А когда становится больше то так же плавно выключить. Если резко стало светло более 500lx думает датчик GY-30, вырубить светодиод и не измерять расстояние пока опять не потемнеет. Помогите разобраться и написать код. Вот что я осилил, но все идет не так как то. Код (C++): #include <Wire.h> #include <BH1750FVI.h> #include <Ultrasonic.h> BH1750FVI myBH1750; Ultrasonic ultrasonic(8,9); // выходы для Trig и Echo #define LED_PIN 3 void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); } void loop() { delay(1000); if (myBH1750.readLightLevel() >500 ) { Serial.print(ultrasonic.distanceRead(CM)); // выводим расстояние в сантиметрах Serial.println("cm"); // выводим надпись "cm" if (ultrasonic.distanceRead(CM) <30) { Serial.print("Ярко: "); Serial.print(myBH1750.readLightLevel()); Serial.println(); for(int i=255;i>=0;i--) { analogWrite(LED_PIN, i); analogWrite(LED_PIN, LOW); //delay(5); // ставим задержку для эффекта } } else { Serial.print("Тускло: "); Serial.print(myBH1750.readLightLevel()); Serial.println(); for(int i=0;i<=255;i++) { analogWrite(LED_PIN, i); analogWrite(LED_PIN, HIGH); } } } }
Нужно чтобы срабатывало, когда меньше 500, а сами пишите проверку, что больше. Собственно и остальные условия у вас написаны наоборот а этим кодом вы проверяете, что меньше 30 см и гасите светодиод, как бы постепенно, но ещё зачем то дописали analogWrite(LED_PIN, LOW);
Спасибо, это я заметил, просто уже так наэкспериментировался, что начал путить... Я поправил. Код (C++): #include <Wire.h> #include <BH1750FVI.h> #include <Ultrasonic.h> BH1750FVI myBH1750; Ultrasonic ultrasonic(8,9); // выходы для Trig и Echo #define LED_PIN 3 void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); } void loop() { delay(1000); if (myBH1750.readLightLevel() <500 ) { Serial.print(ultrasonic.distanceRead(CM)); // выводим расстояние в сантиметрах Serial.println("cm"); // выводим надпись "cm" if (ultrasonic.distanceRead(CM) <30) { Serial.print("Ярко: "); Serial.print(myBH1750.readLightLevel()); Serial.println(); for(int i=255;i>=0;i--) { analogWrite(LED_PIN, i); delay(5); // ставим задержку для эффекта } } else { Serial.print("Тускло: "); Serial.print(myBH1750.readLightLevel()); Serial.println(); for(int i=0;i<=255;i++) { analogWrite(LED_PIN, i); delay(5); } } } } но всерано работает неправильно. когда темно, то светит как маяк, если осветить когда включен светодиод то не гаснет сам тухнет не до конца, а так, пульсирует как бы. Насчет последнего, пытался зафиксировать как то состояние.
В этом коде вы гасите светодиод. Если добавить условие выше, то вы его гасите, когда расстояние меньше 30см. Вообщем, циклы местами поменять нужно. Только циклы