Датчик препятствий и серво(бесполезная коробка)

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Гриша пишет:

Вы не правы ИМХО! Там почти энциклопедическое представление со скудными примерами...

объясню:  if (тумблер == 0 &&  серва померла) ... про 2 условия там не слова, а это важно ИМХО

ну так сходи и почитай про задание условий. там же рядом . и не нужно пложить сучностей

karl2233
Offline
Зарегистрирован: 05.07.2015

Гриша пишет:

Там почти энциклопедическое представление со скудными примерами...

объясню:  if (тумблер == 0 &&  серва померла) ... про 2 условия там не слова, а это важно ИМХО

да-да! именно так!

кстати, приветствую!

з.ы. обращаюсь ко всем - давайте на "ты"? а то чую что мне придётся вам поляну за помощь накрывать =)

 

Гриша
Offline
Зарегистрирован: 27.04.2014

Puhlyaviy пишет:

While будет вычислять в цикле непрерывно и бесконечно до тех пор, пока выражение в круглых скобках, () не станет равно логическому ЛОЖНО. Что-то должно изменять значение проверяемой переменной, иначе выход из цикла whileникогда не будет достигнут. Это изменение может происходить как в программном коде, например, при увеличении переменной, так и во внешних условиях, например, при тестировании датчика.

Гуру, без нормального учителя очень тажко дается, это как по алфовиту учится читать не выучив весь алфовит и при этом мало у кого можно спросить помощи, да еще если не можшь сформулировать сам вопрос...

Гриша
Offline
Зарегистрирован: 27.04.2014

Puhlyaviy пишет:

ну так сходи и почитай про задание условий. там же рядом . и не нужно пложить сучностей

для этого я должен догадаться, что такое вообще возможно т.е. систематизировать полученные знания...

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Гриша пишет:

Гуру, без нормального учителя очень тажко дается, это как по алфовиту учится читать не выучив весь алфовит и при этом мало у кого можно спросить помощи, да еще если не можшь сформулировать сам вопрос...

слушай, раньше вообще учились по паре листиков. где был список команд и пара слов описания.. ибо не инета, ни книг, ни учителей толком не было..  и хорошо если были эти пара листиков со списком.. а то иначе вообще методом научного втыка...

а тут все нормально расписано и даже примеры есть..

но ты конечно можешь дальше верить то что тебе расказывают и изычкано тупят от собственной лени.. я подожду пару лет в сторонке.. а вот когда в тебе угаснет энтузазизм , вот тут я и напомню

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

просто на английском это читается очень просто и доходчиво:

делай{баьбьа}

пока (х меньше 100)

 

вот и вся магия

Гриша
Offline
Зарегистрирован: 27.04.2014

Puhlyaviy пишет:

Гриша пишет:

Гуру, без нормального учителя очень тажко дается, это как по алфовиту учится читать не выучив весь алфовит и при этом мало у кого можно спросить помощи, да еще если не можшь сформулировать сам вопрос...

слушай, раньше вообще учились по паре листиков. где был список команд и пара слов описания.. ибо не инета, ни книг, ни учителей толком не было..  и хорошо если были эти пара листиков со списком.. а то иначе вообще методом научного втыка...

а тут все нормально расписано и даже примеры есть..

но ты конечно можешь дальше верить то что тебе расказывают и изычкано тупят от собственной лени.. я подожду пару лет в сторонке.. а вот когда в тебе угаснет энтузазизм , вот тут я и напомню

а вот тут, кому что дано, я в програмировании почти дерево, да и с математикой у меня слабовато... вот и получается - что это не мое, ну а я и непрыгаю выше головы... пишу как могу, на том и учусь.

Я знаю только то, что ничего не знаю, но другие не знают и этого.. Сократ

karl2233
Offline
Зарегистрирован: 05.07.2015

JollyBiber пишет:

просто на английском это читается очень просто и доходчиво:

