Проверка и небольшая помощь по коду.
- Войдите на сайт для отправки комментариев
Здравствуйте. Совсем недавно посетила меня идея сделать плавный автоматический свет для аквариума. Под рукой был какой-от таймер с али и маленькая на attiny85 ардуинка. Алгоритм работы программы таков:
Когда на timer_pin у нас 1 программа ничего не делает. Но вот таймер досчитывает до опр. времени и опускает timer_pin в 0, начинается плавное наращивание якрости. После того как яркость достинает максимума, программа ничего не делает и ждет, когда таймер перестанет timer_pin укладывать в 0 и на нем снова появится 1. Когда это происходит, начинается плавное снижение яркости.
Как сделать так, чтобы после того как яркость достигнет своего предела, ее можно бы было уменьшать и прибавлять с момощью двух кнопок? (одна, соответственно, на повышение, другая - на понижение). Также измененное значение ярксти должно сохранятся.
В процессе проб и ошибок получилось аж два варианта кода. Какой из них более верный и в какой будет лучше внедрить вышеописанное?
В программировании я, ну конечно же, новичок. Да и в целом гуманитарий. Меня в детстве математичка по голове транспортиром била.
Вариант 1:
#define led_pin 0 #define timer_pin 4 #define spd 20 //скорость наращивания яркости float x; unsigned long timing; void setup(){ pinMode(led_pin, OUTPUT); pinMode(timer_pin, INPUT); //Serial.begin(9600); } void loop(){ int y; while((digitalRead(timer_pin) == 0) && (x < 255)){ if((millis() - timing) > spd){ x++; y = 0.003921569 * pow(x, 2); analogWrite(led_pin, y); //функция нелинейного наращивания яркости. Придумал не сам) //Serial.println(y); timing = millis(); } } while((digitalRead(timer_pin) == 1) && (x > 0)){ if((millis() - timing) > spd){ x--; y = 0.003921569 * pow(x, 2); analogWrite(led_pin, y); //Serial.println(y); timing = millis(); } } }
Вариант 2:
#define led_pin 10 #define timer_pin 7 #define spd 20 //скорость наращивания яркости float x; unsigned long timing; void setup(){ pinMode(led_pin, OUTPUT); pinMode(timer_pin, INPUT); Serial.begin(9600); } void loop(){ int y; while(1){ if((millis() - timing) > spd){ if((digitalRead(timer_pin) == 0) && (x < 255)){ x++; } else if((digitalRead(timer_pin) == 1) && (x > 0)){ x--; } y = 0.003921569 * pow(x, 2); //функция нелинейного наращивания яркости. Придумал не сам) analogWrite(led_pin, y); Serial.println(y); timing = millis(); } } }
Код 2. while (строки 15 и 28) удалить. Вместо цифры 255 (максимум) сделать переменную, и её мотать кнопками.
Синтаксис записи:
EEPROM.update() экономичней при верном использовании.
я чутка придерусь ... :)
зачем стока скобок ?
я не профи, может по стандартам чистого С оно так и надо, ЕвгенийП что скажите ?
я чутка придерусь ... :)
зачем стока скобок ?
я не профи, может по стандартам чистого С оно так и надо, ЕвгенийП что скажите ?
я чутка придерусь ... :)
зачем стока скобок ?
я не профи, может по стандартам чистого С оно так и надо, ЕвгенийП что скажите ?
Хотя бы потому, что в различных языках установлен разный приоритет операций.
А скобки этот факт нивелируют.
И вообще, уж на что не следует скупиться, так это именно на скобки. Они снимают все возможные неоднозначности.
ну не знаю, наверное дело привычки, но совсем параноидная запись
для меня просто становится не читаемой.
ну не знаю, наверное дело привычки, но совсем параноидная запись
для меня просто становится не читаемой.
спор ни о чем
Я тоже пишу "совсем параноидально" - то есть в примере выше я именно так скобки и расставил бы.
На мой вгляд, если поставишь лишнюю пару скобок - это может кого-то насмешит, но ошибкой не станет. Недостаток скобок всегда хуже.
ну не знаю, наверное дело привычки, но совсем параноидная запись
для меня просто становится не читаемой.
Это Вы, наверное, на Лиспе не писали :)
Хакерам удалось украсть последние 50 МБ исходного кода программы на Lisp, которая управляет запуском баллистических ракет США.
К счастью, там были только закрывающие скобки. (С)
Это Вы, наверное, на Лиспе не писали :)
нет, даже не "нюхал".
спор ни о чем
я не вижу ни малейшего намека на спор.
На мой вгляд, если поставишь лишнюю пару скобок - это может кого-то насмешит, но ошибкой не станет.
так-же как и не станет ошибкой их отсутствие.
не исключаю, что это может кого-то расстроить.
Спасибо всем большое за ответы, не думал, что столько людей откликнется.
Вот что у меня получилось:
Получилось примерно так. Теперь все как и положено: яркость можно регулировать кнопками. Но! Первый момент, как реализовать антидребезг и задержку (чтоб при малейшем нажатии у меня сразу в огромный минус переменные не уходили) у кнопок без delay? Я пытался туда millis заколхозить, но в итоге вышла ерунда полная и ничего не заработало. Второй момент, не получилось реализовать eeprom, так как при первом запуске программы t присваивется значение 255, а без этого, мне кажется, никак.
По поводу скобок. Я как-то недавно писал скрипт на php для вк (это был мой первый опыт в программировании) и меня по этому поводу один хороший человек консультировал, он-то как раз и порекомендовал мне эти скобки расставлять. С ними, на мой взгляд, код чуть лучше воспринимается на глаз, но тут уж кто как привык.
Эй, ну куда же вы все подевались(
Программа у вас "не той системы". А все как реализовать уже написано мной не один раз и неоднократно. Просто повторяться надоедает.
Как понять "не той системы"?
Написано на "кухаркином блинк программировании". Вот от туда и все проблемы растут. Зато код понятен как полено.
Как понять "не той системы"?
Ну, как, так и понимать: https://www.youtube.com/watch?v=NHaPCiKwUq8
А в коде, написанный мной, в составных логических условиях будут "лишние" скобки - для наглядности и однозначности, ибо для моего уровня знакомства с языком такая запись надежнее.