Strona 1 z 1

Obcina liczbę kanałów ARDUINO MEGA

: pn sty 20, 2020 2:35 pm
autor: alankedzior
Pojawił się problem wcześniej wszystko działało, w programie mam 27 kanałów licząć od zera (0-26) z czego 7 to DS18B20
oraz 20 zdefiniowanych przycisków memset(btn,19, sizeof(btn));

po wgraniu obcina mi liczbę kanałów na serwerze do liczby zdefiniowanych przycisków, nie pomaga ustawienie termometrów na końcu, wcześcniej działało wszystko ok.

Podejrzewam, że winna leży po stronie zmiany biblioteki, w której linijce i co należy edytować, żeby zwiększyć przypisaną liczbę kanałów :P ?

Kod: Zaznacz cały

#include <SPI.h>
#include <Ethernet.h>
#include <SuplaDevice.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define BTN_COUNT 20
#define TEMPERATURE_PRECISION 9
#define SUPLADEVICE_CPP

OneWire oneWire(41);
DallasTemperature sensors(&oneWire);

DeviceAddress DS18B20_1 = { 0x28, 0xFF, 0xE6, 0x45, 0x60, 0x17, 0x4, 0x29 };       // termometr szafa ok 
DeviceAddress DS18B20_2 = {0x28, 0x2, 0x0, 0x7, 0x5E, 0x6B, 0x1, 0x5E};       // termometr kotłownia ok
DeviceAddress DS18B20_3 = { 0x28, 0xAA, 0xB2, 0xAE, 0x11, 0x13, 0x2, 0x19 };       // termometr garaż
DeviceAddress DS18B20_4 = { 0x28, 0x28, 0xA9, 0x79, 0x97, 0x19, 0x3, 0x1C };       // termometr korytarz
DeviceAddress DS18B20_5 = { 0x28, 0xFF, 0xB3, 0x27, 0xB4, 0x16, 0x5, 0xE4 };       // termometr Front ok
DeviceAddress DS18B20_6 = { 0x28, 0xFF, 0xEB, 0xA8, 0xB4, 0x16, 0x3, 0xD1 };       // termometr TARAS ok
DeviceAddress DS18B20_7 = { 0x28, 0x5F, 0xCA, 0x79, 0x97, 0x18, 0x3, 0x9A };       // termometr salon







// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {

    double t = -275;
    
    if ( sensors.getDeviceCount() > 0 )
      {
         sensors.requestTemperatures();
         switch(channelNumber)

          {
            case 0:
                   //  t = sensors.getTempCByIndex(DS18B20_1); 
                    t = sensors.getTempC(DS18B20_1); 
                    break;
            case 1:
                    t = sensors.getTempC(DS18B20_2);
                    break;
           
           case 2:
                    t = sensors.getTempC(DS18B20_3);
                    break;
                    
           case 3:
           
                    t = sensors.getTempC(DS18B20_4);
                    break;

           case 4:
                    t = sensors.getTempC(DS18B20_5);
                    break;          
             
           case 5:
                    t = sensors.getTempC(DS18B20_6);
                    break;             
           case 6:
                    t = sensors.getTempC(DS18B20_7);
                    break;  
             
             };
      };

    return t;  
}

typedef struct {
  int pin;
  int relay_pin;
  int channel;
  char last_val;
  unsigned long last_time;
} _btn_t;

_btn_t btn[BTN_COUNT];

void supla_timer() {
  char v;
  unsigned long now = millis();
  
  
  for(int a=0;a<BTN_COUNT;a++)
    if (btn[a].pin > 0) {
        v = digitalRead(btn[a].pin);
        if (v != btn[a].last_val && now - btn[a].last_time ) {
           btn[a].last_val = v;
           btn[a].last_time = now;
           if (v==0)
             {
                 if ( digitalRead(btn[a].relay_pin) > 0 ) {
                  SuplaDevice.relayOff(btn[a].channel);
                 } else {
                  SuplaDevice.relayOn(btn[a].channel, 0);
                 }        
             }
        }
  
    }
}