делай{баьбьа}

пока (х меньше 100)

 

вот и вся магия

это понятно. не понятно про "х" - что это за неизветсное такое? 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

karl2233 пишет:

это понятно. не понятно про "х" - что это за неизветсное такое? 

я ж говорю издевается

 x = readSensors(); // проверить датчики

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Гриша пишет:

а вот тут, кому что дано, я в програмировании почти дерево, да и с математикой у меня слабовато... вот и получается - что это не мое, ну а я и непрыгаю выше головы... пишу как могу, на том и учусь.

работает? вот и прекрасно.. а как оно там написано. быдло кодом или нотной грамотой. то вообще пофигу.. не на выставку этот код нести и не в музей...

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

karl2233 пишет:

Гриша пишет:

karl2233 пишет:

з.з.ы. теперь попробую переписать всю программу, выкинув то, что мне не понятно или заменив на понятные мне команды.

если не трудно, код (этот) покажите :) полностью

чё, попкорн где-то бесплатно раздавали? ))))

выложу, мне не жалко

ёрничаете ? ваш код нужен здесь для ответов на ваши вопросы !
кому-то ваш код и пригодится..... но не тем кто вам отвечает-помогает :)

karl2233
Offline
Зарегистрирован: 05.07.2015

Puhlyaviy пишет:

слушай, раньше вообще учились по паре листиков. где был список команд и пара слов описания.. ибо не инета, ни книг, ни учителей толком не было..  и хорошо если были эти пара листиков со списком.. а то иначе вообще методом научного втыка...

а тут все нормально расписано и даже примеры есть..

1. не у всех мозг заточен под программирование. это особенности, свойственные каждому индивидууму. я из таких, потому и туплю нещадно, но [s]упорото[/s] упорно лезу дальше ))) ибо интересно.

2. именно поэтому(п.1), один по листику чёто поймёт, второй с талмудом хрен разберётся. тут я по серединке )))

3. примеры есть, но они вырваны из контекста, поэтому не понятны или понятны не до конца.

з.ы. касательно п.1-2 - когда в школе учился, одному легко давалась литература, второму физика, третьему химия. а четвёртый был чемпионом города по боксу, пятый шпрехал нефигово, но на уроках труда чуть не отпилил себе руку забивая гвоздь.

karl2233
Offline
Зарегистрирован: 05.07.2015

SU-27-16 пишет:

ёрничаете ? ваш код нужен здесь для ответов на ваши вопросы !

кому-то ваш код и пригодится..... но не тем кто вам отвечает-помогает :)

не ёрничаю, прикалываюсь. какое ёрничание в моём положении и при моих знаниях предмета, может быть?

тут скорее вся тема будет полезна очередному новичку.

а я, когда стану Великим Кукурузо, попрошу админов частично потереть эту тему))))

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

karl2233 пишет:

з.ы. касательно п.1-2 - когда в школе учился, одному легко давалась литература, второму физика, третьему химия. а четвёртый был чемпионом города по боксу, пятый шпрехал нефигово, но на уроках труда чуть не отпилил себе руку забивая гвоздь.

так и тут.

тут не так.. тут это не там...

каждый человек может всё! без исключений!

и тут старожили могут и паяльником потыкать и код написать. и с баяном по вагонам пробежаться, весело напевая матерные частушки.. все дело в личной мотивации...

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Если Вам интересно - то "прорветесь". Тупо зазубрите команды. Попробуйте рисовать алгоритмы на бумажке.

Гриша
Offline
Зарегистрирован: 27.04.2014

karl2233 пишет:

SU-27-16 пишет:

ёрничаете ? ваш код нужен здесь для ответов на ваши вопросы !

кому-то ваш код и пригодится..... но не тем кто вам отвечает-помогает :)

не ёрничаю, прикалываюсь. какое ёрничание в моём положении и при моих знаниях предмета, может быть?

