Skocz do zawartości

Wiktor2019

Użytkownicy
  • Zawartość

    109
  • Rejestracja

  • Ostatnio

1 obserwujący

O Wiktor2019

  • Urodziny 21.04.2005

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Małopolska

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

Wiktor2019's Achievements

5/10

5/10 (5/10)

44

Reputacja

  1. @Karrol Super artykuł ale czy wiesz może jak zrobić na Firebase aktywny wykres danych np. z ostatnich 7 dni? (chodzi o to by dane były wyświetlane na hostowanej stronie na wykresie)
  2. Posiadam wyświetlacz TFT do arduino (kontroler ili9486, biblioteka MCUFRIEND_kb) z arduino działa bardzo dobrze, lecz ja chcę go użyć z esp32. Używam wyświetlacz wraz z wemos d1 uno esp32. Wyświetlanie grafiki działa dobrze lecz gdy chce użyć ekranu dotykowego to odczytuje dotyk lecz nie reaguje na klawisze, które są wyświetlane na ekranie (na arduino działają). A by odczytywało dotyk i dobrze działał wyświetlacz to połączyłem kablami tak jak na poniższym obrazku (bez tego zielonego kabla nie odczytuje dotyku). Dodam też, że kalibracja ekranu działa dobrze poza jednym rogiem ekranu. Poniżej kod jaki wgrywam do esp różni się od tego co wgrywam do arduino tylko pinami od dotyku. #include <MCUFRIEND_kbv.h> MCUFRIEND_kbv tft; // hard-wired for UNO shields anyway. #include <TouchScreen.h> #include <stdint.h> #include "TouchScreen.h" char *name = "Please Calibrate."; //edit name of shield const int XP=27,XM=15,YP=4,YM=14; //320x480 ID=0x1581 const int TS_LEFT=925,TS_RT=85,TS_TOP=949,TS_BOT=72; TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); TSPoint tp; #define MINPRESSURE 200 #define MAXPRESSURE 1000 int16_t BOXSIZE; int16_t PENRADIUS = 1; uint16_t ID, oldcolor, currentcolor; uint8_t Orientation = 0; //PORTRAIT // Assign human-readable names to some common 16-bit color values: #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF void show_Serial(void) { Serial.println(F("Most Touch Screens use pins 6, 7, A1, A2")); Serial.println(F("But they can be in ANY order")); Serial.println(F("e.g. right to left or bottom to top")); Serial.println(F("or wrong direction")); Serial.println(F("Edit name and calibration statements\n")); Serial.println(name); Serial.print(F("ID=0x")); Serial.println(ID, HEX); Serial.println("Screen is " + String(tft.width()) + "x" + String(tft.height())); Serial.println("Calibration is: "); Serial.println("LEFT = " + String(TS_LEFT) + " RT = " + String(TS_RT)); Serial.println("TOP = " + String(TS_TOP) + " BOT = " + String(TS_BOT)); Serial.println("Wiring is always PORTRAIT"); Serial.println("YP=" + String(YP) + " XM=" + String(XM)); Serial.println("YM=" + String(YM) + " XP=" + String(XP)); } void show_tft(void) { tft.setCursor(0, 0); tft.setTextSize(1); tft.print(F("ID=0x")); tft.println(ID, HEX); tft.println("Screen is " + String(tft.width()) + "x" + String(tft.height())); tft.println(""); tft.setTextSize(2); tft.println(name); tft.setTextSize(1); tft.println("PORTRAIT Values:"); tft.println("LEFT = " + String(TS_LEFT) + " RT = " + String(TS_RT)); tft.println("TOP = " + String(TS_TOP) + " BOT = " + String(TS_BOT)); tft.println("\nWiring is: "); tft.println("YP=" + String(YP) + " XM=" + String(XM)); tft.println("YM=" + String(YM) + " XP=" + String(XP)); tft.setTextSize(2); tft.setTextColor(RED); tft.setCursor((tft.width() - 48) / 2, (tft.height() * 2) / 4); tft.print("EXIT"); tft.setTextColor(YELLOW, BLACK); tft.setCursor(0, (tft.height() * 6) / 8); tft.print("Touch screen for loc"); while (1) { tp = ts.getPoint(); pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); if (tp.z < MINPRESSURE || tp.z > MAXPRESSURE) continue; if (tp.x > 450 && tp.x < 570 && tp.y > 450 && tp.y < 570) break; tft.setCursor(0, (tft.height() * 3) / 4); tft.print("tp.x=" + String(tp.x) + " tp.y=" + String(tp.y) + " "); } } void setup(void) { uint16_t tmp; tft.reset(); ID = tft.readID(); tft.begin(ID); Serial.begin(9600); show_Serial(); tft.setRotation(Orientation); tft.fillScreen(BLACK); show_tft(); BOXSIZE = tft.width() / 6; tft.fillScreen(BLACK); tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED); tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW); tft.fillRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, GREEN); tft.fillRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, CYAN); tft.fillRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, BLUE); tft.fillRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA); tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE); currentcolor = RED; delay(1000); } void loop() { uint16_t xpos, ypos; //screen coordinates tp = ts.getPoint(); //tp.x, tp.y are ADC values // if sharing pins, you'll need to fix the directions of the touchscreen pins pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); // we have some minimum pressure we consider 'valid' // pressure of 0 means no pressing! if (tp.z > MINPRESSURE && tp.z < MAXPRESSURE) { // most mcufriend have touch (with icons) that extends below the TFT // screens without icons need to reserve a space for "erase" // scale the ADC values from ts.getPoint() to screen values e.g. 0-239 // // Calibration is true for PORTRAIT. tp.y is always long dimension // map to your current pixel orientation switch (Orientation) { case 0: xpos = map(tp.x, TS_LEFT, TS_RT, 0, tft.width()); ypos = map(tp.y, TS_TOP, TS_BOT, 0, tft.height()); break; case 1: xpos = map(tp.y, TS_TOP, TS_BOT, 0, tft.width()); ypos = map(tp.x, TS_RT, TS_LEFT, 0, tft.height()); break; case 2: xpos = map(tp.x, TS_RT, TS_LEFT, 0, tft.width()); ypos = map(tp.y, TS_BOT, TS_TOP, 0, tft.height()); break; case 3: xpos = map(tp.y, TS_BOT, TS_TOP, 0, tft.width()); ypos = map(tp.x, TS_LEFT, TS_RT, 0, tft.height()); break; } // are we in top color box area ? if (ypos < BOXSIZE) { //draw white border on selected color box oldcolor = currentcolor; if (xpos < BOXSIZE) { currentcolor = RED; tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 2) { currentcolor = YELLOW; tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 3) { currentcolor = GREEN; tft.drawRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 4) { currentcolor = CYAN; tft.drawRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 5) { currentcolor = BLUE; tft.drawRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 6) { currentcolor = MAGENTA; tft.drawRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, WHITE); } if (oldcolor != currentcolor) { //rub out the previous white border if (oldcolor == RED) tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED); if (oldcolor == YELLOW) tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW); if (oldcolor == GREEN) tft.fillRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, GREEN); if (oldcolor == CYAN) tft.fillRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, CYAN); if (oldcolor == BLUE) tft.fillRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, BLUE); if (oldcolor == MAGENTA) tft.fillRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA); } } // are we in drawing area ? if (((ypos - PENRADIUS) > BOXSIZE) && ((ypos + PENRADIUS) < tft.height())) { tft.fillCircle(xpos, ypos, PENRADIUS, currentcolor); } // are we in erase area ? // Plain Touch panels use bottom 10 pixels e.g. > h - 10 // Touch panels with icon area e.g. > h - 0 if (ypos > tft.height() - 10) { // press the bottom of the screen to erase tft.fillRect(0, BOXSIZE, tft.width(), tft.height() - BOXSIZE, BLACK); } } }
  3. Ja posiadam Ender 3 V2 według mnie nie trzeba w nim nic modyfikować choć ostatnio zamontowałem w nim Bl-Touch ale to ze względu, że dużo czasu zajmowało mi poziomowanie stołu (warto dołożyć na ali 40zł) na oprogramowaniu od SMITH3D działa bez problemu a aktualizacja oprogramowania to tylko włożenie karty pamięci do drukarki. Drukowałem na nim z prędkością 110mm/s i wydruk wyszedł idealnie. Konstrukcja jest sztywna i prosta więc myślę, że z najwyższą prędkością też poradzi sobie bez problemu. Drukuję z materiału PET-G od Fiberlogy nie mam żadnych problemów (może to oczywiste) ale trzeba pamiętać, żeby co kilkanaście godzin np. co 50 godzin przeczyścić dyszę ponieważ wydruk zaczyna się rozwarstwiać. Na stole jest naklejka zwiększająca athlezję i przy idealnie wypoziomowanym stole wydruk nigdy mi się nie oderwał nawet przy małej powierzchni styku. Drukarka jest cicha i nie słychać w niej ruchów silników tylko wentylatory . Jej jedna tymczasową wadę jest to, że nie ma jej w Cura i choć działa na profilu Ender 3 Pro (tak jej używam) to nie działa w niej pauza na wysokości ale na Internecie są różne propozycję żeby zadziałało np. przy ustawianiu pauzy zmienić metodę z marlin na inne, które są do wyboru.
  4. Według mnie można ukryć te "kuleczki" ponieważ nigdy nie zwracałem na nie uwagi i nawet nie zwróciłem uwagi na to, że użytkownicy mają ich inną ilość. Sądzę, że ważniejsze są punkty reputacji a pod nimi wyświetla się też liczba postów.
  5. To w takim razie sprawdź czy masz dobrze podpięte kable a jak masz możliwość to sprawdź na drugim arduino być może coś z arduino jest nie tak. Spróbuj podłączyć wyświetlacz pod piny A4-SDA, A5-SCL
  6. To w takim razie spróbuj ten kod i popatrz czego brakowało w twoim kodzie (jak wziąłeś go z przykładów to w przykładach nie ma właśnie tej funkcji i kod z przykładów bez tej funkcji u mnie też nie działa) #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 16, 2); void setup() { Wire.begin(); lcd.begin(16, 2); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("hello, world!"); delay(1500); lcd.clear(); } void loop() { lcd.setCursor(0, 0); lcd.print("ekran 1"); delay(1500); lcd.clear(); lcd.setCursor(0, 0); lcd.print("ekran 2"); delay(1500); lcd.clear(); }
  7. Pobierz i zainstaluj bibliotekę ze strony poniżej. Jak masz ją zainstalowaną to wyskoczy ci komunikat że ta biblioteka już istnieje. https://www.arduinolibraries.info/libraries/liquid-crystal-i2-c
  8. Musisz zainstalować bibliotekę do obsługi LiquidCrystal I2C możesz pobrać bibliotekę z tej strony. Jak chcesz podłączyć jakieś urządzenie/czujnik/moduł do arduino to pamiętaj że musisz pobrać do tego urządzenia/czujnika/modułu bibliotekę która będzie go obsługiwać.
  9. Pokaż kod jaki wgrywasz do arduino bo nie wiemy co tam wgrywasz. Sprawdź też podłączenie przewodów do arduino i czy wszystko styka. Spróbuj wyregulować jasność wyświetlacza potencjometrem na płytce za wyświetlaczem.
  10. Dokładnie o 500mA mi chodziło zapewne z rozpędu napisałem źle. Jeśli elektrozamek pobiera tylko 100mA to może się sprawdzić. Reszta już zależy od autora jak chce wykonać mechanizm i całą konstrukcję.
  11. Widocznie nie czytałem dokładnie. To jeśli serwo pobiera prąd ciągle to może zastosować BC517 i włączać serwo chwilowo? Nie znalazłem ile pobiera ten elektromagnes co wysłałeś ale patrząc na podobne to pobiera min 500mah więc nie będzie pracowało na baterii tak długo jak serwo. Oraz raczej z serwa prościej zrobić klapkę 'na zawiasach'?
  12. Lolin32 to faktycznie potężna płytka teraz patrzę na alle i widzę, że teraz kosztuje 36zł a ja płaciłem 1 miesiąc temu 22zł. Jak nie płytka Lolin32 to może Wemos D1 lub Nodemcu? Co do mechanizmu podający karmę to myślę że serwo będzie idealne nie pobiera dużo prądu i można wybrać pozycję w której będzie się wysypywać karma np. na 2s.
  13. Nie wiem czy dobrze podpowiem ale jeżeli układ ma być zasilany z baterii i układ 'dozowania pokarmu' nie będzie pobierał dużo prądu (może serwo) to polecę płytkę Lolin32 zasilanie 3,7-4,2V. Zasilanie modułu wi-fi proponuje podłączyć do ładowarki (np. taka) i bateria (np. taka) będzie zawsze naładowane a w razie braku prądu nadal można nakarmić zwierzę. Jeśli serwo nie będzie działało na 3,7V to proponuje przetwornicę step-up.
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.