Перейти к содержанию

Задержка Выключения Вентилятора.


Рекомендуемые сообщения

Здравствуйте. Помогите пожалуйста со скетчем, нужно знание AVR. На контроллере ATtiny13A, через arduino IDE. Заливаю скетч, скетч написал сам, и он работает (но не на полную). Вообщем хотелось бы выставлять время задержки выключения вентилятора, через реостат.

Пробовал map но она занимает слишком много памяти и работает коряво.

va = analogRead(2);
thinkingTime=va;
if(timer-timerPr>thinkingTime)
{
val=false;
PORTB &= ~(1<<relayPin);
}

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

Поделитесь кусочком кода на C , усреднить значение с АЦП, и перевести с одних величин в другие.

Вот весь

#define relayPin 0
boolean val = false;
int va=0;
unsigned long timer=0, timer2=0, timer1=2000, timerPr=0, thinkingTime=0;

void setup()
{
DDRB |= (1<<relayPin);
PORTB &= ~(1<<relayPin);
}

void loop() {
if(digitalRead(1)==HIGH)
{
val=true;
timerPr=millis();
}
else
{
if(val==false)
{
timer2=millis();
}
if(timer-timer2<=timer1)
{
val=false;
PORTB &= ~(1<<relayPin);
}
}

if(val==true)
{
timer=millis();
PORTB |= (1<<relayPin);
if(timer-timer2>timer1)
{
va = analogRead(2);
thinkingTime=va;
if(timer-timerPr>thinkingTime)
{
val=false;
PORTB &= ~(1<<relayPin);
}
}
}
}

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

Изменено пользователем Yurchik26
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

0 АЦП - 10 минут, максимальное значение АЦП - 1 час.

Это если алгоритм, а дальше уже высчитывать по пропорциям можно. Или высчитать сколько единиц АЦП приходится на 10 минут, а затем уже высчитывать значение, которое необходимо внести в таймер.

На счет усреднения - для начала искать среднее из 20-50-100 значений

ЗЫ: подправьте внешний вид кода, читается плохо

Изменено пользователем swat24
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Это хорошо. Но мне в связи с маленьким размером памяти в контроллере, нужен код именно на С,или С++, или С#, вообщем в этих си не разбираюсь совсем

Блин в тему не ту написал, только сейчас дошло. Прошу прощение, надо было в AVR

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

какой код? алгоритм не понятен? Шарп вам вообще ничего не даст, он не для этого рассчитан, тут или С или С++.

Если не понятен алгоритм задавайте вопросы, будем вместе разбираться

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

Ссылка на комментарий
Поделиться на другие сайты

какой код? алгоритм не понятен?

Алгоритм понятен, и на библиотеках Arduino я его оформлю без проблем.

Шарп вам вообще ничего не даст, он не для этого рассчитан, тут или С или С++.

Напишу еще раз, я совершенно не разбираюсь в СИ. Поэтому и написал разные варианты си.

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

Я думаю что быстрота и скорость работы чтоб управлять вентилятором мне не нужна. Мне и на IDE пойдет если уместится в память

Ссылка на комментарий
Поделиться на другие сайты

Размер скетча в двоичном коде: 724 байт (из 1 024 байт максимум)

даже так Размер скетча в двоичном коде: 708 байт (из 1 024 байт максимум)

boolean - 1 переменная, выключен свет или нет.

unsigned long - таймеры, их длина оправдана

int - значение АЦП

Как я вижу можно ли кусок с си вставить сюда и должно работать, верно? релюха уже работает так, и своим кодом сэкономила мне память

Изменено пользователем Yurchik26
Ссылка на комментарий
Поделиться на другие сайты

Короче сделал так, мне так проще, быстрота безразлична

#define relayPin 0
boolean val = false;
unsigned long timer=0, timer2=0, timer1=2000, timerPr=0;

void setup() 
           {
              DDRB |= (1<<relayPin);
              PORTB &= ~(1<<relayPin);
           }