тут скорее вся тема будет полезна очередному новичку.

а я, когда стану Великим Кукурузо, попрошу админов частично потереть эту тему))))

писался вагон подобных тем.... они ее не читают - лень (время экономят задавая глупые вопросы на 10 форумах)

karl2233
Offline
Зарегистрирован: 05.07.2015

Puhlyaviy пишет:

karl2233 пишет:

это понятно. не понятно про "х" - что это за неизветсное такое? 

я ж говорю издевается

 x = readSensors(); // проверить датчики

нет, скорее невнимательность.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

jeka_tm пишет:

я вот эту книгу читал, не все правда

http://www.lib.ru/CTOTOR/starterkit.txt

зато классно и соответствует названию :)

karl2233
Offline
Зарегистрирован: 05.07.2015

JollyBiber пишет:

Если Вам интересно - то "прорветесь". Тупо зазубрите команды. Попробуйте рисовать алгоритмы на бумажке.

да алгоритм я в голове ясно предстваляю. когда пытаюсь решить свою задачу, лезу в раздел "программирование" и смотрю подходящие команды. "вгружаю" и смотрю что получилось.

а так-то да, вначале алгоритм, потом всё остальное.

karl2233
Offline
Зарегистрирован: 05.07.2015

Гриша пишет:

писался вагон подобных тем.... они ее не читают - лень (время экономят задавая глупые вопросы на 10 форумах)

дело в том, что многие темы названы "памагителюдидобрые", на третей ветке я задолбался читать пикировки.

я же назвал тему конкретно, всякий кто будет иметь проблему с "сервой и датчиком препятсвия" поймёт что тут айс )))

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

karl2233 пишет:

Гриша пишет:

Там почти энциклопедическое представление со скудными примерами...

объясню:  if (тумблер == 0 &&  серва померла) ... про 2 условия там не слова, а это важно ИМХО

да-да! именно так!

кстати, приветствую!

з.ы. обращаюсь ко всем - давайте на "ты"? а то чую что мне придётся вам поляну за помощь накрывать =)

 

http://arduino.ru/forum/otvlechennye-temy/kto-otkuda
средств хватит ?
:)

karl2233
Offline
Зарегистрирован: 05.07.2015

jeka_tm пишет:

я вот эту книгу читал, не все правда

http://www.lib.ru/CTOTOR/starterkit.txt

спасибо, бум [s]читать[/s] изучать

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

SU-27-16 пишет:

средств хватит ?
:)

вот тебе лиж бы побухать на халяву... :) организуешь доставку всех на природу и все.. че тебе долго чели немного там в расписании помухлевать..

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

посмотри http://arduino.ru/forum/programmirovanie/pomogite-s-kodom-2
не хвастаюсь , сам быдлокоды пишу....
НО общение идёт ВААЩЕ в другом форм-факторе...
вопрос-ответ... если время есть :)
лишние тексты - зачем ?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

SU-27-16 пишет:

посмотри http://arduino.ru/forum/programmirovanie/pomogite-s-kodom-2
не хвастаюсь , сам быдлокоды пишу....
НО общение идёт ВААЩЕ в другом форм-факторе...
вопрос-ответ... если время есть :)
лишние тексты - зачем ?

 хочешь сугубо по теме общаться? вон бери мобилку и в него ОК ГУГЛ! ваще ни шага в сторону..

к чему ты это? не хочешь общаться, ну так не общайся. строй из себя этакого робота Вертера. тут таких тоже хватает... типа спросили как лучше болт забить.. ответил МОЛОТКОМ и все можно дальше молчать.

мне лично, я вообще не знаю что тут можно спросить что бы кто то знал ответ хотя бы рядом... доктор кодит для вских тама сименсов и ауди... ты думаешь кто то тут с форума может ему что то подсказать?

если появляеться нормальный человек, который действительно хочеть учиться. ну так пнем в нужную сторону.. а  халявщики идут мимо

