автомат для циркуляционного насоса

Тема в разделе "Arduino & Shields", создана пользователем Slaiterx, 15 сен 2016.

  1. qwone

    qwone Гик

    Если говорить про Феньшуй. То он индивидуален.Это программа в моем стиле выглядит так
    Код (C++):
    /*
    DS18B20             -> 10    (ONE_WIRE_BUS)
    реле мотора         -> 12     (rele)
                     GND-> GND
    светодиод "Авария"  -> 13    (Alarm_pin)
                     GND-> GND
    */

    //#1
      const int Alarm_pin =13; // задаем контакт для светодиода
      uint8_t Alarm       = 0; // сигнал Тревога 0 - все ОК / 1 - DS18B20 потерян
      uint8_t Alarm_blink = 0; // мигалка Аварии
      void Alarm_ini(){
        pinMode(Alarm_pin, OUTPUT);
        digitalWrite(Alarm_pin, LOW) ;
        }
      void Alarm_run(){
         Alarm_blink = !Alarm_blink;
         digitalWrite(Alarm_pin, Alarm && Alarm_blink) ;  
        }
    //#5
      #include <OneWire.h>
      #include <DallasTemperature.h>
      const int ONE_WIRE_BUS=10; //задаем контакт для датчика
      OneWire oneWire(ONE_WIRE_BUS);
      DallasTemperature sensors(&oneWire);

      const int rele =12;//задаем контакт реле
      float t ;//обьявляем переменную температуры (t)

      void Device_ini(){
        pinMode(rele, OUTPUT); // реле мотора инициализировать и отключить.
        digitalWrite(rele, LOW) ;
        sensors.begin();
        }
      void Device_run(){
        Alarm =0; // сброс Аварии
        t = sensors.getTempCByIndex(0);
        Serial.println(t);//Выводим температуру в сериал порт
        if (t == -127 ) { //при потере датчика
             Alarm =1;  //включение Аварии
            digitalWrite(rele, HIGH);// включаем насос
            return;
            }
        if (t >=35) digitalWrite(rele, HIGH) ;//температура включения насос
        if (t <=33) digitalWrite(rele, LOW) ;//температура выключения насосa
        }

    void setup(void) {
       Serial.begin(9600);
    //#1
      Alarm_ini();
    //#5
      Device_ini();
    }

    void loop(void) {
        static uint32_t MILLIS ;
        MILLIS = millis() ;
    //#1 1000 миллисек отработка аварии
        static uint32_t future1 = 0 ;
        if (MILLIS>=future1) {
           future1 = MILLIS + 1000 ;
           Alarm_run();
           MILLIS = millis() ;
           }
    //#5 750миллисек :1000 миллисек выполнение работы
        static uint32_t future5 = 0 ;
        static uint32_t state5 = 1 ;
        if (MILLIS>=future5) {
           state5 = !state5  ;
           if (!state5) sensors.requestTemperatures();//команда на получение температуры
           else Device_run();
           }

    }
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    зачем int для номера пина? Не по феншую...
     
  3. qwone

    qwone Гик

    не путайте int и const int . Первое занимает 2 байта а второе ничего не занимает потому что константа
     
  4. ZAZ-965

    ZAZ-965 Гуру

  5. qwone

    qwone Гик

    ZAZ-965 Есть такой термин Муха Аристотеля. http://scorcher.ru/art/science/methodology/aristotel2.php
    Стоит учесть, что казус с мухой - далеко не единственный у Аристотеля, и другие казусы не менее фантастичны из-за того, что часто Аристотель отдавал предпочтение логике прямому эксперименту

    Так что это тоже самое. Окройте среду и проверьте.
     
  6. ZAZ-965

    ZAZ-965 Гуру

    Подскажите как. Ардуина asm листинг не выдает, avr-objdump выдает слабочитаемую простыню.
     
  7. qwone

    qwone Гик

    Как измерить литр воды. Воду на весы не нальешь ведь, растечется. Так что взвешивают тару, а потом воду с тарой. Разница и есть вода. Так и здесь . Измеряешь количество израсходованых байт, а потом с const int. Контрольный вариант просто int.