Подсветка чайника с меняющимся цветом в зависимости от t

Обсуждаем контроллеры компании Atmel.
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

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

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

Надо в файле interrupt_handler.ads объявить две переменные

Код: Выделить всё

beeping: boolean := false;
pragma Volatile(beeping);
beep_counter: Unsigned_16 := 0;
А в файле interrupt_handler.adb в функцию SYS_tick добавить пикание

Код: Выделить всё

if beeping then
    beep_counter := beep_counter + 1;
    if beep_counter>=2000 then
        beep_counter := 0;
        BEEP := not BEEP;
    end if;
else
    BEEP := false;
end if;
После этого в основном коде (teapot.adb) можно будет включать пикание

Код: Выделить всё

beeping := t>90;
Главное не забыть убрать старый механизм пикания
when 91..110 => pulse := not pulse; if pulse then R:=32; else R :=0; end if; BEEP := pulse;
Реклама
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение DronVolk »

Андрей СШ писал(а):
ARV писал(а):а что это за язык у вас какой-то странный?
Ничего странного. Обычная Ада, образца 1995-го года.
О сейчас себе java компилятор для avr соберу.

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

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Реклама
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

DronVolk писал(а):О сейчас себе java компилятор для avr соберу.
Думаю Вы будете первым тут, кому понадобится внешняя оперативная память для AVR.
DronVolk писал(а):Ada здесь тормозит скорость ответов.
Ада не тормозит (тут очень хотелось ещё раз пошутить про Жабу, но сдержался) потому что нет никаких вопросов по ней кроме "а что это за язык?".
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение DronVolk »

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

а да я не про то что язык медленный (он также в машинный код собирается как и Си) я про то что люди здесь в подовляющем большинстве на Си пишут и синтаксис ады им сложно разобрать и они не могут ответить или помочь по этой причине.
Реклама
Эиком - электронные компоненты и радиодетали
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

Про оперативку была в основном шутка. Но при взгляде на то как GCC оптимизирует некоторые фрагменты кода возникает подозрение, что он будет запихивать в компилированный код куски Ява-машины. Но это конечно надо собрать компилятор и проверить, может и нормально будет.
DronVolk писал(а):я про то что люди здесь в подовляющем большинстве на Си
Так и я про тоже. Никто не пишет на Аде, поэтому нет вопросов и соответственно тормозов.
Реклама
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение DronVolk »

Я уже прочел про GCJ и как он работает))) Да он втыкает байт код java машины но при условии если используются специфичные для языка конструкции типа рефлексии и сборки байт-кода в памяти, а так современная JVM сама в памяти байт-код транслирует в машинный код и естественно если нет рефлексии. :))
Похоже GCC поддерживает AVR из коробки))) остается только заголовки подключить с информацией для конкретного кристалла (регистры и все такое) Да похоже я переоценил Ardunio :( я то думал они компилятор C++ портировали а они готовым воспользовались.
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Реклама
Nizam
Открыл глаза
Сообщения: 60
Зарегистрирован: Сб мар 06, 2010 15:44:00

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Nizam »

Андрей сделал все как ты написал.. Залил прошивку.. Пиликание в конце кипения не отключается после срабатывания когда температура снижается.. Он так и пиликает .))
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

Вообще не перестаёт или пока температура ниже 90 не упадёт?

Если первое, то надо посмотреть teapot.adb. Скорее всего
beeping := t>91;
вставлено не в то место. Его надо вставлять снаружи от case ... end case;

Если второе, то тут надо алгоритм включения пикалки пересматривать. Что-то раньше в голову не приходила мысль, что оно будет продолжать пищать пока остывает.
Nizam
Открыл глаза
Сообщения: 60
Зарегистрирован: Сб мар 06, 2010 15:44:00

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Nizam »

Вообще не перестаёт.

case t is
when 1..10 => R := 16; G := 0; B := 16; BEEP := false;
when 11..26 => R := 26 - t; G := 0; B := 16 + (t-10); BEEP := false;
when 27..58 => R := 0; G := t-26; B := 32 - (t-26); BEEP := false;
when 59..90 => R := t-58; G := 32 - (t-58); B := 0; BEEP := false;
when 91..110 => pulse := not pulse; if pulse then R := 32; else R := 0; end if; G := 0; B := 0; BEEP := pulse;
when others => error_count := error_count + 1;
end case;

Сюда?? в место BEEP := pulse; вставляем beeping := t>91; ???
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

BEEP := pulse; - вообще убрать, теперь управление выходом BEEP происходит в прерывании

beeping := t>91;
вставить сразу после end case;
Nizam
Открыл глаза
Сообщения: 60
Зарегистрирован: Сб мар 06, 2010 15:44:00

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Nizam »

в файле interrupt_handler.ads объявить две переменные
Имеет значение куда вставить ??

beeping: boolean := false;
pragma Volatile(beeping);
beep_counter: Unsigned_16 := 0;

в файле interrupt_handler.adb в функцию SYS_tick добавить пикание
Тоже самый вопрос.. Куда именно вставить это??

if beeping then
beep_counter := beep_counter + 1;
if beep_counter>=2000 then
beep_counter := 0;
BEEP := not BEEP;
end if;
else
BEEP := false;
end if;
Nizam
Открыл глаза
Сообщения: 60
Зарегистрирован: Сб мар 06, 2010 15:44:00

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Nizam »