karl2233
Offline
Зарегистрирован: 05.07.2015

SU-27-16 пишет:

karl2233 пишет:

з.ы. обращаюсь ко всем - давайте на "ты"? а то чую что мне придётся вам поляну за помощь накрывать =)

http://arduino.ru/forum/otvlechennye-temy/kto-otkuda
средств хватит ?
:)

ну... до Нюрнберга я не доеду, эт факт / а так - потребительский кредит :)

Puhlyaviy пишет:

SU-27-16 пишет:

средств хватит ?
:)

вот тебе лиж бы побухать на халяву... :) организуешь доставку всех на природу и все.. че тебе долго чели немного там в расписании помухлевать..

:) а ведь это идея! собраться на природе.

мож отдельную темку замутить?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Puhlyaviy пишет:

SU-27-16 пишет:

средств хватит ?
:)

вот тебе лиж бы побухать на халяву... :) организуешь доставку всех на природу и все.. че тебе долго чели немного там в расписании помухлевать..

неееее, мине низя..... так.... , размеры поляны определил-зарезервировал память....
расписание и чартеры мине не подвластны....
зато - ТУ22, ТУ95, СУ24, СУ27, А50 - будут там где ИМ нано....
...а не какие-то там F16, F22 :)-

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Puhlyaviy пишет:

SU-27-16 пишет:

посмотри http://arduino.ru/forum/programmirovanie/pomogite-s-kodom-2
не хвастаюсь , сам быдлокоды пишу....
НО общение идёт ВААЩЕ в другом форм-факторе...
вопрос-ответ... если время есть :)
лишние тексты - зачем ?

 хочешь сугубо по теме общаться? вон бери мобилку и в него ОК ГУГЛ! ваще ни шага в сторону..

к чему ты это? не хочешь общаться, ну так не общайся. строй из себя этакого робота Вертера. тут таких тоже хватает... типа спросили как лучше болт забить.. ответил МОЛОТКОМ и все можно дальше молчать.

мне лично, я вообще не знаю что тут можно спросить что бы кто то знал ответ хотя бы рядом... доктор кодит для вских тама сименсов и ауди... ты думаешь кто то тут с форума может ему что то подсказать?

если появляеться нормальный человек, который действительно хочеть учиться. ну так пнем в нужную сторону.. а  халявщики идут мимо

аха ! ещё не хватало бы чтобы Дохтур тут вопросы задавал !!!!!!!!!!!!!!!
если появляеться нормальный человек, который действительно хочеть учиться. ну так пнем в нужную сторону.. а  халявщики идут мимо
"ну , дык , а я за что её держал ?!!!!!!!!!!!!!!!!!"

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

ладно, вы тут дальше без меня.

а то больничный больничным.. а уже 4 утра на часах.. 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Puhlyaviy пишет:

ладно, вы тут дальше без меня.

а то больничный больничным.. а уже 4 утра на часах.. 

дык , скучно без вас !
....был вопрос к вам - разница вашего местного времени с UTC ?
игнор или не увидел ?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Не верю! написал что 4 утра у него, дык как же посчитать сколько разница с твоим временем?!?!?!?! :D

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

рекурсия , однако.....
моя не верит времени отправки сообщения....
просчитать мона , тока зачем ? в Непале часовые пояса кратны 15 минут...
мине им верить ? или иметь фактическое 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

JollyBiber пишет:

Не верю! написал что 4 утра у него, дык как же посчитать сколько разница с твоим временем?!?!?!?! :D

....ты прав :) всё мона рассчитать !
...кроме .......

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

JollyBiber пишет:

Не верю! написал что 4 утра у него, дык как же посчитать сколько разница с твоим временем?!?!?!?! :D

у нас секунды важны...
проехали... :)

karl2233
Offline
Зарегистрирован: 05.07.2015

не хочу показаться настырным, но может уделите мне минутку? =)

