"Умное освещение"

Victor_San
Offline
Зарегистрирован: 24.03.2018

Добрый вечер.
Возникла проблема с этим проектом.... 

Не кидайтесь тапками, опыта в программирование по сути нет, вот и маюсь сижу.
* Проблема такова: *
Есть 6 "блоков", глядя на схему их можно разделить. 
Каждый блок выполняет свою определенную функцию. 
Без особых усилий смог собрать каждый блок и "накалякать", найти для каждого блока скетч.
Но не хватает моих познаний, опыта, мозгов, чтобы соединить, "слепить" из 6 скетчей - один рабочий.
-
Вот от безнадеги решил обратиться за помощью к уже бывалым программистам и гениям.
Возможно же "склеить" их в один?
-

По схеме: большой квадратик с 4-мя пинами - это датчик звука.
Квадратик (прямоугольник) с 3-мя пинами - это датчик Движения.
! в скетчах могут не совпадать пины со схемой!
Остальное, думаю, понятно.
-
-
скетчи:

// 1 Датчик Звука (Хлопки)
boolean statuslamp; 

void setup() 
{
pinMode(12,OUTPUT); 
pinMode(A0,INPUT); 
statuslamp=false; 
Serial.begin(9600); 
}

void loop() 
{
Serial.println (analogRead(A0)); 
if(analogRead(A0)>60)
statuslamp=!statuslamp; 
digitalWrite(12,statuslamp); 
delay(20); 
}
}

// 2 Датчик движения

#define pirKor 2
#define ledKor 13
#define ledKor_ 4
int calibrationTime = 10; //t калибровки датчика (10-60 сек. по даташиту)
void setup()
{
Serial.begin(9600);
pinMode(pirKor, INPUT);
pinMode(ledKor, OUTPUT);
pinMode(ledKor_, OUTPUT);
Serial.print("Калибровка");
for (int i = 0; i < calibrationTime; i++)
{
Serial.print(".");
delay(500);
}
Serial.println("Готово");
Serial.println("SENSOR ACTIVE");
delay(50);
}
void loop()
{
int pirVal = digitalRead(pirKor);
if (pirVal == HIGH) //Если обнаружили движение
{
digitalWrite(ledKor, HIGH);
digitalWrite(ledKor_, HIGH);
Serial.print("Wow_горит");
delay(5000);
}
else
{
Serial.print("Aaa_Idiot");
digitalWrite(ledKor, LOW);
digitalWrite(ledKor_, LOW);
}
}

// 3 Датчик освещенности (Без доп. управления - кнопки) (13 пины для себя были)
#define ledKom 13
#define ledKom_ 10
#define photoKom A2

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

void loop() {

void kom();

void kom()
{
int val = analogRead(photoKom);
Serial.println("...");
Serial.println(val);
if (val < 850) { //950 = 10к Ом
digitalWrite(ledKom, LOW); // hign
digitalWrite(ledKom_, LOW); // hign
} else {
digitalWrite(ledKom, HIGH); //low
digitalWrite(ledKom_, HIGH); // low
}}

// 4-5 Кнопка 
int knopkaZal = 7;
int ledZal = 8;

boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;

void setup() {
pinMode(knopkaZal, INPUT);
pinMode(ledZal, OUTPUT);
}

boolean debounse(boolean last) {
boolean current = digitalRead(knopkaZal);
if(last != current) {
delay(5);
current = digitalRead(knopkaZal);
}
return current;
}

void loop() {
currentButton = debounse(lastButton);
if(lastButton == LOW && currentButton == HIGH) {
ledOn = !ledOn;
}
lastButton = currentButton;
digitalWrite(ledZal, ledOn);
}

// 6 Датчик Освещенности с доп. управлением - кнопка.

int ledVxod_ = 2;
int photoVxod = A0;
int knopkaVxod = 9;
// переменные для хранения состояния кнопки и светодиода
boolean lastKnopka = LOW;
boolean currentKnopka = LOW;
boolean ledOnn = false;
void setup() {
Serial.begin(9600);
pinMode(ledVxod_, OUTPUT);
pinMode(knopkaVxod, INPUT);
}
boolean debounse(boolean last) {
boolean current = digitalRead(knopkaVxod);
if (last != current) {
delay(5);
current = digitalRead(knopkaVxod);
}
return current;
}
void loop() {

int val = analogRead(photoVxod);
Serial.println("...");
Serial.println(val);

if (val < 950) { //950

digitalWrite(ledVxod_, HIGH);
} else {

digitalWrite(ledVxod_, LOW);
currentKnopka = debounse(lastKnopka);
if (lastKnopka == LOW && currentKnopka == HIGH) {
ledOnn = !ledOnn;
}
lastKnopka = currentKnopka;
digitalWrite(ledVxod_, ledOnn);
}}

- Как-то так.... 
Возможно же запрограммировать на Совместную работу? 
Например, если срабатывает Датчик Движения - лампа (светодиод) горит, а в тоже время активны и другие блоки?

 

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Боюсь, что гении такой хер... до такой мелочи не опускаются. А бывалых программистов я тут не видел. Хотя, нет, есть один. По его словам, конечно. Остальные только мелочь по карманам тырят. По его мнению.

Так что даже и не знаю - смогут ли вам тут помочь или нет.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Тут надо текнически, а мы текникумы не кончали. https://www.youtube.com/watch?v=TS-1_hHknPg

Victor_San
Offline
Зарегистрирован: 24.03.2018

Ну, да.... Гении* программируют  "умные дома" полностью, а не дачный вариант освещения. 
Но ведь и смертным помогать то надо? 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Victor_San пишет:
Но ведь и смертным помогать то надо?

 А что делать, если "смертные" такие тупые, что даже код не могут правильно вставить http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

И что делать жизнь у смертных такая короткая, ну не успевают ума набраться. Только вот вот за ум взялся а смерть к нему и пришла.https://www.youtube.com/watch?v=rrPJ1nkn4kU

nik182
Offline
Зарегистрирован: 04.05.2015

Правила объединения. Всё что  во всех скетчах до setup собрать всё вместе и поместить сверху. Всё что внутри всех setup собрать последовательно в один setup.  Всё что во всех loop собрать в один loop.  Проверить константы и переменные - если есть одинаковые - переименовать или лишние одиниковые выбросить, если логика позволяет. Проверить ноги процессора - если разные части обращались к одним и тем же за разными целями - перераспределить ноги. Скрестить пальчики и попробовать скомпилировать. Осталось проверить логику работы.     

Victor_San
Offline
Зарегистрирован: 24.03.2018

Скетчи:



// 1 Датчик Звука (Хлопки)
boolean statuslamp; 

void setup() 
{
pinMode(12,OUTPUT); 
pinMode(A0,INPUT); 
statuslamp=false; 
Serial.begin(9600); 
}

void loop() 
{
Serial.println (analogRead(A0)); 
if(analogRead(A0)>60)
statuslamp=!statuslamp; 
digitalWrite(12,statuslamp); 
delay(20); 
}
}