void loop() {
              if(digitalRead(1)==HIGH)
                            {
                               val=true;
                               timerPr=millis();
                            }
               else          
                            {
                               if(val==false)
                                               { 
                                                 timer2=millis();
                                               }
                               if(timer-timer2<=timer1)
                                               { 
                                                 val=false;
                                                 PORTB &= ~(1<<relayPin); 
                                               }
                            }

   if(val==true)                
                            {
                               timer=millis();
                               PORTB |=  (1<<relayPin);
                               if(timer-timer2>timer1)
                                               { 
                                                   int va = analogRead(2);
                                                          if(va>=50){
                                                          if(va>=100){
                                                          if(va>=150){
                                                          if(va>=200){
                                                          if(va>=250){
                                                          if(va>=300){
                                                          if(va>=350){
                                                          if(va>=400){
                                                          if(va>=450){
                                                          if(va>=500){
                                                          if(va>=550){
                                                          if(va>=600){
                                                          if(va>=650){
                                                          if(va>=700){
                                                          if(va>=750){
                                                          if(va>=800){
                                                          if(va>=850){
                                                          if(va>=900){
                                                          if(va>=950){
                                                          if(va>=1023){
                                                            va=25;
                                                                      }
                                                          else{
                                                          va=24;
                                                          }
                                                          }
                                                          else{
                                                          va=23;
                                                          }
                                                          } 
                                                          else{
                                                          va=22;
                                                          }
                                                          }
                                                          else{
                                                          va=21;
                                                          }
                                                          } 
                                                          else{
                                                          va=20;
                                                          }
                                                          } 
                                                          else{
                                                          va=19;
                                                          }
                                                          } 
                                                          else{
                                                          va=18;
                                                          }
                                                          } 
                                                          else{
                                                          va=17;
                                                          }
                                                          } 
                                                          else{
                                                          va=16;
                                                          }
                                                          } 
                                                          else{
                                                          va=15;
                                                          }
                                                          } 
                                                          else{
                                                          va=14;
                                                          }
                                                          }
                                                          else{
                                                          va=13;
                                                          }
                                                          }  
                                                          else{
                                                          va=12;
                                                          }
                                                          } 
                                                          else{
                                                          va=11;
                                                          }
                                                          } 
                                                          else{
                                                          va=10;
                                                          }
                                                          } 
                                                          else{
                                                          va=9;
                                                          }
                                                          } 
                                                          else{
                                                          va=8;
                                                          }
                                                          } 
                                                          else{
                                                          va=7;
                                                          }
                                                          } 
                                                          else{
                                                          va=6;
                                                          }
                                                          } 
                                                          else{
                                                          va=5;
                                                          }  
                                                    unsigned long thinkingTime=va;
                                                    thinkingTime=thinkingTime*60000;
                                                    if(timer-timerPr>thinkingTime) 
                                                                                 {
                                                                                    val=false;
                                                                                    PORTB &= ~(1<<relayPin);                                    
                                                                                 } 
                                               }

                            }
}    

Размер скетча в двоичном коде: 1 018 байт (из 1 024 байт максимум)

Изменено пользователем Yurchik26
Ссылка на комментарий
Поделиться на другие сайты

И еще.

Что такое "скетч"? Нельзя ли его зменить каким-то русским названием?

Или - нельзя ли сразу использовать русское что-то?

С адвокатами своими проконсультировались?

Ссылка на комментарий
Поделиться на другие сайты

Опять же подправьте код, читать не реально...

Плюс я же написал как это сделать, вы сказали, что описать это не проблема? тогда в чем сложность? не влазит в память? так я не видел остального кода, в 1кб можно впихнуть многое, тем более, что это 8 битник. Если и правда не влазит не пишите всякие "скетчи", а пишите нормально на С, тем более, что вы и так его используете, только будете общаться напрямую к регистрам, чем сэкономите память

Не пишите столько условий, можно кейсы использовать, удобней будет

Теперь разбираемся дальше. 17 единиц АЦП - это 1 минута. Судя по этому можно высчитать, что 1 значение АЦП будет 0,058 минуты. Дальше уже высчитывать что нужно занести в таймер

Изменено пользователем swat24
Ссылка на комментарий
Поделиться на другие сайты