я про цикл - что неправильно я натворил (сообщение №81)?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

КТО ЗДЕСЬ?!?!?!!

:)

Вам в собщении 82 вроде на оба вопроса ответили?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Вам в собщении 82 вроде на оба вопроса ответили?
...ОТВЕТИЛИ !!!!!!!!!

karl2233
Offline
Зарегистрирован: 05.07.2015

JollyBiber пишет:

КТО ЗДЕСЬ?!?!?!!

:)

Вам в собщении 82 вроде на оба вопроса ответили?

так они уже объявлены у меня (строка 8):

byte Sensor = 5; // сенсор на  5-ый вывод
byte ServoPin = 3; // серво на  3-ый вывод
byte ButtonPin = 2; // Пин к которому подключен тумблер
int ServoMinPos = 40; // И.П. рычага
int ServoMaxPos = 170; // Положение, в котором рычаг отключает тумблер
byte irLed = 6;  //ик-светодиод  
byte Led = 13;   //осветодиод(L) на плате 
byte i;     // счётчик 1
byte x; // счетчик 2
byte num=20; //число периодов несущей 38кГц в посылаемом пакете 
byte impulse = 11;  // длительность полупериода 
byte val, old_val;   //переменная для хранения сигнала с ИК приемника 

но это используется при формировании несущей 38кГц. поэтому добавил строку 9.

или программе всё равно? 

получается что я не там втыкаю "for"

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

если изменяется локальный участок кода ( о чём все знают ) - то так можно
без всего кода - как понять чё ты там задумал про byte x; // счетчик 2

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
JollyBiber пишет:

 

просто на английском это читается очень просто и доходчиво:

делай{баьбьа}

пока (х меньше 100)

 

вот и вся магия

 

 

это понятно. не понятно про "х" - что это за неизветсное такое? 

.....опять такое получится :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

или программе всё равно? 
если компилятор схавал твой код - то программе всё равно что ты там понаписал....
...будет делать своё дело не зависимо от твоих задумок , тока выполнять твои инструкции-операторы

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

JollyBiber пишет:

Не верю! написал что 4 утра у него, дык как же посчитать сколько разница с твоим временем?!?!?!?! :D

Территория Непала располагается в часовом поясе под названием Непальское время (NPT) (UTC+5:45), и это один из двух официальных часовых поясов без часа или получаса от времени UTC.
....
раньше было - часовой пояс был кратен 15 минут 

