[PORADNIK] Arduino IDE

dogu18
Posty: 257
Rejestracja: czw paź 11, 2018 8:35 pm

lesny8 pisze: ndz mar 10, 2019 3:32 pm viewtopic.php?p=33715#p33715
Przeczytaj sobie cały watek albo chociaż jedna stronę przed, to Ci się wyjaśni.
dzięki wielkie teraz wszystko funkcjonuje tak jak chciałem:)

przydał by się jeszcze kanał "bez niczego" do RSSI oraz kanał do czujnika nasłonecznienia...
Pozdrawiam
Grzegorz Labudda
Awatar użytkownika
milion81
Posty: 194
Rejestracja: pn maja 07, 2018 8:34 am

Witam, chce zrobić odczyt z 10 DSów, każdy na osobnym pinie bo na jednym są zakłamania (opóźnienia) w odczycie, czy można prosić o gotowy kod ;)
cino111
Posty: 714
Rejestracja: pn maja 07, 2018 8:00 pm

milion81 pisze: czw kwie 11, 2019 11:26 am Witam, chce zrobić odczyt z 10 DSów, każdy na osobnym pinie bo na jednym są zakłamania (opóźnienia) w odczycie, czy można prosić o gotowy kod ;)
Przetestuj to:: Masz 10DS na 10 GPIO, Ściemniacz RGB i kilka przekaźników. Oczywiście na Arduino Mega.

Kod: Zaznacz cały

#include <SPI.h>
#include <Ethernet.h>
#include <SuplaDevice.h>
#include <OneWire.h>
#include <DallasTemperature.h> // Biblioteki


#define ONE_WIRE_1 32 // Definicje pinów wejscia jako 32, 41 ...
#define ONE_WIRE_2 33
#define ONE_WIRE_3 34 
#define ONE_WIRE_4 35
#define ONE_WIRE_5 36
#define ONE_WIRE_6 37 
#define ONE_WIRE_7 38
#define ONE_WIRE_8 39
#define ONE_WIRE_9 40 
#define ONE_WIRE_10 41

OneWire oneWire_temp1(ONE_WIRE_1); 
OneWire oneWire_temp2(ONE_WIRE_2);
OneWire oneWire_temp3(ONE_WIRE_3); 
OneWire oneWire_temp4(ONE_WIRE_4);
OneWire oneWire_temp5(ONE_WIRE_5); 
OneWire oneWire_temp6(ONE_WIRE_6);
OneWire oneWire_temp7(ONE_WIRE_7); 
OneWire oneWire_temp8(ONE_WIRE_8);
OneWire oneWire_temp9(ONE_WIRE_9);
OneWire oneWire_temp10(ONE_WIRE_10);

DallasTemperature temp1(&oneWire_temp1);
DallasTemperature temp2(&oneWire_temp2);
DallasTemperature temp3(&oneWire_temp3);
DallasTemperature temp4(&oneWire_temp4);
DallasTemperature temp5(&oneWire_temp5);
DallasTemperature temp6(&oneWire_temp6);
DallasTemperature temp7(&oneWire_temp7);
DallasTemperature temp8(&oneWire_temp8);
DallasTemperature temp9(&oneWire_temp9);
DallasTemperature temp10(&oneWire_temp10);




 #define RED_PIN    44
 #define GREEN_PIN  45
 #define BLUE_PIN   46
 #define BRIGHTNESS_PIN        7
 #define COLOR_BRIGHTNESS_PIN  8

 unsigned char _red = 0;
 unsigned char _green = 255;
 unsigned char _blue = 0;
 unsigned char _color_brightness = 0;
 unsigned char _brightness = 0;

void get_rgbw_value(int channelNumber, unsigned char *red, unsigned char *green, unsigned char *blue, unsigned char *color_brightness, unsigned char *brightness) {

  *brightness = _brightness;
  *color_brightness= _color_brightness;

  *red = _red;
  *green = _green;
  *blue = _blue;

}

