Импульсный режим включается сразу на все лазеры, не важно как они включены, он либо включен, либо выключен.
а у вас модулируется тока один лазер.
Предлагаю свой говнокод
boolean vibro = false;
unsigned long time_r=40;
int impulseOn = 3;
int powerOn = 4;
int butt_select = 2;
int butt_modul = 5;
int regim = 1;
int flag = 0;
int flag1 = 0;
void setup()
{
pinMode(powerOn, OUTPUT);
pinMode(butt_select, INPUT_PULLUP);
pinMode(butt_modul, INPUT_PULLUP);
digitalWrite(powerOn, LOW);
digitalWrite(impulseOn, HIGH);
DDRB = B11001110;
}
void loop()
{
if (digitalRead(butt_select) == LOW && flag == 0 && !vibro)
{
regim++;
flag = 1;
if (regim > 3) regim = 1;
}
if (digitalRead(butt_select) == HIGH && flag == 1) flag = 0;
if (digitalRead(butt_modul) == LOW && flag1 == 0)
{
vibro = !vibro;
flag1 = 1;
}
if (digitalRead(butt_modul) == HIGH && flag1 == 1) flag1 = 0;
if (regim == 1 && !vibro) PORTB = 0B11000010;
if (regim == 2 && !vibro) PORTB = 0B11000100;
if (regim == 3 && !vibro) PORTB = 0B11001000;
if (vibro) {
PORTB = 0B11001110;
delayMicroseconds(time_r);
PORTB = 0B11000000;
delayMicroseconds(time_r);
}
}
Учитывая что тут ядреный реактор не управляется поэтому тупо использую delay. В железе не проверял, с заданным значением в протеусе частота почти 10кГц.
mifar - насколько я прочитал ТЗ - в каждый момент может быть включен только один лазер из трех. И на нем может быть либо постоянное напряжение, либо меандр 10 КГц
По поводу скважности смысл есть поднять, чем лучше видно луч, тем лучше. Но это тоже надо экспериментировать. Когда я экспериментировал, то при скважности 60% детектор уже нестабильно принимал сигнал, но возможно надо было расстояние побольше. Думаю этот момент можно будет отрегулировать уже в процессе. А вот скважность 39% это не айс, там уже луч плохо видно.
Алгоритм по переключению лазеров такой: При включении прибора загорается 1 лазер, 1 раз кнопкой жмак включается лазер 2 (первый не отключается), второй раз кнопкой включается 3 лазер(все лазеры включены получаются), 3 раз жмак включается только первый и по кругу. Все лазеры выключать нет смысла, так как это можно сделать отключив прибор(т.е. другая кнопка). Там еще функция есть - включение лазеров в заблокированном состоянии удержанием, но думаю это сам постараюсь воткнуть (не критичный параметр).
Импульсный режим включается сразу на все лазеры. Независимо от их работы.
По поводу скважности смысл есть поднять, чем лучше видно луч, тем лучше.
в моем коде скважность строго 50% и чтобы это поменять - надо много переписывать, я не буду
Цитата:
Алгоритм по переключению лазеров такой: При включении прибора загорается 1 лазер, 1 раз кнопкой жмак включается лазер 2 (первый не отключается), второй раз кнопкой включается 3 лазер(все лазеры включены получаются), 3 раз жмак включается только первый и по кругу.
ну тогда ни один из нас не угадал. У меня лазеры включаются поочередно, в каждый момент включен только один. У Alexey_Rem, насколько я понимаю код - тоже. Чтобы переделать алгоритм, в моем коде достаточно поменять три символа в одной строке. Если мой код понадобится - поменяю.
Как ни крути тот или иной код, всех благодарю за участие, что не прошли мимо. Каждый код имеет право на жизнь. А главное можно будет мне, который в этом деле не соображает, пытаться разобраться в нюансах. Так как 2 разных по принципу кода, а выполняют в принципе одну задачу. Надо вычерпать пользу из этого.
А что бы включались все лазеры одновременно это критичный параметр. Сегодня вечером опробую все. Руки чешуться.
А если стыдно спрашивать попробуйте сами! В моей программке - это добавить 5 строчек и одну изменить, куда и как догадайтесь, уверяю получите массу удовольствия и опыта.
А если стыдно спрашивать попробуйте сами! В моей программке - это добавить 5 строчек и одну изменить, куда и как догадайтесь, уверяю получите массу удовольствия и опыта.
В процедуре void lazer_selection() надо что то менять. Я писец смотрю и не пойму. Я писал подписывал все моменты)))))))))))
С чего мне начать? Вот как тупому скажите. Что прям почитать, что бы зашло. Я ведь много читал и ничего не пойму, почему из этих написанных букв получается какой то алгоритм. Я смотрю в ваши скетчи и хочется по голове себе надавать))))))
Во первых успокриться, во вторых открыть doc.adruino.ua, раздел программирование, прочитать про функции, потом взять мою прогу( исключительно потому что она простая) и разобрать по частям что и как там делается непонятные вещи подглядывать в doc.adruino.ua и все будет ОК.
Переключение так, как у вас написано. У вас в коде сложней. Даже пока затрудняюсь куда вставить строчки с сигнальными светодиодами.
Забыл еще одно условие: когда маятник отводится до предела, то замыкается на контакт и прибор весело мигает всеми лазерами сигнализируя о том, что маятник превысел предел отклонения. Маятник получается +, замыкается на порт.
читаем напряжение с батарейки через делитель расчитаный так что бы при напр на батарейке 3.7 В на нижнем резисторе было 1,3,-1,4 В, При этом напряжении контроллер определяет на входе лог ноль, если напр выше - лог единицу в соответсвии с этим мигаем
ТС нужно
а у вас модулируется тока один лазер.
Предлагаю свой говнокод
Учитывая что тут ядреный реактор не управляется поэтому тупо использую delay. В железе не проверял, с заданным значением в протеусе частота почти 10кГц.
mifar - насколько я прочитал ТЗ - в каждый момент может быть включен только один лазер из трех. И на нем может быть либо постоянное напряжение, либо меандр 10 КГц
Впрочем пусть ТС нас рассудит - ему лучше знать.
Выкладываю свой вариант
Код рассчитан на Уно-Нано 16МГц. Лазеры подключаются к пинам 4, 5 и 6 (не менять!). Кнопки - к любым пинам начиная с восьмого (настраиваются в коде).
Добавил еще один режим - полное выключение. При нажатии кнопки "лазер" включаются последовательно режимы
лазер1 - лазер2 - лазер3 - ВСЕ_ВЫКЛ
и далее по кругу.
Выходная частота по осциллографу 10.01 КГц
mifar - попробовал ваш код в железе.
Работу кнопок не проверял, только импульсный режим.
частота 10.25 Кгц, но скважность 39% - что, в общем, неудивительно, с учетом организации цикла на делеях внутри ЛУП.
По поводу скважности смысл есть поднять, чем лучше видно луч, тем лучше. Но это тоже надо экспериментировать. Когда я экспериментировал, то при скважности 60% детектор уже нестабильно принимал сигнал, но возможно надо было расстояние побольше. Думаю этот момент можно будет отрегулировать уже в процессе. А вот скважность 39% это не айс, там уже луч плохо видно.
Алгоритм по переключению лазеров такой: При включении прибора загорается 1 лазер, 1 раз кнопкой жмак включается лазер 2 (первый не отключается), второй раз кнопкой включается 3 лазер(все лазеры включены получаются), 3 раз жмак включается только первый и по кругу. Все лазеры выключать нет смысла, так как это можно сделать отключив прибор(т.е. другая кнопка). Там еще функция есть - включение лазеров в заблокированном состоянии удержанием, но думаю это сам постараюсь воткнуть (не критичный параметр).
Импульсный режим включается сразу на все лазеры. Независимо от их работы.
По поводу скважности смысл есть поднять, чем лучше видно луч, тем лучше.
в моем коде скважность строго 50% и чтобы это поменять - надо много переписывать, я не буду
ну тогда ни один из нас не угадал. У меня лазеры включаются поочередно, в каждый момент включен только один. У Alexey_Rem, насколько я понимаю код - тоже. Чтобы переделать алгоритм, в моем коде достаточно поменять три символа в одной строке. Если мой код понадобится - поменяю.
Как ни крути тот или иной код, всех благодарю за участие, что не прошли мимо. Каждый код имеет право на жизнь. А главное можно будет мне, который в этом деле не соображает, пытаться разобраться в нюансах. Так как 2 разных по принципу кода, а выполняют в принципе одну задачу. Надо вычерпать пользу из этого.
А что бы включались все лазеры одновременно это критичный параметр. Сегодня вечером опробую все. Руки чешуться.
так режим со всеми лазерами нужен?
Так то нужен. Но уже стыдно спрашивать)))
А если стыдно спрашивать попробуйте сами! В моей программке - это добавить 5 строчек и одну изменить, куда и как догадайтесь, уверяю получите массу удовольствия и опыта.
Хорошо попробую.
Оказывается : :)))
4. Измерение напряжение на делителе, что бы сигнализировать о разряде. Сигнальный светодиод тот же, что и Power ON, только он начинает мигать.
Тут хорошо бы узнать как питается ардуинка, если от лития, то наверное можно было бы сделать так:
Питается от лития. Да такой делитель пойдет.
Если батарея 4-х вольтовая - не нужен там делитель.
По идее стаб поставить. Но это уже другая история.
И не надо АЦП читать сигнал 0 на GPIO и мигать POWER ON диодом
Alexey_Rem - работает норм, по кругу не переключается.
Mifar - что то там при включении импульсного режима не переключаются лазеры. Дальше не разобрался пока.
b707 - а привязки к пинам сильно обязательно? Это ведь перепивать все надо))
b707 - а привязки к пинам сильно обязательно? Это ведь перепивать все надо))
какие пины хотите поменять? лазеры? - на какие?
9 10 11
Лучше скажите как, что бы я мог менять.
при включении импульсного режима не переключаются лазеры.
Ну так задумано, зачем их переключать если они и так все одновременно включаются. Если есть острое желание переключать - уберите в 24 строке
&& !vibro
А если стыдно спрашивать попробуйте сами! В моей программке - это добавить 5 строчек и одну изменить, куда и как догадайтесь, уверяю получите массу удовольствия и опыта.
В процедуре void lazer_selection() надо что то менять. Я писец смотрю и не пойму. Я писал подписывал все моменты)))))))))))
Ну так задумано, зачем их переключать если они и так все одновременно включаются. Если есть острое желание переключать - уберите в 24 строке
&& !vibro
Убрал vibro - не переключает в импульсном режиме.
9 10 11
Лучше скажите как, что бы я мог менять.
Слишком много обьяснять надо, ща сам поменяю и выложу
IMPROVED VERSION features are commented:
may not work correctly has not been tested on hardware
9 10 11
Лучше скажите как, что бы я мог менять.
исправленный вариант -
лазеры на пинах 9, 10, 11, кнопки на 3 и 4
Режимы теперь включаются так
лазер1 - лазеры 1+2 - лазеры 1 + 2 + 3 - ВСЕ_ВЫКЛ
Блин, классно написано я так не умею
pinMode(modul_on,INPUT);
наверное OUTPUT
лазер1 - лазеры 1+2 - лазеры 1 + 2 + 3 - ВСЕ_ВЫКЛ
Первый при включении загораться должен. И режим все выключены должен, когда с пина определенного убираешь 1. Там проц в спящем режиме ждет.
Блин ребя ничего вы даёте.
С чего мне начать? Вот как тупому скажите. Что прям почитать, что бы зашло. Я ведь много читал и ничего не пойму, почему из этих написанных букв получается какой то алгоритм. Я смотрю в ваши скетчи и хочется по голове себе надавать))))))
Ничего такого не вижу перезагрузите страницу
115
void
setup
() {
116
pinMode(lazer_1,OUTPUT);
117
pinMode(lazer_2,OUTPUT);
118
pinMode(lazer_3,OUTPUT);
119
pinMode(pow_on_led,OUTPUT);
120
pinMode(butt_select,INPUT_PULLUP);
121
pinMode(butt_modul,INPUT_PULLUP);
122
pinMode(volt_sence,INPUT);
123
pinMode(modul_on,INPUT); вот тут
124
digitalWrite(lazer_1, LOW);
125
digitalWrite(lazer_2, LOW);
126
digitalWrite(lazer_3, LOW);
152
digitalWrite(modul_on,!modulation);
// индицируем модуляцию
digitalWrite(modul_on,modulation);// индицируем модуляцию тут наверное так, а то светодиод инверсно работает.
Во первых успокриться, во вторых открыть doc.adruino.ua, раздел программирование, прочитать про функции, потом взять мою прогу( исключительно потому что она простая) и разобрать по частям что и как там делается непонятные вещи подглядывать в doc.adruino.ua и все будет ОК.
вполне возможно
001
int
pow_on_led=(1);
//св диод питания вставить свою ногу
002
int
volt_sence=(2);
//датчик напр питания вставить свою ногу
Две разных диода получается. Одинаковый пин не работает.
удалите это какие-то паразитные теги HTML
pow_on_led-выход на светодиод
volt_sence -датчик на пряжения -входINPUT
Оп сорян)) не то написал это же пин измерения)))
123
pinMode(modul_on,INPUT);
Исправил
pinMode(modul_on, OUTPUT);
лазер1 - лазеры 1+2 - лазеры 1 + 2 + 3 - ВСЕ_ВЫКЛ
Первый при включении загораться должен.
вы пока это проверьте, может еще какие замечания будут
Переключение так, как у вас написано. У вас в коде сложней. Даже пока затрудняюсь куда вставить строчки с сигнальными светодиодами.
Забыл еще одно условие: когда маятник отводится до предела, то замыкается на контакт и прибор весело мигает всеми лазерами сигнализируя о том, что маятник превысел предел отклонения. Маятник получается +, замыкается на порт.
Alexey_Rem
Каков алгоритм volt_sence? Какое напряжение он считает минимум?
читаем напряжение с батарейки через делитель расчитаный так что бы при напр на батарейке 3.7 В на нижнем резисторе было 1,3,-1,4 В, При этом напряжении контроллер определяет на входе лог ноль, если напр выше - лог единицу в соответсвии с этим мигаем
А как это в коде указано?
Я сажаю на 0 пин sens. Не реагирует.
мигание с частотй ок 0.6 Гц
На + сажаю тухнет, на - не реагирует.
Подумаю
Похоже частота выше. Цешка показывает 245 Гц