дык как же посчитать сколько разница с твоим временем?!?!?!?! :D
только через синус, косинус :)-
...барометр не катит :(

широта и долгота - вот это катит ( но не катет )

karl2233
Offline
Зарегистрирован: 05.07.2015

куда это грёбаный for воткнуть?

  
    // Быстрый выход рычага до тумблера, задержка у тумблера (без выключения)
  // Медленный уход под крышку; быстрый выход до тумблера при сигнеле от ИК и опять возврат под крышку( 2 раза)
  // На третий раз выключение тумблера и быстрый возврат
  if (BoX == 1) 
  {
    // Тумблер Включен
    if (ButtonState == 1 && !ON)
    {
      delaybeforeoff = currentMillis;
      ON = true;
      godown = false;
      ServoSpeed = 1;
      offdelay = 100;
      MoveStep = 0;
    }

    // Задержка до начала движения
    if (ON && currentMillis - delaybeforeoff > offdelay)
    {
      goup = true;
    }
        
      // Шаг 0 - Выход рычага до тумблера
     if(currentMillis - previousMillis > ServoSpeed && pos1 < ServoMaxPos - 22 && goup && MoveStep == 0)
        {
        previousMillis = currentMillis;
        pos1 ++;
        servo1.write(pos1);
        // Изменение номера шага и скорости
        if (pos1 == ServoMaxPos - 22)
        {
          MoveStep ++;
          ServoSpeed = 20;
        }
      }
  
      // Шаг 1 - Задержка у рычага у тумблера
      if(currentMillis - previousMillis > 2000 && goup && MoveStep == 1)
      {
        previousMillis = currentMillis;
        MoveStep ++;
        ServoSpeed = 20;
      }
    // Шаг 2 - Медленный уход рычага под крышку
    if(currentMillis - previousMillis > ServoSpeed && pos1 > ServoMinPos && goup && MoveStep == 2)
    {
      previousMillis = currentMillis;
      pos1 --;
      servo1.write(pos1);
      // Изменение номера шага и скорости
      if (pos1 == ServoMaxPos - 85)
      {
        MoveStep ++;
        ServoSpeed = 1;
      }
    }
    // Шаг 3 - Слежение
    if(currentMillis - previousMillis > ServoSpeed && pos1 > ServoMinPos && goup && MoveStep == 3)
     { 
         val=digitalRead(Sensor);//Прочитать показания датчика 
         delay(20); //пауза между пакетами.
         old_val=val;
         if (val==old_val)     //сравнить показания с предидущей посылкой 
          { 
            digitalWrite(Led,(val==LOW) ? HIGH:LOW); //если сигнал низкий то зажигаем светодиод 
            if (val==LOW) // если помеха есть   
              {
                delay(100); //время свечения светодиода (L) при срабатывании 
                for(i=0; i<3; i++)
                {
                  MoveStep = 0;
                  ServoSpeed = 1;
                }
              }
          }
        
        
      }
      // Шаг 4 - выключение тумблера 
        

просто идёт цикл, несмотря на функцию "for". но как только ставлю в строке 71 MoveStep ++; программа идёт на шаг 4.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

попробуй сделать всё так - как ты предписываешь МК ( будет оооооочень медленно , но понятно ) в голове !!!!!
...анализ

при размещениии кода длинного - жми "галочку" СВЕРНУТЬ КОД !

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ШАГИ - лучше прописать функциями-подпрограммами

типа - http://alxarduino.blogspot.ru/2013/09/BlinkAndPrintWithoutDelay.html

karl2233
Offline
Зарегистрирован: 05.07.2015

код свернул, по ссылке читаю.

спасибо.

так я и сделал так, кк представлял алгоритм. и for воткнул туда, куда нужно.

вроде бы нужно )))

однако нет :/

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

весь код разместить - не повредит...
НО это не обязывает миня ни к чему :)
....я такой же как ты :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

и for воткнул туда, куда нужно.
это ТЫ так думаешь !
не поехало ? не туды воткнул.... 
думай , голова....

или  как представлял алгоритм. и for воткнул туда, куда нужно. 
...алгоритм в п..... , и фор - тудаже , скорее всего

karl2233
Offline
Зарегистрирован: 05.07.2015

SU-27-16 пишет:

и for воткнул туда, куда нужно.
это ТЫ так думаешь !
не поехало ? не туды воткнул.... 
думай , голова....

или  как представлял алгоритм. и for воткнул туда, куда нужно. 
...алгоритм в п..... , и фор - тудаже , скорее всего

да не, алгоритм путёвый - работает же всё, кроме цикла и выхода из него. скорее дело в синтаксисе, т.е. безграмотности в С++.

а так-то  да ))))

код, весь, вот:

#include <Servo.h> // Библиотека для серво
//----------------- Настройки --------------
byte Sensor = 5; // сенсор на  5-ый вывод
byte ServoPin = 3; // серво на  3-ый вывод
byte ButtonPin = 2; // Пин к которому подключен тумблер
int ServoMinPos = 40; // И.П. рычага
int ServoMaxPos = 170; // Положение, в котором рычаг отключает тумблер
byte irLed = 6;  //ик-светодиод  
byte Led = 13;   //осветодиод(L) на плате 
byte i;     // счётчик 1
byte x; // счетчик 2
byte num=20; //число периодов несущей 38кГц в посылаемом пакете 
byte impulse = 11;  // длительность полупериода 
byte val, old_val;   //переменная для хранения сигнала с ИК приемника 

