подскажите по функции
- Войдите на сайт для отправки комментариев
Пт, 29/01/2016 - 20:39
создал функцию, но при задании разных параметров - выдает только первый результат везде, где я ошибся?
bool x = 0; bool y = 0; void setup() { Serial.begin(9600); } void loop() { x = smartdelay(1000); //нормально y = smartdelay(2000); // выдает первый Serial.print("Timer1 "); Serial.print(x); Serial.print(" Timer2 "); Serial.println(y); } bool smartdelay (uint32_t interval) { static uint32_t previousMillis = millis(); static bool sw; switch (sw) { case 0: if (millis() - previousMillis >= interval) { previousMillis = millis(); sw = 1; } break; case 1: if (millis() - previousMillis >= interval) { previousMillis = millis(); sw = 0; } break; } return sw; }
А чего Вы хотели добиться?
Собственно, набор вопросов стандартный:
1. Что хотели сделать?
2. Что в результате получилось?
3. Чем первое отличается от второго?
PS. Любая программа работает в точности так, как ее написал программист, но далеко не всегда так, как он хотел написать.
у меня 8 таких извращений в скетче, хочу сделать функцию с разным интервалом
собственно вопрос, почему не создается вторая временная функция с другими параметрами?
У вас в функции sw всегда равно 0 и
millis() - previousMillis не может быть больше чем время зав которое выполнится код в строках 18..21, потомук что вы присваиваете его в 17 строке.
Вам нужно понять что такое "Область видимости" и что переменные sw и previousMillis - не существуют вне фунции.
В текущем варианте функция всегда вернет 0 потому что интервал выполнения строк 18...21 очень мал.
залейте и увидите проблему, специально сделал тест
а локально - это "static" :)
Напишите подробно что у вас за интервалы и как они используются. Тоесть по русски порядок выполнения программы, а то в код у вас каша попала с мухами и котлетами ...
А Вам залить трудно? тот 1 скетч, и воочию увидеть? он создан для видения проблемы
Напишите подробно что у вас за интервалы и как они используются. Тоесть по русски порядок выполнения программы, а то в код у вас каша попала с мухами и котлетами ...
Вот как раз тут мухи отдельно - котлеты отдельно %(
Або как передаваемый в функцию параметр вообще-то нигде не используется и никому нах не нужен.
А вот переменная sw сама себе рулит.....
В общем прежде чем писАть код нужно наРИСОВАТЬ алгоритм - пусть просто на русском языке....
Нейрон - это не тебе а автору вопроса ;)
Куда залить, что залить. Если тот код(из первого поста) в микроконтролллер - то не смешите - там у вас ерунда написана, и как она работать должна я написал.
это написанно чтобы было видно, а вот нормальная
Куда залить, что залить. Если тот код(из первого поста) в микроконтролллер - то не смешите - там у вас ерунда написана, и как она работать должна я написал.
укажите на смешно
сделали хотя бы так.
Смешно то, что вы локальные переменные пытаетесь использовать как глобальные и естественно не работает.
P.S. вы просто не правильно понимаете работу кода - в голове он у вас работает, а на практике нет. Отсюда и все прблемы.
это написанно чтобы было видно, а вот нормальная
Валера 1970 - есть хорошая сказка про пастушка и волков.
Когда пастушек на третий раз встретил волков - никто не побежал.....
еще раз, так работает только при одном вызове функции, а при втором делает то что и при первом, а "static" заменяет вашу глобаьную переменную :)
это написанно чтобы было видно, а вот нормальная
У вас в коде sw будет равно 1, только один цикл программы, все остальное время будет sw = 0. в сериал принт ты единичку даже можешь и не заметить. если хочешь, поставь delay(1000); } после 21 строки и посмотри что у тебя получается
еще раз, так работает только при одном вызове функции, а при втором делает то что и при первом, а "static" заменяет вашу глобаьную переменную :)
Если ты знаешь лучше других зачем спрашивать?
это написанно чтобы было видно, а вот нормальная
У вас в коде sw будет равно 1, только один цикл программы, все остальное время будет sw = 0. в сериал принт ты единичку даже можешь и не заметить. если хочешь, поставь delay(1000); } после 21 строки и посмотри что у тебя получается
я в курсе, поэтому и создал самый первый скетч :)
еще раз, так работает только при одном вызове функции, а при втором делает то что и при первом, а "static" заменяет вашу глобаьную переменную :)
Если ты знаешь лучше других зачем спрашивать?
вот и спрашиваю, почему не создается вторая временная функция с другими параметрами!!!!!!!
еще раз, так работает только при одном вызове функции, а при втором делает то что и при первом, а "static" заменяет вашу глобаьную переменную :)
Если ты знаешь лучше других зачем спрашивать?
не пашет, вот и спрашиваю, я всего полгода занимаюсь этой херней, может кто-то направит на нужный путь :)
Хмм , частный вопрос, ( конечно это не относится к тем крутым парням, которые сидят в этом баре) , а зачем переменная sw ? В функции же может быть несколько return.
Хмм , частный вопрос, ( конечно это не относится к тем крутым парням, которые сидят в этом баре) , а зачем переменная sw ? В функции же может быть несколько return.
ну и как возвртить значени 2 , 3 или 8 функциие?
В нужном месте return 2;
В другом - return 8...
И все это внутри одной функции.
типа 21 строка - return 1;
23 - return 2;
В нужном месте return 2;
В другом - return 8...
И все это внутри одной функции.
не пойдет, я не хочу вылавливать другие значения :)
Тогда запостите алгоритм того, что желаете.
Тогда запостите алгоритм того, что желаете.
а есть варианты решения без костылей?
не пашет, вот и спрашиваю, я всего полгода занимаюсь этой херней, может кто-то направит на нужный путь :)
Во первых - если это херня то нафиг вообще занимаешься?
Во вторых - если хочешь получить результат - то РАЗБИРАЙСЯ! Или плати тем кто разбирается.
Я например три вечера - после работы сидел не мог понять почему у меня функция не работает.
Пришлось в скетче написать туеву хучу серал-принтов на точках, включить монитор и смотреть данные с контрольных точек. Потом просто сделал бэкап скетча, стер все что непонятно и сел писАть по новой.
В результате сегодня закрыл очередной проект (не денежный - мне з/п платят, а это для души %)
А на обозрение вынес уже РЕЗУЛЬТАТ - на критику кода.....
Не знаешь как поставить контрольные точки? Гугль подскажет, не поможет - закажи проект спецам.
не пашет, вот и спрашиваю, я всего полгода занимаюсь этой херней, может кто-то направит на нужный путь :)
Во первых - если это херня то нафиг вообще занимаешься?
Во вторых - если хочешь получить результат - то РАЗБИРАЙСЯ! Или плати тем кто разбирается.
Я например три вечера - после работы сидел не мог понять почему у меня функция не работает.
Пришлось в скетче написать туеву хучу серал-принтов на точках, включить монитор и смотреть данные с контрольных точек. Потом просто сделал бэкап скетча, стер все что непонятно и сел писАть по новой.
В результате сегодня закрыл очередной проект (не денежный - мне з/п платят, а это для души %)
А на обозрение вынес уже РЕЗУЛЬТАТ - на критику кода.....
Не знаешь как поставить контрольные точки? Гугль подскажет, не поможет - закажи проект спецам.
ужо гугл погнулся , плати, - чудо Вы странное :) нет вариантов ответа, лучше не отвечайте
ужо гугл погнулся , плати, - чудо Вы странное :)
Да нет - это ты чудо странное.....
Причем совершенно не желающее УЧИТЬСЯ!
В СССР высшее образование давало не столько знания (хотя и их давало немало) сколько УМЕНИЕ учиться САМОСТОЯТЕЛЬНО!
Сейчас я например не прикрутил rfid-считку - и поставил ТМ-ключ - исключительно потому что на ТМ-ключ есть внятная библа и даташит. А на даренный рфид нет ничего - даже марки-модели.
ужо гугл погнулся , плати, - чудо Вы странное :)
Да нет - это ты чудо странное.....
Причем совершенно не желающее УЧИТЬСЯ!
В СССР высшее образование давало не столько знания (хотя и их давало немало) сколько УМЕНИЕ учиться САМОСТОЯТЕЛЬНО!
Сейчас я например не прикрутил rfid-считку - и поставил ТМ-ключ - исключительно потому что на ТМ-ключ есть внятная библа и даташит. А на даренный рфид нет ничего - даже марки-модели.
я уже давнно pn532 и atmega8a прикрутил, и ?, я не собираюсь мериться, мне нужен результат
я уже давнно pn532 и atmega8a прикрутил, и ?, я не собираюсь мериться, мне нужен результат
ну тогда вообще непонятно зачем писать сюда если результат есть?
Типа кровь разогнать дурацкими вопросами?
Тогда запостите алгоритм того, что желаете.
а есть варианты решения без костылей?
Вы о чем ?
спасибо, но я создавал функцию , чтобы избавиться от глобальных переменных:)-
http://microsin.net/programming/avr-troubleshooting-faq/tips-and-tricks-...
даже тут не рекомендуют их ...
Вполне возможно что в новых AVR-GCC отключили этот функционал для переменных.
Вобщем используйте глобальные переменные и не выпендривайтесь.
millis что возвращает? А previousMillis какой тип имеет?
Почему sw bool, если сравнение с 0 и 1? Плюс sw не проинициализирована.
Остальное в упор не понял. Вы хотите использовать одни и те же статические переменные в разных функциях? Только не надо отвечать вопросом на вопрос.
залейте себе самый первый скетч и :)
залейте себе самый первый скетч и :)
Залил, и чЁ?
Мой код корректно работает твой нет.
спасибо, но я создавал функцию , чтобы избавиться от глобальных переменных:)-
здесь вывел переменные из глобальных
залейте себе самый первый скетч и :)
Не даром просил не отвечать вопросом на вопрос. Валяюсь с гриппом и не имею возможности включить комп и что нибудь залить. Как угодно. Придётся завести себе бумажный чёрный список, что бы на хамство не нарываться. Удачи
Как угодно. Придётся завести себе бумажный чёрный список, что бы на хамство не нарываться. Удачи
Полностью согласен. Колхоз дело добровольное - если хочешь получить внятный ответ задай внятный и понятный вопрос. А рассчитывать на то что все тут кому-то что-то обязаны - излишне.....
prevMillis после каждого прохода равна millis() и никогда не достигнет разницы в две секунды.(((((
если между вызовами x и y добавишь delay(2000), то все взлетит.
если между вызовами x и y добавишь delay(2000), то все взлетит.
delay(2000) на каждый квадратный метр кода.
Valera19701, опиши словами алгоритм работы балалайки и не заёпуй просьбами залить свой код в куда-то - лично у меня нет сериала.
давай - алгоритм работы словами.
Valera19701, опиши словами алгоритм работы балалайки и не заёпуй просьбами залить свой код в куда-то - лично у меня нет сериала.
давай - алгоритм работы словами.
А без слов неясно? Попытка вызвать два раза одну функцию с разными интервалами, которые идут без задержки. Срабатывает только первый. Укажи примером эту ошибку ТС с использованием минимума кода.
А без слов неясно? Попытка вызвать два раза одну функцию с разными интервалами, которые идут без задержки. Срабатывает только первый. Укажи примером эту ошибку ТС с использованием минимума кода.
ты сейчас перечислил ошибки в коде, свои догадки и о чём-то меня попросил - что должен делать код, мне не известно, а заниматься вангованием вероятностей - лениво.
Так я за него писать и не собирался. Обычно достаточно знать ошибку, а куда это знание девать, дело личное.
Так я за него писать и не собирался. Обычно достаточно знать ошибку, а куда это знание девать, дело личное.
ок. а, что ты собирался сделать, отвечая мне на заданный вопрос ТСу?
Чтобы ты вангованием не утруждался, есть конкретный код и конкретный вопрос по нему. Вангование излишне.
Чтобы ты вангованием не утруждался, есть конкретный код и конкретный вопрос по нему. Вангование излишне.
ок. составь мне полный список задач на месяц и к утру сюда его опубликуй.
Коллеги, сто раз уже говорилось - чтобы получить ПРАВИЛЬНЫЙ ответ нужно задать ПРАВИЛЬНЫЙ вопрос!
И чего тут бои устраивать из-за того что кто-то не может внятно поставить задачу и расписать алгоритм?
хочу помигать двумя светодиодами с разным интервалом, оба мигают с одинаковым интервалом, что не так?