void supla_btn_init() {
  for(int a=0;a<BTN_COUNT;a++)
    if (btn[a].pin > 0) {
        pinMode(btn[a].pin, INPUT_PULLUP); 
        btn[a].last_val = digitalRead(btn[a].pin);
        btn[a].last_time = millis();
    }
}



void setup() {

  Serial.begin(9600);
  

  // Init DS18B20 library 
  sensors.begin();
  
  // Set temperature callback
  SuplaDevice.setTemperatureCallback(&get_temperature);
 
 
 
  // Replace the falowing GUID
  char GUID[SUPLA_GUID_SIZE] = {xxxxxxxx};
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid


  // Ethernet MAC address
  uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};

  


SuplaDevice.addRelay(2);                                     // kanal 7    lampa front k12 
SuplaDevice.addRelay(3);                                     // kanal 8    lampa taras  k11 
SuplaDevice.addRelay(4);                                     // kanal  9   lampa kotłownia k14
SuplaDevice.addRelay(5);                                     // kanal 10    kinkiety salon k15
SuplaDevice.addRelay(6);                                     // kanal 11    lampa piwnica k16
SuplaDevice.addRelay(7,true);                                // kanal 12   lampa płot k01
SuplaDevice.addRelay(8);                                     // kanal 13    kuchnia Led k17
SuplaDevice.addRelay(21);                                    // kanal 14    salon led k21
SuplaDevice.addRelay(11,true);                               // kanal 15   girlanda k02
SuplaDevice.addRelay(12);                                    // kanal 16    brama wjazd otworz kdc11
SuplaDevice.addRelay(13);                                    // kanal 17    brama wjazd zamknij  kdc12 
SuplaDevice.addRelay(14);                                    // kanal 18    akwarium k22
SuplaDevice.addRelay(15);                                    // kanal 19    brama wjazd 2 otworz 
SuplaDevice.addRelay(16);                                    // kanal 20    brama wjazd 2 zamknij kdc14
SuplaDevice.addRelay(17);                                    // kanal 21   gniazdo salon 1 (lampa)
SuplaDevice.addRelay(18);                                    // kanal 22   gniazdo salon 2 (choinka ) k24
SuplaDevice.addRelay(42);                                    // kanal 23   taras led k25
SuplaDevice.addRelay(28);                                    // kanal 24   brama garaz kdc22
SuplaDevice.addRelay(39);                                    // kanal 25   furtka kdc21
SuplaDevice.addRelay(40,true);                               // kanal 26   lampy zewnetrzne k03



SuplaDevice.addDS18B20Thermometer();                        // kanał 0 termometr  
SuplaDevice.addDS18B20Thermometer();                        // kanał 1 termometr 
SuplaDevice.addDS18B20Thermometer();                        // kanał 2 termometr  
SuplaDevice.addDS18B20Thermometer();                        // kanał 3 termometr 
SuplaDevice.addDS18B20Thermometer();                        // kanał 4 termometr 
SuplaDevice.addDS18B20Thermometer();                        // kanał 5 termometr 
SuplaDevice.addDS18B20Thermometer();                        // kanał 6 termometr 


                           




   
  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svr10.supla.org",  // SUPLA server address
                    xxxx,                // Location ID 
                    "xxxx");           // Location Password 


  
  memset(btn,19, sizeof(btn));
  
  btn[0].pin = 20;                       // przycisk front s2
  btn[0].relay_pin = 2;                 // przekaznik front k12   
  btn[0].channel = 8;                    // numer kanału
