Skocz do zawartości

yersey

Użytkownicy
  • Zawartość

    8
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O yersey

  • Ranga
    2/10
  1. @Treker Zrobiłem tak jak mówiłeś i wszystko działa jak należy, nawet kod bardziej czytelny. Jeszcze raz dzięki za pomoc
  2. @Treker Będzie służyć do monitorowania głównie temperatury w tunelach foliowych (wcześniej trzeba było wstawać w nocy co kilka godzin, bo podajnik węgla potrafił się zaciąć, a jak temperatura by spadła to rip). Teraz wystarczy, że w którymś tunelu spadnie temperatura to w domu włączy się syrena. Mogę też sprawdzać temperaturę na wykresach. Nie jest to pewnie idealne, ale i tak jestem z siebie dumny i przy okazji nauczyłem się masę rzeczy https://github.com/yersey/arduino-modbus-weather-station
  3. @Treker Gdy zmieniam na int16_t to wywala błąd. https://github.com/smarmengol/Modbus-Master-Slave-for-Arduino
  4. @Treker Biblioteka narzuca taki typ, ale to już nie problem, dodam po prostu kolejny element do tablicy oznaczający "minusowość" temperatury. Najważniejsze, że w końcu działa. Bardzo mi pomogłeś, dzięki
  5. Wszystko działa dobrze, ale gdy temperatura spadnie poniżej 0 to pokazuje jakiś dziwny odczyt. Siedzę nad tym już drugi dzień i nie wiem o co chodzi. Używam arduino nano. Z góry dziękuję za pomoc #include <ModbusRtu.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #define SLAVE_ID 1 #define BUTTON_PIN 7 #define RS_PIN 5 #define DS_PIN 10 #define SUN_PIN A1 #define TEMP_REG 0 #define SUN_REG 1 uint16_t au16data[9] = { 9999, 9999, 2, 3, 2018, 11, 16, 8, 7}; Modbus slave(SLAVE_ID, 0, RS_PIN); OneWire oneWire(DS_PIN); DallasTemperature sensors(&oneWire); DeviceAddress ds18b20 = { 0x28, 0x90, 0x63, 0x45, 0x92, 0x06, 0x02, 0xE0 }; //1 //DeviceAddress ds18b20 = { 0x28, 0x68, 0xA6, 0x45, 0x92, 0x03, 0x02, 0x3C }; //2 //DeviceAddress ds18b20 = { 0x28, 0x12, 0xC6, 0x45, 0x92, 0x08, 0x02, 0x59 }; //3 LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); int temperature = 9999; unsigned long getTempTime = 0; unsigned long lastUpdate = 0; unsigned long buttonTime = 0; int buttonHoldTime = 0; byte sun = 0; bool lcdLight = true; void setup() { sensors.begin(); slave.begin( 9600 ); // baud-rate at 9600 lcd.begin(16,2); pinMode(BUTTON_PIN, INPUT); } void loop() { temperature = readTemp(); if(temperature != NULL || temperature < 200) au16data[TEMP_REG] = temperature; sun = readSun(); if(sun != NULL) au16data[SUN_REG] = sun; slave.poll(au16data, 16); if(millis()-lastUpdate >= 1500UL) { lcd.clear(); printTime(); lcd.setCursor(0, 1); printPage0(); lastUpdate = millis(); } if(digitalRead(BUTTON_PIN) == HIGH){ if(buttonTime == 0) buttonTime = millis(); buttonHoldTime += millis()-buttonTime; buttonTime = millis(); } else{ if(buttonHoldTime > 750){ if(lcdLight == true) lcdLight = false; else lcdLight = true; } else if(buttonHoldTime < 500 && buttonHoldTime > 50) ; buttonHoldTime = 0; buttonTime = 0; } if(lcdLight == true) lcd.backlight(); else lcd.noBacklight(); ////////////////////////////////////// } int readTemp(){ if(millis()-getTempTime >= 1000UL){ sensors.requestTemperatures(); getTempTime = millis(); return sensors.getTempC(ds18b20)*10; } else return temperature; } byte readSun(){ return map(analogRead(SUN_PIN), 0, 1023, 0, 100); } void printTime(){ if(au16data[7] < 10) lcd.print(0); lcd.print(au16data[7]); lcd.print(":"); if(au16data[8] < 10) lcd.print(0); lcd.print(au16data[8]); lcd.print(" "); lcd.print(au16data[6]); lcd.print("."); lcd.print(au16data[5]); lcd.print("."); lcd.print(au16data[4]); } void printPage0(){ lcd.print("T:"); lcd.print(au16data[TEMP_REG]/10); lcd.print("."); lcd.print(au16data[TEMP_REG]-au16data[TEMP_REG]/10*10); lcd.print("*C"); lcd.print(" "); lcd.print("SUN:"); lcd.print(au16data[SUN_REG]); lcd.print("%"); }
  6. Poszperałem o tym w google i rozwiązaniem okazało się użycie zmodyfikowanej biblioteki, u8g2. Dzięki za pomoc
  7. Czy możliwe jest użycie tego wyświetlacza z tym modułem? Podłączyłem SCK-D5, MOSI-D7, CS-D8, w kodzie zmieniłem na: U8GLIBST7920128X64 u8g(14, 13, 15, U8GPINNONE); ale nic się nie wyświetla. Na Arduino UNO wszystko śmiga #include "U8glib.h" U8GLIB_ST7920_128X64 u8g(14, 13, 15, U8G_PIN_NONE); //SPI int pos = 10; void setup() { if ( u8g.getMode() == U8G_MODE_R3G3B2 ) { u8g.setColorIndex(255); // white } else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) { u8g.setColorIndex(3); // max intensity } else if ( u8g.getMode() == U8G_MODE_BW ) { u8g.setColorIndex(1); // pixel on } else if ( u8g.getMode() == U8G_MODE_HICOLOR ) { u8g.setHiColorByRGB(255,255,255); } } void loop() { u8g.firstPage(); do { //u8g.setFont(u8g_font_unifont); u8g.setFont(u8g_font_osb21); u8g.drawStr( pos, 22, "Yersey"); } while( u8g.nextPage() ); if(pos >= 100) pos -= 90; else pos++; }
×
×
  • Utwórz nowe...