Андрей Спасибо.. Все получилось..
Буду благодарен если поставите комментарии в этих командах.

case t is
when 1..10 => R := 16; G := 0; B := 16; BEEP := false;
when 11..26 => R := 26 - t; G := 0; B := 16 + (t-10); BEEP := false;
when 27..58 => R := 0; G := t-26; B := 32 - (t-26); BEEP := false;
when 59..90 => R := t-58; G := 32 - (t-58); B := 0; BEEP := false;
when 91..110 => pulse := not pulse; if pulse then R := 32; else R := 0; end if; G := 0; B := 0;
when others => error_count := error_count + 1;
end case;
beeping := t>91;

И заметил только что при превышении температуры сигнализация срабатывает красный цвет начинает гореть постоянно но звук остается прерывистым. А он должен пищать постоянно и должно загораться все 3 цвета при нарушении.
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

case t is
Оператор выбора. В зависимости от значения температуры выполняет один (именно один. не больше и не меньше) из следующих вариантов

when 1..10 => R := 16; G := 0; B := 16; BEEP := false;
если температура в диапазоне 1..10 градусов, то устанавливает долю свечения для каждого из цветов и выключает пищалку. Выключение пищалки осталось от старого варианта и сейчас не нужно, но и не вредно. Свечение для каждого из цветов может быть от 0 до 32-х.

when 11..26 => R := 26 - t; G := 0; B := 16 + (t-10); BEEP := false;
Здесь тоже самое, но свечение красного плавно уменьшается с повышением температуры и по достижении 26° выключается совсем. Свечение синего наоборот нарастает до максимумв.

pulse := not pulse;
При каждом проходе изменяет значение логической переменной на противоположенное, чем достигается мигание.

if pulse then R := 32; else R := 0; end if;
В зависимости от значения переменной true/false задаётся либо полное свечение красного, либо полное погашение.

when others => error_count := error_count + 1;
если температура не попала ни в один из диапазонов, то это трактуется как ошибка и счётчик количества ошибок увеличивается (кстати здесь баг в логике программы, это надо исправить на error_count := 3;)

beeping := t>91;
beeping - логическая переменная, управляющая прерывистым писком
если температура больше чем 91° то писк включается (true).
Nizam
Открыл глаза
Сообщения: 60
Зарегистрирован: Сб мар 06, 2010 15:44:00

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Nizam »

Исправил на error_count := 3; Все 3 цвета загорелись во время сигнализации а писк не стал постоянным..
Последний раз редактировалось Nizam Пт сен 11, 2015 15:11:14, всего редактировалось 1 раз.
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

А я уже голову сломал, пытаясь понять что это за фигня.
Nizam
Открыл глаза
Сообщения: 60
Зарегистрирован: Сб мар 06, 2010 15:44:00

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Nizam »

Ничего страшного Андрей.
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 379
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Nizam писал(а):when 27..58
А 27 и 58 - это что за пределы такие?
Они что-нибудь значат физически в реальном мире?

Для чего о них знать пользователю чайника, незнакомому с программированием? :))

Я же предлагал изначально - пороги 30-45-90....
30 - вода ощущается тёплой,
45 - это предел терпения человеческого тела,
а 90 - это нижний предел кипения воды в средней полосе России.

А у вас опять какая-то программистская абстракция.
Я тоже, в некотором роде, радиоинженер...
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

bad2cat, сообщите точнее желаемые настройки в виде
диапазон температур - R G B
и я сделаю специальную прошивку для Вас.
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 379
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Андрей СШ писал(а):и я сделаю специальную прошивку для Вас.
Ой, мне-то не надо - не стоит беспокоится, у меня чайник с мех.свистком - надёжней не бывает.
Я ради людей стараюсь, оградить их от программистского произвола :))

Границы я вам сообщаю уже в 4-й раз. Вы же программисты точны и пунктуальны?
чайник включен в сеть, но не греет - зелёный.
от комнатной и выше - синий, чайник начал нагрев, вода холодная.
от 30 и выше - тёплая вода (так руками воспринимается, для запития лекарств, мелких постирушек, разбавления хим.веществ, например травителей ПП) - бирюзовый - смесь зелёного и синего.
от 45 и выше - рука не терпит уже (возможны ожоги 1-й степени) - жёлтый (или смесь красного и зелёного), предупреждающий.
от 70 и выше - очень горячий (возможны ожоги 2-й степени) - оранжевый (янтарный)
от 90 и выше - кипяток - ярко-красный (температура кипения зависит от давления и вода активно парит даже при 90 градусах)
http://www.calc.ru/612.html

В экселе построил формулу. Считаю - в Челябинске бывает давление от 720 до 750 ммртст. Это T кипения от 98,5 до 99,6 C.
Я тоже, в некотором роде, радиоинженер...
Nizam
Открыл глаза
Сообщения: 60
Зарегистрирован: Сб мар 06, 2010 15:44:00

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Nizam »

Похоже все заклинило.. :) Будут какие новости?
Алгоритм работы как описал bad2cat можно сделать? Но со звуковыми сопровождениями. :beer:
Ответить

Вернуться в «AVR»