//  btn[0].ms =0;           //  if = 0 Bistable -- if > 0 Monostable for X ms
//  btn[0].mem =0;

  btn[1].pin = 19;                       // przycisk lampa taras  s1
  btn[1].relay_pin = 3;                 // przekaznik lampa taras  k11  
  btn[1].channel = 9;                    // numer kanału

  btn[2].pin = 43 ;                       // przycisk lampa kotłownia s18
  btn[2].relay_pin = 4;                 // przekaznik lampa kotłownia k14  
  btn[2].channel = 10;                    // numer kanału

   btn[3].pin = 22 ;                       // przycisk kinkiety salon s7
  btn[3].relay_pin = 5;                 // przekaznik kinkiety salon k15  
  btn[3].channel = 11;                    // numer kanału

 btn[4].pin = 44 ;                       // przycisk piwnica s17
  btn[4].relay_pin = 6;                 // przekaznik lampa piwnica k16  
  btn[4].channel = 12;                    // numer kanału

  btn[5].pin =9  ;                       // przycisk lampa płot s4
  btn[5].relay_pin = 7;                 // przekaznik lampa plot k01  
  btn[5].channel = 13;                    // numer kanału

    btn[6].pin =23  ;                       // przycisk kuchnia led s8
  btn[6].relay_pin = 8;                 // przekaznik kuchnia led k17  
  btn[6].channel = 14;                    // numer kanału

btn[7].pin =24  ;                       // przycisk salon led s9
  btn[7].relay_pin = 21;                 // przekaznik salon led  k21 
  btn[7].channel = 15;                    // numer kanału

  btn[8].pin =46  ;                       // przycisk girlanda s6
  btn[8].relay_pin = 11;                 // przekaznik girlanda k02
  btn[8].channel = 16;                    // numer kanału


   btn[9].pin =0  ;                       // przycisk brama 
  btn[9].relay_pin = 0;                 // przekaznik brama wirtualny
  btn[9].channel =17 ;                    // numer kanału


  btn[10].pin =0  ;                       // przycisk brama
  btn[10].relay_pin = 0;                 // przekaznik brama wirtualny
  btn[10].channel = 18;                    // numer kanału

btn[11].pin =29  ;                       // przycisk akwarium s11
  btn[11].relay_pin =14 ;                 // przekaznik akwarium k22
  btn[11].channel = 19;                    // numer kanału

   btn[12].pin =0  ;                       // przycisk brama 
  btn[12].relay_pin = 0;                 // przekaznik brama wirtualny
  btn[12].channel =20 ;                    // numer kanału


  btn[13].pin =0  ;                       // przycisk brama
  btn[13].relay_pin = 0;                 // przekaznik brama wirtualny
  btn[13].channel = 21;                    // numer kanału

   btn[14].pin =48  ;                       // przycisk gniazdo salon 1 (lampa)s12
  btn[14].relay_pin = 17;                 // przekaznik gniazdo salon 1(lampa) k23
  btn[14].channel = 22;                    // numer kanału

  btn[15].pin =47  ;                       // przycisk gniazdo salon 2 (choinka )s13
  btn[15].relay_pin = 18;                 // przekaznik gniazdo salon 2( choinka) k24
  btn[15].channel = 23;                    // numer kanału

    btn[16].pin =49  ;                       // przycisk taras led s14
  btn[16].relay_pin = 42;                 // przekaznik taras led k25
  btn[16].channel = 24;                    // numer kanału

  
    btn[17].pin =0  ;                       // przycisk brama garaz wirtualny
  btn[17].relay_pin = 0;                 // przekaznik brama garaz wirtualny
  btn[17].channel = 25;                    // numer kanału

btn[18].pin =45  ;                       // przycisk furtki 
  btn[18].relay_pin = 39;                 // przekaznik furtka kdc21
  btn[18].channel = 26;                    // numer kanału

  
btn[19].pin =25  ;                       // przycisk lampy zewnatrz s10 
  btn[19].relay_pin = 40;                 // przekaznik lampy zewnetrzne k03
  btn[19].channel = 27;                    // numer kanału



  
  SuplaDevice.setTimerFuncImpl(&supla_timer);
        supla_btn_init();
  
 
    
}

void loop() {
  SuplaDevice.iterate();
  

}