Arduino + supla.org - początki

User avatar
pzygmunt
Posts: 19465
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Nie testowałem, ale może coś w stylu:

OneWire oneWire1(22);
OneWire oneWire2(24);
OneWire oneWire3(26);
OneWire oneWire4(28);

DallasTemperature sensor1(&oneWire1);
DallasTemperature sensor2(&oneWire2);
DallasTemperature sensor3(&oneWire3);
DallasTemperature sensor4(&oneWire4);

double get_temperature(int channelNumber, double last_val) {

double t = -275;
DallasTemperature *sensor = NULL;

switch(channelNumber) {
case 0:
sensor = &sensor1;
break;
case 1:
sensor = &sensor2;
break;
case 2:
sensor = &sensor2;
break;
case 3:
sensor = &sensor3;
break;
};

if ( sensor != NULL && sensor->getDeviceCount() > 0 )
{
sensor->requestTemperatures();
t = sensor->getTempCByIndex(0);
};

return t;
}


i później w setup()

zamiast
sensors.begin();


wstaw

sensor1.begin();
sensor2.begin();
sensor3.begin();
sensor4.begin();
Raku2008
Posts: 66
Joined: Sat Mar 19, 2016 4:38 pm

Post

pzygmunt wrote:2. 16 - takie ograniczenie jest ustawione w https://github.com/SUPLA/arduino/blob/m ... oto.h#L123 ale można to zwiększyć w zależności od dostępnej pamięci. Bez dodatkowych bibliotek spokojnie można zwiększyć do 128 i jeszcze zostanie trochę pamięci.

Jak zwiekszyc ta ilosc do 20szt?
User avatar
pzygmunt
Posts: 19465
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Raku2008
Posts: 66
Joined: Sat Mar 19, 2016 4:38 pm

Post

No wlasnie zmienilem na 20 ale arduino I tak nie łaczy sie z supla
User avatar
shimano73
Posts: 2068
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Post

Witam, potrzebuję odczytywać kilka temperatur na różnych gpio , bo na jednym to już potrafię :).
Zasugerowałem się pomocą Przemka ale niestety u mnie to nie działa.
U mnie to wygląda tak :

Code: Select all

// Setup a oneWire instance
OneWire oneWire_CO(22); // Deklaracja pinu 22 jako magistrala OneWire dla czujnika temperatury CO
OneWire oneWire_IN(24);// Deklaracja pinu 22 jako magistrala OneWire dla czujnika temperatury wewnętrznej
OneWire oneWire_OUT(26); // Deklaracja pinu 22 jako magistrala OneWire dla czujnika temperatury Zewnętrznej

// Pass oneWire reference to Dallas Temperature
DallasTemperature sensors_CO(&oneWire_CO);
DallasTemperature sensors_IN(&oneWire_IN);
DallasTemperature sensors_OUT(&oneWire_OUT);

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

    double t = -275;
    
    DallasTemperature *sensor = NULL;
    
    if ( sensors_CO.getDeviceCount() > 0 )    
      switch(channelNumber) {
        case 0: {
                  sensor = &sensors_CO;
                  Serial.print("Temp CO : ");
                  Serial.println(t,1);                             
                break;
      }
        case 1:{
                sensor = &sensors_IN;
                  Serial.print("Temp IN : ");
                  Serial.println(t,1);                             
                break;
        }
        case 2: {
                sensor = &sensors_OUT;
                  Serial.print("Temp OUT : ");
                  Serial.println(t,1);                             
                break;
        };
      }
if ( sensor != NULL && sensor->getDeviceCount() > 0 )
{
sensor->requestTemperatures();
t = sensor->getTempCByIndex(0);
};

    return t;  
}

void setup() {

  Serial.begin(115200);

  // Init DS18B20 library 
  sensors_CO.begin();
  sensors_IN.begin();
  sensors_OUT.begin();
  
   
  // Set temperature callback
  SuplaDevice.setTemperatureCallback(&get_temperature);

Na wszystkich kanałach pojawia się -275.

Jako że moje początki z Arduino zbiegły się z powstaniem Supli ;), nie rozumiem zapisu

Code: Select all

sensor->requestTemperatures();
t = sensor->getTempCByIndex(0);
Co oznacza ta "strzałka" ?
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
shimano73
Posts: 2068
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Post

OK, poprawiłem

Code: Select all

double get_temperature(int channelNumber, double last_val) {

    double t = -275;
    
    DallasTemperature *sensor = NULL;
    
      
      switch(channelNumber) {
        case 0: {
                sensor = &sensors_CO;                                         
                break;
      }
        case 1:{
                sensor = &sensors_IN;                  
                break;
        }
        case 2: {
                sensor = &sensors_OUT;
                break;
        };
      }
      if ( sensor != NULL && sensor->getDeviceCount() > 0 )
      {
          sensor->requestTemperatures();
          t = sensor->getTempCByIndex(0);
      };

    return t;  
}

działa , ale nadal nie wiem co oznaczas zapis :

Code: Select all

if ( sensor != NULL && sensor->getDeviceCount() > 0 )
{
sensor->requestTemperatures();
t = sensor->getTempCByIndex(0);
};
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
byniom
Posts: 686
Joined: Sat Jan 07, 2017 1:17 pm

Post

Podzielisz się całym kodem ?
User avatar
shimano73
Posts: 2068
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Post

Czemu nie, trochę to trwało ale się udało :)
You do not have the required permissions to view the files attached to this post.
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
byniom
Posts: 686
Joined: Sat Jan 07, 2017 1:17 pm

Post

Pięknie dziękuję :) . Mam jeszcze pytanie czy ten program pójdzie na nodemcu ? czy tylko na arduino Mega ?
User avatar
shimano73
Posts: 2068
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Post

Napewno nie bezpośrednio , należy go dostosować do nodemcu (każdego esp).
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)

Return to “Pomoc”