void set_rgbw() {
    
    analogWrite(BRIGHTNESS_PIN, (_brightness * 255) / 100);
    analogWrite(COLOR_BRIGHTNESS_PIN, (_color_brightness * 255) / 100);
    analogWrite(RED_PIN, _red);
    analogWrite(GREEN_PIN, _green);
    analogWrite(BLUE_PIN, _blue);
}

void set_rgbw_value(int channelNumber, unsigned char red, unsigned char green, unsigned char blue, unsigned char color_brightness, unsigned char brightness) {

    _brightness = brightness;
    _color_brightness= color_brightness;
  
    _red = red;
    _green = green;
    _blue = blue;  
    
    set_rgbw();
  
}


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

    double t = -275;
          switch(channelNumber)
         {

           case 1:
         temp1.requestTemperatures();
         t = temp1.getTempCByIndex(0);
        Serial.println(t);
                    break;
           case 2:
         temp2.requestTemperatures();
         t = temp2.getTempCByIndex(0);
        Serial.println(t);
                    break;
          case 3:
         temp3.requestTemperatures();
         t = temp3.getTempCByIndex(0);
        Serial.println(t);
                    break;
           case 4:
         temp4.requestTemperatures();
         t = temp4.getTempCByIndex(0);
        Serial.println(t);
                    break;
          case 5:
         temp5.requestTemperatures();
         t = temp5.getTempCByIndex(0);
        Serial.println(t);
                    break;
          case 6:
         temp6.requestTemperatures();
         t = temp6.getTempCByIndex(0);
        Serial.println(t);
                    break;
          case 7:
         temp7.requestTemperatures();
         t = temp7.getTempCByIndex(0);
        Serial.println(t);
                    break;
          case 8:
         temp8.requestTemperatures();
         t = temp8.getTempCByIndex(0);
        Serial.println(t);
                    break;
          case 9:
         temp9.requestTemperatures();
         t = temp9.getTempCByIndex(0);
        Serial.println(t);
                    break;
          case 10:
         temp10.requestTemperatures();
         t = temp10.getTempCByIndex(0);
        Serial.println(t);
                    break;
                    }
         
    return t;  
}


void setup() {

  Serial.begin(9600);

  set_rgbw();
  
  // Set RGBW callbacks
  SuplaDevice.setRGBWCallbacks(&get_rgbw_value, &set_rgbw_value);


    // Inicjalizacja DS18B20
  temp1.begin();
  temp2.begin();
  temp3.begin();
  temp4.begin();
  temp5.begin();
  temp6.begin();
  temp7.begin();
  temp8.begin();
  temp9.begin();
  temp10.begin();
  SuplaDevice.setTemperatureCallback(&get_temperature);


  // Podmień poniższy GUID
  char GUID[SUPLA_GUID_SIZE] = {........................................................................................};
  // z tym, który odczytasz pod adresem https://www.supla.org/arduino/get-guid


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

  /*
   * Jeżeli urządzenie było już wcześniej zarejestrowane na  cloud.supla.org,
   * a chcesz zniemić kolejność lub ilość kanałów,
   * to musisz wcześniej usunąć to urządzenie z cloud.supla.org.
   * W innym przypadku otrzymasz błąd konfliktu kanałów "Channel conflict!".
   */
    
  //KANAŁ0 - Kontroler RGB i ściemniacz (RGBW)
  SuplaDevice.addRgbControllerAndDimmer();    

  // CHANNEL1,...10 DS
  SuplaDevice.addDS18B20Thermometer(); 
  SuplaDevice.addDS18B20Thermometer();
  SuplaDevice.addDS18B20Thermometer(); 
  SuplaDevice.addDS18B20Thermometer();
  SuplaDevice.addDS18B20Thermometer(); 
  SuplaDevice.addDS18B20Thermometer();
  SuplaDevice.addDS18B20Thermometer(); 
  SuplaDevice.addDS18B20Thermometer();
  SuplaDevice.addDS18B20Thermometer(); 
  SuplaDevice.addDS18B20Thermometer();
  
  // CHANNEL11...18 - RELAY
  SuplaDevice.addRelay(22, true);           // Pompa grzejniki    
  SuplaDevice.addRelay(23, true);           // Pompa podłogówka
  SuplaDevice.addRelay(24, true);           // Pompa CWU
  SuplaDevice.addRelay(25, true);           // 
  SuplaDevice.addRelay(26, true);           // 
  SuplaDevice.addRelay(27, true);           // 
  SuplaDevice.addRelay(28, true);           // 
  SuplaDevice.addRelay(29, true);           // 
  /*
   * SuplaDevice - inicjalizacja.
   * Adres serwera, identyfikator lokalizacji i hasło lokalizacji odczytasz z https://cloud.supla.org 
   * Jeżeli nie masz jeszcze konta możesz je założyć pod adresem https://cloud.supla.org/account/create
   * SUPLA i SUPLA CLOUD są bezpłatne
   * 
   */

  SuplaDevice.begin(GUID,              // Globalny unikalny identyfikator urządzenia
                    mac,               // Adres MAC
                    "192.168.1.46",  // Adres serwera SUPLA
                    1,                 // Identyfikator lokalizacji
                    "xxxx");               // Hasło lokalizacji
    
}