// Режим работы BoX
int BoXmode = 2; // 1=случайно, 2=по порядку
// Число движений, по умолчанию 14
int MoveNum = 1; // По умолчанию 14

// Настройка движения Shake
int shakeMinPos = 70; // Нижнее положение рычага в движении Shake (крышка закрыта, рычаг прямо под крышкой, но не касается её)
int shakeMaxPos = 80; // Верхнее положение рычага в движении Shake (крышка поднята на 3 - 5 мм)
int shakeNum = 10; // Число ударов крышкой в движении Shake
int shakeSpeed = 70; // Скорость задержки между движениями рычага в движении Shake

//------------------Установки---------------
Servo servo1; // Имя серво
int ServoSpeed = 1; // скорость движения серво
int pos1 = ServoMinPos; // Угол начальной установки серво
int BoX = 0; // Номер движения
int BoXtemp = 0;
int ButtonState = 0; // Статус тумблера 1 = Вкл., 0 = Выкл.
int offdelay = 200; // Задержка до начала движения, разная в каждом движении.
int MoveStep = 0; // Для учета числа шагов в движении

long previousMillis; // Для таймера движений
long delaybeforeoff; // Для таймера задержки до начала движения

boolean goup = false; // Маркер подъема рычага
boolean godown = false; // Маркер опускания рычага
boolean ON = false; // Маркер включения тумблера

// Переменные для движения Shake
int shakeMoveNum;
long previousShakeMillis; // Для таймера движения Shake
int shakeNumTemp;

void setup ()
{
  Serial.begin(9600);
  servo1.write(ServoMinPos); // Установка серво в И.П.
  servo1.attach(ServoPin); // Подключение серво к 3 
  pinMode(ButtonPin, INPUT); // Подключеие тумблера к 2
  pinMode (Sensor, INPUT); // Подключение сенсора к 5
  pinMode (irLed, OUTPUT); // ИК-светодиод к 6
  pinMode(Led, OUTPUT);   //разъём 13 на вывод 
 }