Чего-то напрашивается:

int va = analogRead(2);
va=va/50+5;

правда, при этом, последнее условие if(va>=1000), а не if(va>=1023)

действительно. сам не догадался. такой вариант нравится.

Yurchik26, а форумчан уважать нужно? Или с напором и плевать на все?

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

И еще.

Что такое "скетч"? Нельзя ли его зменить каким-то русским названием?

Или - нельзя ли сразу использовать русское что-то?

С адвокатами своими проконсультировались?

это вы про что? сама программа пишет скетч. не понял вас совсем

Программа, написанная в среде Arduino, называется скетч.

ссылка

http://arduino.ru/Arduino_environment

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

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

так я не видел остального кода, в 1кб можно впихнуть многое, тем более, что это 8 битник.

вообще то я остальной код выкладывал 2 раза, как вы его не могли видеть? восьмое сообщение это весь код (скетч) или как там правильно

Если и правда не влазит не пишите всякие "скетчи", а пишите нормально на С, тем более, что вы и так его используете, только будете общаться напрямую к регистрам, чем сэкономите память

Напишу еще раз, нет знаний совершенно на СИ, есть на ардуино. Я НЕ ЗНАЮ СИИИИИИ, могу еще раз 5 написать. А то что использую, вычитал с интернета, нажал копировать и нажал вставить, и все (это про маленькие кусочки СИ).

Не пишите столько условий, можно кейсы использовать, удобней будет

расскажите поподробнее что за кейсы, не знаю про них. это они?

Оператор Switch

Подобно конструкции if, switch...case управляет процессом выполнения программы, позволяя программисту задавать альтернативный код, который будет выполняться при разных условиях. В частности, оператор switch сравнивает значение переменной со значением, определенном в операторах case. Когда найден оператор case, значение которого равно значению переменной, выполняется программный код в этом операторе.

Ключевое слово break является командой выхода из оператора case и обычно используется в конце каждого case. Без оператора break оператор switchбудет продолжать вычислять следующие выражения, пока не достигнет break или конец оператора switch.

Изменено пользователем Yurchik26
Ссылка на комментарий
Поделиться на другие сайты

это с каким напором? тыкните туда где напор был?

Программный код на этом форуме принято оформлять соответствующим образом. Ссылку, где почитать, я Вам указал.
Скетч (англ. sketch, буквально — эскиз, набросок)
Сплошная американизация. Некоторое желание выделиться, применяя новомодные иностранные слова. :( Скоро так и родной язык позабудете.
Ссылка на комментарий
Поделиться на другие сайты

это с каким напором? тыкните туда где напор был?

Программный код на этом форуме принято оформлять соответствующим образом. Ссылку, где почитать, я Вам указал.

Понял извините.

Скетч (англ. sketch, буквально — эскиз, набросок)
Сплошная американизация. Некоторое желание выделиться, применяя новомодные иностранные слова. :( Скоро так и родной язык позабудете.

Но здесь честное слово двоякая ситуация, практически все кто здесь из умных есть, любят позадротить, в плане того что на (Потенциометр) скажешь крутилка, или резистор, и тут же шквал эмоций что это не правильно, пиши правильно, я тебя не понимаю, не можешь описать проблему. Честно придираются по пустякам. И только исходя из этого, и чтоб не было обвинений что я написал не правильно, я написал именно скетч. Хотя мне лично, удобнее, приятнее, писать (код). (ИМХО)

Ссылка на комментарий
Поделиться на другие сайты

Понятно. Вам решать, какие слова использовать.

По поводу оформления - такие достаточно большие участки кода спрятали бы под спойлер. Крайне неудобно листать страницы. :(

Ссылка на комментарий
Поделиться на другие сайты

Если то весь код и он не влазит в 1к флешь, надо задуматься над компилятором... Про свитч правильно нашли.

По поводу "американизации..." А как вы хотите это все называть? Само слово скетчи и мне не нравится так как можно сказать код... Но причём американизация ? Все популярные языки программирования тоже сплошной английский и что? Тоже не пользоваться?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...