MAX6675 + симмистор. (РЕШЕНО)

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

  1. Scrypto

    Scrypto Нерд

    В общем нужно написать скетч, чтобы в зависимости от показаний датчика 6675, он изменял мощность галлогенок, управляемых симистором
    Код (C++):
    #include "max6675.h"

    int incomingByte = 0;  // for incoming serial data

    int AC_LOAD = 3;    // Output to Opto Triac pin
    volatile int dimming = 117;  // Dimming level (0-128)  0 = ON, 128 = OFF
    volatile double cels = 0;
     
    int thermoDO = 9;  //он же SO
    int thermoCS = 10;
    int thermoCLK = 11;  //он же SCK

    MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

    void setup() {
      Serial.begin(9600);

       pinMode(AC_LOAD, OUTPUT);      // Set the AC Load as output
      attachInterrupt(0, zero_crosss_int, RISING);  // Choose the zero cross interrupt # from the table above
        //активируем питание и землю

      Serial.println("MAX6675 test");
      //ждем стабилизации чипа MAX
      delay(500);
    }

    void zero_crosss_int()  // function to be fired at the zero crossing to dim the light
    {

      // Firing angle calculation :: 50Hz-> 10ms (1/2 Cycle)
      // (10000us - 10us) / 128 = 75 (Approx)
      int dimtime = (75*dimming);  
      delayMicroseconds(dimtime);    // Off cycle
      digitalWrite(AC_LOAD, HIGH);  // triac firing
      delayMicroseconds(10);        // triac On propogation delay
      digitalWrite(AC_LOAD, LOW);    // triac Off

    }

    void loop() {
      //Выводим показания в монитор порта
        Serial.println("C = ");
       cels = thermocouple.readCelsius();
     
       Serial.println(cels);
       if(cels < 200){
       dimming = 30;
       }
       }
    }
     
    В данном случае, показания термопары не меняются, и задаются единожды, при запуске, дальше просто дублируются. Как сделать, чтобы они менялись, что-то не могу понять. Судя по всему мешает прерывание, но без него не будет управляться симистор.
     
  2. Scrypto

    Scrypto Нерд

    Разобрался, забыл поставить задержку в loop, чтобы max6675 стабилизировался. )