//---------------Сама программа------------------
void loop()
{
  unsigned long currentMillis = millis();
  ButtonState = digitalRead(ButtonPin); // Считывает статус тумблера 1 = вкл., 0 = выкл.
  if (ButtonState == 1 && !ON)
  {
    if (BoX == 0 && BoXmode == 1) // Случайный выбор движения
    {
      BoX = random(1, MoveNum + 1);
    }
    if (BoX == 0 && BoXmode == 2) // Выбор движения по порядку
    {
        BoX = BoXtemp + 1;
        if (BoX == MoveNum)
       {
          BoXtemp = 0;
       }
        else 
       {
          BoXtemp = BoX;
       }
    
    }
  }
 for(i=0; i<num; i++) //цикл несущей 
  { 
    digitalWrite(irLed, HIGH); //зажигаем ик-диод 
    delayMicroseconds(impulse); //положительный полупериод 
    digitalWrite(irLed, LOW); //гасим ик-диод 
    delayMicroseconds(impulse-1); //выравниваем скважность 
  }        
   // Далее идут все движения рычага для выключения тумблера
 
  
  //--------------------- Движение 5 ------------------------
  // Быстрый выход рычага до тумблера, задержка у тумблера (без выключения)
  // Медленный уход под крышку, быстрый выход, отключение тумблера и быстрый возврат
  if (BoX == 1)
  {
    // Тумблер Включен
    if (ButtonState == 1 && !ON)
    {
      delaybeforeoff = currentMillis;
      ON = true;
      godown = false;
      ServoSpeed = 1;
      offdelay = 100;
      MoveStep = 0;
    }

    // Задержка до начала движения
    if (ON && currentMillis - delaybeforeoff > offdelay)
    {
      goup = true;
    }
        
      // Шаг 0 - Выход рычага до тумблера
     if(currentMillis - previousMillis > ServoSpeed && pos1 < ServoMaxPos - 22 && goup && MoveStep == 0)
        {
        previousMillis = currentMillis;
        pos1 ++;
        servo1.write(pos1);
        // Изменение номера шага и скорости
        if (pos1 == ServoMaxPos - 22)
        {
          MoveStep ++;
          ServoSpeed = 20;
        }
      }
  
      // Шаг 1 - Задержка у рычага у тумблера
      if(currentMillis - previousMillis > 2000 && goup && MoveStep == 1)
      {
        previousMillis = currentMillis;
        MoveStep ++;
        ServoSpeed = 20;
      }
    // Шаг 2 - Медленный уход рычага под крышку
    if(currentMillis - previousMillis > ServoSpeed && pos1 > ServoMinPos && goup && MoveStep == 2)
    {
      previousMillis = currentMillis;
      pos1 --;
      servo1.write(pos1);
      // Изменение номера шага и скорости
      if (pos1 == ServoMaxPos - 85)
      {
        MoveStep ++;
        ServoSpeed = 1;
      }
    }
    // Шаг 3 - Слежение
    if(currentMillis - previousMillis > ServoSpeed && pos1 > ServoMinPos && goup && MoveStep == 3)
     { 
         val=digitalRead(Sensor);//Прочитать показания датчика 
         delay(20); //пауза между пакетами.
         old_val=val;
         if (val==old_val)     //сравнить показания с предидущей посылкой 
          { 
            digitalWrite(Led,(val==LOW) ? HIGH:LOW); //если сигнал низкий то зажигаем светодиод 
            if (val==LOW) // если помеха есть   
              {
                delay(100); //время свечения светодиода (L) при срабатывании 
                MoveStep ++;
                ServoSpeed = 1;
              }
          }        
      }
      // Шаг 4 
       for(i=0; i<3; i++ && MoveStep == 4)
      {
        MoveStep = 0;
        ServoSpeed = 1;
      }
               
   
     // Шаг 5 - Быстрое выключение тумблера
    if(currentMillis - previousMillis > ServoSpeed && pos1 < ServoMaxPos && goup && MoveStep == 5)
    {
      previousMillis = currentMillis;
      pos1 ++;
      servo1.write(pos1);
    }

    // Тумблер Выключен
    if (ButtonState == 0 && goup)
    {
      goup = false;
      godown = true;
      ServoSpeed = 1;
      ON = false;
    }

    // Возвращение рычага в И.П.
    if(currentMillis - previousMillis > ServoSpeed && pos1 > ServoMinPos && godown)
    {
      previousMillis = currentMillis;
      pos1 --;
      servo1.write(pos1);
      // Завершение движения
      if (godown && servo1.read() == ServoMinPos)
      {
        BoX = 0;
      }
    }
    
      
  } 
  //--------------------- Конец Движения 5 ------------------------
 
}  // Конец Loop

щас останавливается на шаге 1 и никуда не идёт.

если в строке 163 поменять значение "++" на "= 0" то просто по кругу шаги с 0 по 3 включительно.

а на шаг 5 (куда ващето надо) не идёт. 

Гриша
Offline
Зарегистрирован: 27.04.2014

не понял строки 1, 3 , 4 :

val=digitalRead(Sensor);//Прочитать показания датчика 
         delay(20); //пауза между пакетами.
         old_val=val;
         if (val==old_val)     //сравнить показания с предидущей посылкой 
          { 
            digitalWrite(Led,(val==LOW) ? HIGH:LOW); //если сигнал низкий то зажигаем светодиод 
            if (val==LOW) // если помеха есть   
              {
                delay(100); //время свечения светодиода (L) при срабатывании 
                MoveStep ++;
                ServoSpeed = 1;
              }
          }        

в строке 3 - опечатка????