есть скетч для дальномера -нужно включать только в темноте -на датчике выход-0 или 1 как вставить в скетч помогите пожалуйста Написал скетч -но реле включается на пол секунды и все! Что не так? btnPin-вход датчика света const int Trig = 8; const int Echo = 9; const int Relay = 11; const int btnPin = 12; void setup() { pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); pinMode(Relay, OUTPUT); pinMode(btnPin, INPUT); Serial.begin(9600); } unsigned int time_us=0; unsigned int distance_sm=0; void loop() { if (btnPin,HIGH) delay(100); else digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера delayMicroseconds(10); // Удерживаем 10 микросекунд digitalWrite(Trig, LOW); // Затем убираем time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=time_us/58; // Пересчитываем в сантиметры Serial.println(distance_sm); // Выводим на порт if (distance_sm<50) // Если расстояние менее 50 сантиметром { digitalWrite(Relay, 1); // включаем delay(7000);} else { digitalWrite(Relay, 0); // иначе выключаем } delay(100); }
Код (Text): const int Trig = 8; const int Echo = 9; const int Relay = 11; const int btnPin = 12; void setup() { pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); pinMode(Relay, OUTPUT); pinMode(btnPin, INPUT); Serial.begin(9600); } unsigned int time_us=0; unsigned int distance_sm=0; void loop() { if (!digitalRead(btnPin)) { digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера delayMicroseconds(10); // Удерживаем 10 микросекунд digitalWrite(Trig, LOW); // Затем убираем time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=(unsigned int)floor(0.5+((float)time_us/(float)58.0)); // Пересчитываем в сантиметры Serial.println(distance_sm); // Выводим на порт if (distance_sm<50) // Если расстояние менее 50 сантиметром { digitalWrite(Relay, 1); // включаем delay(7000); } else { digitalWrite(Relay, 0); // иначе выключаем } } delay(100); }
Шилд с lmкой когда темно на выходе 1 и еще реле работает наоборот всегда включено а кода подносишь руку -выключается -но работает правильно!
Вообще код должен выглядеть как-то так: Код (Text): #define PIN_SENSOR_DISTANCE_TRIGGER 8 #define PIN_SENSOR_DISTANCE_OUTPUT 9 #define PIN_SENSOR_LIGHT_OUTPUT 12 #define PIN_RELAY 11 #define LIGHT_ON HIGH #define LIGHT_OFF LOW #define RELAY_ON HIGH #define RELAY_OFF LOW #define DELAY_DISTANCE_SENSE_US 10 #define FACTOR_DISTANCE_US_TO_SM 58.0 #define THRESHOLD_DISTANCE_SM 50 #define DELAY_RELAY_ON_MS 7000 #define DELAY_MAIN_LOOP_MS 100 #define SERIAL0_BAUDRATE 9600 void setup() { pinMode(PIN_SENSOR_DISTANCE_TRIGGER, OUTPUT); pinMode(PIN_SENSOR_DISTANCE_OUTPUT, INPUT); pinMode(PIN_SENSOR_LIGHT_OUTPUT, INPUT); pinMode(PIN_RELAY, OUTPUT); Serial.begin(SERIAL0_BAUDRATE); } unsigned int time_us=0; unsigned int distance_sm=0; void loop() { if (LIGHT_ON==digitalRead(PIN_SENSOR_LIGHT_OUTPUT)) { digitalWrite(PIN_SENSOR_DISTANCE_TRIGGER, HIGH); // Подаем сигнал на выход микроконтроллера delayMicroseconds(DELAY_DISTANCE_SENSE_US); // Удерживаем 10 микросекунд digitalWrite(PIN_SENSOR_DISTANCE_TRIGGER, LOW); // Затем убираем time_us=pulseIn(PIN_SENSOR_DISTANCE_OUTPUT, HIGH); // Замеряем длину импульса distance_sm=(unsigned int)floor(0.5+((float)time_us/FACTOR_DISTANCE_US_TO_SM)); // Пересчитываем в сантиметры Serial.println(distance_sm); // Выводим на порт if (distance_sm<THRESHOLD_DISTANCE_SM) // Если расстояние менее 50 сантиметром { digitalWrite(PIN_RELAY, RELAY_ON); // включаем delay(DELAY_RELAY_ON_MS); } else { digitalWrite(PIN_RELAY, RELAY_OFF); // иначе выключаем } } delay(DELAY_MAIN_LOOP_MS); }
Спасибо! работает по старому коду с небольшой ошибкой- если реле включено и в это время стало светло, т.е появился высокий уровень на выходе ф.сенсора то реле не выключается пока не затемнишь сенсор. Попробую ваш новый код -отптшусь.