void loop() {
  SuplaDevice.iterate();
}
Awatar użytkownika
milion81
Posty: 194
Rejestracja: pn maja 07, 2018 8:34 am

Dziękuję pięknie, soft wgrany. Śmiga aż miło. Po pierwszych obserwacjach DSy na osobnych pinach super i jak narazie żadnych - 127.
wrobel111
Posty: 62
Rejestracja: wt cze 05, 2018 6:13 pm

Witam, robił ktoś z was może projekt w arduino IDE rozbijając kod na kilka plików? Za nic nie chce mi to wyjść poprawnie, jak tworzę pliki nagłówkowe .h i tam dam kod (czyli niepoprawnie programistycznie) to działa a jak dodam pliki .cpp to mi się wysypuje. Ma ktos może gotowy projekt i chce się podzielić. Przeanalizuję go i może mi się uda zrobić przez to poprawnie u siebie.
cino111
Posty: 714
Rejestracja: pn maja 07, 2018 8:00 pm

W Arduino Ide tworzysz tylko jeden plik na podstawie bibliotek. Tak jest prawidłowo.
wrobel111
Posty: 62
Rejestracja: wt cze 05, 2018 6:13 pm

Czyli nie idzie sobie tego sensownie rozbić na kilka plików?
Jestem w trakcie pisania softu do termostatu na wemos-a z lcd oraz wykorzystującego linki bezpośrednie. Uzbierało się trochę tego kodu i chciałem dla czytelności go podzielić na kilka plików ( od obsługi wyświetlacza, linków, termostatu itp.)

Chyba że każdy plik będę tworzył jak bibliotekę.
Czy ktoś ma inny pomysł?
Awatar użytkownika
Espablo
Posty: 1754
Rejestracja: śr cze 29, 2016 5:04 pm
Lokalizacja: Oświęcim
Kontakt:

Ja mam rozbite na kilka plików. Zobacz w plikach jakie zamieściłem w tym wątku.
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
wrobel111
Posty: 62
Rejestracja: wt cze 05, 2018 6:13 pm

Espablo pisze: czw maja 02, 2019 6:13 pm Ja mam rozbite na kilka plików. Zobacz w plikach jakie zamieściłem w tym wątku.
Rozumiem że chodzi Ci o pliki do primary GUI.
Dzięki wielkie, to teraz idę walczyć dalej
Awatar użytkownika
Espablo
Posty: 1754
Rejestracja: śr cze 29, 2016 5:04 pm
Lokalizacja: Oświęcim
Kontakt:

Tak Primary GUI. Tu jest kilka plików. Też nie podoba mi się trzymanie wszystkiego w jednym pliku.
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
ODPOWIEDZ

Wróć do „FAQ / Jak to zrobić”