#1 2015-11-13 21:16:35

Собачкин
Учасник
Зареєстрований: 2015-11-13
Повідомлень: 4

Помогите с прошивкой

Ребята, нужна небольшая помощь в написании прошивки для блока управления отоплением. Будут включаться обогреватели в разных помещениях через симисторы. На али заказана Pro Mini и разведена плата под нее.

При нажатии PIN13 Включаем PIN5,6
При повторном нажатии PIN13, выключаем PIN5,6 и включаем Pin3 с DELAY, все кнопки кроме PIN 13 не реагируют на нажатия
При нажатии PIN10 Включаем PIN7
При повторном нажатии PIN10, выключаем PIN7
При нажатии PIN11 Включаем PIN8
При повторном нажатии PIN11, выключаем PIN8
При нажатии PIN12 Включаем PIN9
При повторном нажатии PIN12, выключаем PIN9

Какими функциями это можно реализовать? Что-то ничего не приходит в голову кроме if. Може у кого-то есть рабочий пример который можно переделать?

Набросал из примеров код, скажите, будет работать? Плата приедет примерно через 2 недели, хотелось бы к тому времени иметь рабочий код. Теперь главное, как заставить контроллер реагировать только на PIN13, при выключеных PIN5,6

Грубо говоря включать эту "систему" только одной кнопкой, надеюсь обьяснил понятно smile

Заранее спасибо!

/* 
    При нажатии PIN13 Включаем PIN5,6 (int=POW1;)
    При повторном нажатии PIN13, выключаем PIN5,6 и включаем Pin3 с DELAY, все кнопки кроме PIN 13 не реагируют на нажатия
    При нажатии PIN10 Включаем PIN7 (int=POW2;)
    При повторном нажатии PIN10, выключаем PIN7
    При нажатии PIN11 Включаем PIN8 (int=POW3;)
    При повторном нажатии PIN11, выключаем PIN8
    При нажатии PIN12 Включаем PIN9 (int=POW4;)
    При повторном нажатии PIN12, выключаем PIN9

*/


int POW1 = 0;
int POW2 = 0;
int POW3 = 0;
int POW4 = 0;
int LED = 3;           // вывод 3
int brightness = 0;    // начальная яркость светодиода
int fadeAmount = 5;    // величина изменения яркости светодиода

void setup()
{
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  pinMode(10, INPUT);
  pinMode(11, INPUT);
  pinMode(12, INPUT);
  pinMode(13, INPUT);

  digitalWrite(5, 0);
  digitalWrite(6, 0);
  digitalWrite(7, 0);
  digitalWrite(8, 0);
  digitalWrite(9, 0);
}

void loop()
{
  if (digitalRead(13) == HIGH && POW1 == 0) //если кнопка нажата
    // и перемення POW1 равна 0 , то ...
  {

    digitalWrite(5, !digitalRead(5));
    digitalWrite(6, !digitalRead(5));
    POW1 = 1;
    //это нужно для того что бы с каждым нажатием кнопки
    //происходило только одно действие
    // плюс защита от "дребезга"  100%
    // устанавливаем яркость у светодиода у вывода 10
    analogWrite(LED, brightness);

    // изменяем яркость в цикле, прибавляя заданную величину
    brightness = brightness + fadeAmount;

    // меняем порядок затухания на обратный при достижении минимальной или максимальной яркости
    if (brightness == 0 || brightness == 255) {
      fadeAmount = -fadeAmount ;
    }
    // делаем небольшую паузу для лучшего эффекта
    delay(30);
  }

  if (digitalRead(13) == LOW && POW1 == 1) //если кнопка НЕ нажата
    //и переменная POW равна - 1 ,то ...
  {

    POW1 = 0; //обнуляем переменную POW1
  }


  if (digitalRead(10) == HIGH && POW1 == 0) //если кнопка нажата
    // и перемення POW2 равна 0 , то ...
  {

    digitalWrite(7, !digitalRead(7));
    POW2 = 1;
    //это нужно для того что бы с каждым нажатием кнопки
    //происходило только одно действие
    // плюс защита от "дребезга"  100%

  }

  if (digitalRead(10) == LOW && POW2 == 1) //если кнопка НЕ нажата
    //и переменная POW2 равна - 1 ,то ...
  {

    POW2 = 0; //обнуляем переменную POW2
  }


  if (digitalRead(11) == HIGH && POW3 == 0) //если кнопка нажата
    // и перемення POW3 равна 0 , то ...
  {

    digitalWrite(8, !digitalRead(8));
    POW3 = 1;
    //это нужно для того что бы с каждым нажатием кнопки
    //происходило только одно действие
    // плюс защита от "дребезга"  100%

  }

  if (digitalRead(11) == LOW && POW3 == 1) //если кнопка НЕ нажата
    //и переменная POW32 равна - 1 ,то ...
  {

    POW3 = 0; //обнуляем переменную POW3
  }

  if (digitalRead(12) == HIGH && POW4 == 0) //если кнопка нажата
    // и перемення POW3 равна 0 , то ...
  {

    digitalWrite(8, !digitalRead(8));
    POW4 = 1;
    //это нужно для того что бы с каждым нажатием кнопки
    //происходило только одно действие
    // плюс защита от "дребезга"  100%

  }

  if (digitalRead(12) == LOW && POW4 == 1) //если кнопка НЕ нажата
    //и переменная POW4 равна - 1 ,то ...
  {

    POW4 = 0; //обнуляем переменную POW4
  }

}

Неактивний

#2 2015-11-14 03:02:28

vk
Учасник
Зареєстрований: 2015-11-14
Повідомлень: 17

Re: Помогите с прошивкой

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

Неактивний

#3 2015-11-14 13:48:47

Собачкин
Учасник
Зареєстрований: 2015-11-13
Повідомлень: 4

Re: Помогите с прошивкой

Дело в том что не ищу исполнителя, а спрашиваю совета :-) Написан код с if ..else, скомпилирован, вроде как без ошибок и скоро будет проверен в железе. ИК управление сразу отметаем потому что нрвую начинку надо вставить в старый корпус и плата под него уже разведена, по мотивам старой. Тормозит то, что я не могу придумать как сделать так, что-бы пока не включишь прибор по pin13, он не реагировал на нажатия остальных кнопок, может кто направит в нужную сторону?

Неактивний

#4 2015-11-14 15:26:05

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 874

Re: Помогите с прошивкой

сначала проверьте свой код в железе. а потом вопросы если что не так как надо

Неактивний

#5 2015-11-14 23:43:54

vk
Учасник
Зареєстрований: 2015-11-14
Повідомлень: 17

Re: Помогите с прошивкой

можно еще посоветовать поискать эмуляторы микроконтроллеров, если особо заняться нечем (:

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму