Здравствуйте. Помогите пожалуйста написать скетч. В электронике разбираюсь, а в программировании новичок. Задача такая. 1. При движении проверяем освещенность 2. если темно зажигаем подсветку на 10 сек 3. если движение больше 10 сек зажигаем основной свет 4. если движения нет через 1 мин выкл. основной свет через 10 сек выкл подсветку (время выкл при каждом движении передвигается чтобы не мигать светом) 5. проверяется команда на вкл от Выключателя света и от радио модуля. 6. Если команда есть минуем датчик освещения и движениея и включаем всё, но на 5 мин 7. выключаем проверяя пункт 4 8. проверяем температуру и отправляем на радиомодуль каждые 5 минут Delay использовать нельзя! Использовать millis() Пункт 5 и 8 попробую вставить сам (только куда?) В наличии arduinominipro, датчик движения, освещения, температуры, радиомодули приёмник и передатчик Отталкивался от этого кода но ничего не получается. Заранее спасибо. //Если обнаружено движение if(digitalRead(pirPin) == HIGH) { // Записываем время когда началось дижение timee=millis(); digitalWrite(ledPin2, LOW); // Проверяем освещённость в комнате if (PhotoRValue<500) { //Включаем реле. digitalWrite(relayPin, HIGH); digitalWrite(ledPin, HIGH); // delay(50); } } //Елидвижениянет if(digitalRead(pirPin) == LOW) { digitalWrite(ledPin2, HIGH); //Если время без движение превышает паузу => движение окончено if(millis()- timee > pause) { digitalWrite(relayPin, LOW); digitalWrite(ledPin, LOW); // delay(50); } } }
У тебя почти шаговый план написан.Сначала собери, напиши программу для каждого датчика отдельно и протестируй . А потом все это объединишь в одном проекте. Почитай как использовать миллис и вставь в свой проек вместо делай. Немного примеров и вот тут есть про милис
Спасибо. Всё заработало. Код (Text): if(digitalRead(pirPin) == HIGH) if(flagPause == 1) timee=millis(); flagPause = 0; До этого мучился с обнулением времени для отсчета 10 секунд. Первая моя программа всё работает за совет и или поправления буду очень рад Код (Text): static bool flagPause = 1; long unsigned int timee; long unsigned int timee1; int pirPin = 41; //вывод подключения PIR датчика int ledPin = 50; //вывод сигнального диода int ledPin2 = 44; //вывод сигнального диода 2 int PhotoRPin = A8; //Фоторезистор int PhotoRValue; void setup() { Serial.begin(9600); pinMode(pirPin, INPUT); pinMode(ledPin, OUTPUT); pinMode(ledPin2, OUTPUT); digitalWrite(ledPin, LOW); digitalWrite(ledPin2, LOW); Serial.println("SENSOR ACTIVE"); delay(50); } void loop() { serial(); moove(); //kn(); //temperatur(); //rf tx(); //rf rx(); } void serial() { PhotoRValue = analogRead(PhotoRPin); Serial.println("Liht: "); Serial.println(PhotoRValue); Serial.println("Moove: "); Serial.println(pirPin); Serial.println("Timee: "); Serial.println(millis() - timee); Serial.println("Timee1: "); Serial.println(millis() - timee1); Serial.println("flagPause: "); Serial.println(flagPause); delay(1000); } void moove () //Если обнаружено движение { if (digitalRead(pirPin) == HIGH) if (PhotoRValue < 500) // Проверяем освещённость в комнате { timee = millis(); // Записываем время когда началось дижение if (flagPause == 1) //Записываем время1 когда началось дижение { timee1 = millis(); flagPause = 0; digitalWrite(ledPin, HIGH); //Включаем led } if (digitalRead(ledPin) == HIGH) //Проверяем led if (millis() - timee1 >= 10000) digitalWrite(ledPin2, HIGH); //Включаем led2 } //Ели движения нет if (digitalRead(pirPin) == LOW) { if (millis() - timee > 60000) //Если время без движение превышает паузу => движение окончено digitalWrite(ledPin2, LOW); if (millis() - timee > 70000) { digitalWrite(ledPin, LOW); flagPause = 1; } } }