Где я ошибаюсь?

Нет ответов
Diamond_m
Offline
Зарегистрирован: 25.04.2014

Доброго времени суток!

Общаюсь с ардуино всего второй раз в жизни. Я не программист и никогда им не был. В первый раз удалось после нескольких дней сидения за изучением языка программирования и, еще большего времени для подгонки чужого скетча под свои нужды подогнать чужой скетч под свои нужды. Теперь вот опять пытаюсь вспомнить  "все былое" (С), чтобы подогнать чужой скетч под свои нужды. И опять подозреваю, что забыл закрыть где-нибудь фигурную скобку. Вкратце обрисую ситуацию. Есть четыре датчика движения. Я пока делаю скетч для двух датчиков. Взял готовый скетч и хотел переделать для себя. Только после переделки ардуино иногда выстреливает несколько сработок, а иногда после первой сработки уходит в аут.

Вот скетч:

Цитата:
[color=#7E7E7E]//Время калибровки датчика (10-60 сек. по даташиту)[/color] [color=#CC6600]int[/color] calibrationTime = 30;   [color=#7E7E7E]//время, когда датчик выдает импульс низкого уровня[/color] [color=#CC6600]long[/color] [color=#CC6600]unsigned[/color] [color=#CC6600]int[/color] lowIn;   [color=#7E7E7E]//время при котором датчик должен быть не активным[/color] [color=#7E7E7E]//прежде чем предпологается движение[/color] [color=#CC6600]long[/color] [color=#CC6600]unsigned[/color] [color=#CC6600]int[/color] pause = 5000;   [color=#CC6600]boolean[/color] lockLow = [color=#CC6600]true[/color]; [color=#CC6600]boolean[/color] takeLowTime;   [color=#CC6600]int[/color] pirPin1 = 7; [color=#CC6600]int[/color] pirPin2 =6; [color=#CC6600]int[/color] ledPin = 8;     [color=#7E7E7E]/////////////////////////////[/color] [color=#7E7E7E]//SETUP[/color] [color=#CC6600]void[/color] [color=#CC6600][b]setup[/b][/color](){   [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]begin[/color](9600);   [color=#CC6600]pinMode[/color](pirPin1, [color=#006699]INPUT[/color]);   [color=#CC6600]pinMode[/color](ledPin, [color=#006699]OUTPUT[/color]);   [color=#CC6600]digitalWrite[/color](pirPin1, [color=#006699]LOW[/color]);     [color=#7E7E7E]//дадим датчику время на калибровку[/color]   [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"calibrating sensor "[/color]);     [color=#CC6600]for[/color]([color=#CC6600]int[/color] i = 0; i < calibrationTime; i++){       [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"."[/color]);       [color=#CC6600]delay[/color](1000);       }     [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#006699]" done"[/color]);     [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#006699]"SENSOR ACTIVE"[/color]);     [color=#CC6600]delay[/color](50);   }   [color=#CC6600]void[/color] [color=#CC6600][b]loop[/b][/color](){        [color=#CC6600]if[/color]([color=#CC6600]digitalRead[/color](pirPin1) == [color=#006699]HIGH[/color]){        [color=#CC6600]digitalWrite[/color](ledPin, [color=#006699]HIGH[/color]); [color=#7E7E7E]//загорание led при сработке pir[/color]        [color=#CC6600]if[/color](lockLow){          [color=#7E7E7E]//makes sure we wait for a transition to LOW before any further output is made:[/color]          lockLow = [color=#CC6600]false[/color];          [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#006699]"---"[/color]);          [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"motion sensor 1 "[/color]);          [color=#CC6600]delay[/color](500);          [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"done sensor 1 "[/color]);          }                 }         [color=#CC6600]if[/color]([color=#CC6600]digitalRead[/color](pirPin2) == [color=#006699]HIGH[/color]){        [color=#CC6600]digitalWrite[/color](ledPin, [color=#006699]HIGH[/color]); [color=#7E7E7E]//включаем led[/color]        [color=#CC6600]if[/color](lockLow){          [color=#7E7E7E]//ждем окончания срабатывания датчика[/color]          lockLow = [color=#CC6600]false[/color];          [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#006699]"---"[/color]);          [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"motion detectesensor 2 "[/color]);          [color=#CC6600]delay[/color](500);          [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"done sensor 2 "[/color]);          }                         }       takeLowTime = [color=#CC6600]true[/color];                [color=#CC6600]if[/color](takeLowTime){         lowIn = [color=#CC6600]millis[/color](); [color=#7E7E7E]//сэкономить время перехода от высокого уровня к низкому[/color]         takeLowTime = [color=#CC6600]false[/color];         }                  [color=#7E7E7E]// если датчик низкий в течение более данного времени,[/color]         [color=#7E7E7E]// то мы предполагаем, что больше движение не произойдет[/color]        [color=#CC6600]if[/color](!lockLow && [color=#CC6600]millis[/color]() - lowIn > pause){            [color=#7E7E7E]//этот блок должен быть выполнен только раз [/color]            [color=#7E7E7E]//после обнаружения сработки по движнию[/color]            lockLow = [color=#CC6600]true[/color];            [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"motion ended at "[/color]); [color=#7E7E7E]//output[/color]            [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color](([color=#CC6600]millis[/color]() - pause)/1000);            [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#006699]" sec"[/color]);            [color=#CC6600]delay[/color](50);            }                    }

Мне не нужно чтобы вы написали за меня программу. Просто укажите на ошибку. У меня уже мозги на бекрень и ничего не соображаю.

Спасибо за помощь!