// 2 Датчик движения

#define pirKor 2
#define ledKor 13
#define ledKor_ 4
int calibrationTime = 10; //t калибровки датчика (10-60 сек. по даташиту)
void setup()
{
Serial.begin(9600);
pinMode(pirKor, INPUT);
pinMode(ledKor, OUTPUT);
pinMode(ledKor_, OUTPUT);
Serial.print("Калибровка");
for (int i = 0; i < calibrationTime; i++)
{
Serial.print(".");
delay(500);
}
Serial.println("Готово");
Serial.println("SENSOR ACTIVE");
delay(50);
}
void loop()
{
int pirVal = digitalRead(pirKor);
if (pirVal == HIGH) //Если обнаружили движение
{
digitalWrite(ledKor, HIGH);
digitalWrite(ledKor_, HIGH);
Serial.print("Wow_горит");
delay(5000);
}
else
{
Serial.print("Aaa_Idiot");
digitalWrite(ledKor, LOW);
digitalWrite(ledKor_, LOW);
}
}

// 3 Датчик освещенности (Без доп. управления - кнопки) (13 пины для себя были)

#define ledKom 13
#define ledKom_ 10
#define photoKom A2

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

void loop() {

void kom();
} 
void kom()
{
int val = analogRead(photoKom);
Serial.println("...");
Serial.println(val);
if (val < 850) { //950 = 10к Ом
digitalWrite(ledKom, LOW); // hign
digitalWrite(ledKom_, LOW); // hign
} else {
digitalWrite(ledKom, HIGH); //low
digitalWrite(ledKom_, HIGH); // low
}}

// 4-5 Кнопка 
int knopkaZal = 7;
int ledZal = 8;

boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;

void setup() {
pinMode(knopkaZal, INPUT);
pinMode(ledZal, OUTPUT);
}

boolean debounse(boolean last) {
boolean current = digitalRead(knopkaZal);
if(last != current) {
delay(5);
current = digitalRead(knopkaZal);
}
return current;
}

void loop() {
currentButton = debounse(lastButton);
if(lastButton == LOW && currentButton == HIGH) {
ledOn = !ledOn;
}
lastButton = currentButton;
digitalWrite(ledZal, ledOn);
}

// 6 Датчик Освещенности с доп. управлением - кнопка.

int ledVxod_ = 2;
int photoVxod = A0;
int knopkaVxod = 9;
// переменные для хранения состояния кнопки и светодиода
boolean lastKnopka = LOW;
boolean currentKnopka = LOW;
boolean ledOnn = false;
void setup() {
Serial.begin(9600);
pinMode(ledVxod_, OUTPUT);
pinMode(knopkaVxod, INPUT);
}
boolean debounse(boolean last) {
boolean current = digitalRead(knopkaVxod);
if (last != current) {
delay(5);
current = digitalRead(knopkaVxod);
}
return current;
}
void loop() {

int val = analogRead(photoVxod);
Serial.println("...");
Serial.println(val);

if (val < 950) { //950

digitalWrite(ledVxod_, HIGH);
} else {

digitalWrite(ledVxod_, LOW);
currentKnopka = debounse(lastKnopka);
if (lastKnopka == LOW && currentKnopka == HIGH) {
ledOnn = !ledOnn;
}
lastKnopka = currentKnopka;
digitalWrite(ledVxod_, ledOnn);
}}

 

nik182
Offline
Зарегистрирован: 04.05.2015

А в один собирать папаримский будет?

Victor_San
Offline
Зарегистрирован: 24.03.2018

Вот с этим и нужна помощь, сижу который уже день и жду Папу Римского*. 

nik182
Offline
Зарегистрирован: 04.05.2015

Ну так я описал что делать. За вас только в разделе ищу исполнителя кто то что сделает. Сделайте один скетч. Покажите что получилось. Будем дальше советы давать. Это форум по интересам. Если найдётся человек который будет строить освещение - вам повезло. Будет общий интерес. Тратить время на программу, которая никогда не пригодится, и не будет отлажена из за отсутствия железа не вижу смысла. Добрые дела обычно наказываются.