Skocz do zawartości

Rak_Rakoski

Użytkownicy
  • Zawartość

    26
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O Rak_Rakoski

  • Ranga
    3/10

Ostatnio na profilu byli

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

  1. Chcę wykonać moduł monitora (Loggera) służący do zapisu parametrów lotu pod czas oblotów samolotów rc, wykorzystując Arduino UNO, moduł gps neo-6m i bibliotekę TinyGps++. Napisałem kod który podaje błędne odczyty wysokości i chyba też prędkości, chcę mierzyć wysokość od miejsca startu. Moja lokalizacja jest na wysokości ok. 41m n.p.m. Gps pokazuje mi wysokość ok. 90m n.p.m. Ale nie mogę uzyskać poprawnego pomiaru wysokości. W sieci nie znalazłem informacji na temat poprawności mojego kodu. Proszę o pomoc w zakresie poprawności kodu lub ewentualne inne rozwiązanie tego problemu. #include <SPI.h> #include <Wire.h> #include <SD.h> #include <OneWire.h> #include <DallasTemperature.h> #include <TinyGPS++.h> #include <SoftwareSerial.h> const byte address[1][8] PROGMEM = {0x28}; OneWire oneWire(A1); DallasTemperature sensors(&oneWire); File Dane; static const int RXPin = 9, TXPin = 10; static const uint32_t GPSBaud = 9600; // The TinyGPS++ object TinyGPSPlus gps; // The serial connection to the GPS device SoftwareSerial ss(RXPin, TXPin); unsigned long aktualnyCzas = 0; unsigned long zapamietanyCzas = 0; unsigned long roznicaCzasu = 0; unsigned long aktualnyCzas1 = 0; unsigned long zapamietanyCzas1 = 0; unsigned long roznicaCzasu1 = 0; int S = 0; int M = 0; int H = 0; int i = 0; int z = 0; String RTY = ""; float tempMax = 0; float wys_npmMax = 0; float wysMax = 0; float wys = 0; float baza = 0; float predMax = 0; void setup() { ss.begin(GPSBaud); SD.begin(4); pinMode(7, OUTPUT); // Dioda informująca o zapisywaniu na kartę pinMode(A2, OUTPUT); // Dioda informująca o zlapaniu pozycji sensors.begin(); digitalWrite(A2, LOW); } void loop() { while (ss.available() > 0) if (gps.encode(ss.read())) char sz[32]; float temp = sensors.getTempCByIndex(0); // Temperatura double wysnpm = gps.altitude.meters(); // Wysokosć double pred = gps.speed.kmph(); // Prędkość double X = gps.location.lat(); double Y = gps.location.lng(); sensors.requestTemperatures(); if (z == 0 && gps.date.isValid() && gps.time.isValid()) { Dane = SD.open("Dane.txt", FILE_WRITE); printDateTime(gps.date, gps.time); Dane.println("Czas lotu (HH:MM:SS); Prędkość (Kmh); Wysokość (m); temperatura silnika (*C);"); Dane.close(); z++; } //Złożenie pakietu informacji do zapisu na sd RTY = String(H) + ":" + String(M) + ":" + String(S) + "; " + pred + "; " + wys + "; " + temp + "; " + baza + "; " + wysnpm + "; " + X + "; " + Y + ";"; aktualnyCzas = millis(); roznicaCzasu = aktualnyCzas - zapamietanyCzas; aktualnyCzas1 = millis(); roznicaCzasu1 = aktualnyCzas1 - zapamietanyCzas1; if (gps.altitude.isValid() && i == 0) { digitalWrite(A2, HIGH); baza = wysnpm; i++; } if (gps.altitude.isValid()) { wys = wysnpm - baza; } //Jeśli różnica wynosi ponad sekundę if (roznicaCzasu >= 1000UL && gps.altitude.isValid()) { zapamietanyCzas = aktualnyCzas; S = S + 1; if (S > 59) { S = 0; M = M + 1; } if (M > 59) { M = 0; H = H + 1; } } smartDelay(1000); if (roznicaCzasu1 >= 1000UL && gps.altitude.isValid()) { zapamietanyCzas1 = aktualnyCzas1; digitalWrite(7, HIGH); Dane = SD.open("Dane.txt", FILE_WRITE); Dane.println(RTY); Dane.close(); digitalWrite(7, LOW); } } static void printDateTime(TinyGPSDate &d, TinyGPSTime &t) { { char sz[32]; sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year()); Dane.print(sz); } { char sz[32]; sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second()); Dane.println(sz); } } static void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (ss.available()) gps.encode(ss.read()); } while (millis() - start < ms); } Log zapisany na karcie:
  2. Problem rozwiązany zła biblioteka. Wstyd się przyznać, ale nie wiem czemu nie zauważyłem różnicy w nazwie biblioteki ILI9341 ILI9225 . Tft działa bez zarzutu. Dziękuję za pomoc.
  3. To co z nią jak mam ją sprawdzić pobrałem wgrałem itd skompilowało się wgrało do płytki ale tft dalej biały. Nie napisałeś o co konkretnie Ci chodzi. Jasnowidzem nie jestem
  4. w datasheecie str 24 7.2. Input Interfaces Interface Mode Serial Peripheral Interface (SPI) czy chodzi ci o bibliotekę?
  5. Wyświetlacz tft jest na magistralę spi przeczytaj wcześniejsze posty oraz jeszcze raz dokumentację na stronie sklepu chyba że producent lub sklep w kulki leci
  6. Z danych podanych przez sklep jest taka biblioteka i link do datasheeta https://abc-rc.pl/settings.php?getAttachmentp=581_10169_0d83a935f1d261d0fe559a8d359bea1f
  7. Płytka Arduino Uno z ESP (dwa moduły jedna plytka nie mogę podlinkować produkt prawdopodobnie wycofany ze sklepu) biblioteki Adafruit-GFX-Library-master Adafruit_ILI9341-master szkic z biblioteki #include "SPI.h" #include "Adafruit_GFX.h" #include "Adafruit_ILI9341.h" // For the Adafruit shield, these are the default. #define TFT_DC 9 #define TFT_CS 10 // Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); // If using the breakout, change pins as desired //Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); void setup() { Serial.begin(9600); Serial.println("ILI9341 Test!"); tft.begin(); // read diagnostics (optional but can help debug problems) uint8_t x = tft.readcommand8(ILI9341_RDMODE); Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX); x = tft.readcommand8(ILI9341_RDMADCTL); Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX); x = tft.readcommand8(ILI9341_RDPIXFMT); Serial.print("Pixel Format: 0x"); Serial.println(x, HEX); x = tft.readcommand8(ILI9341_RDIMGFMT); Serial.print("Image Format: 0x"); Serial.println(x, HEX); x = tft.readcommand8(ILI9341_RDSELFDIAG); Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); Serial.println(F("Benchmark Time (microseconds)")); delay(10); Serial.print(F("Screen fill ")); Serial.println(testFillScreen()); delay(500); Serial.print(F("Text ")); Serial.println(testText()); delay(3000); Serial.print(F("Lines ")); Serial.println(testLines(ILI9341_CYAN)); delay(500); Serial.print(F("Horiz/Vert Lines ")); Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE)); delay(500); Serial.print(F("Rectangles (outline) ")); Serial.println(testRects(ILI9341_GREEN)); delay(500); Serial.print(F("Rectangles (filled) ")); Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA)); delay(500); Serial.print(F("Circles (filled) ")); Serial.println(testFilledCircles(10, ILI9341_MAGENTA)); Serial.print(F("Circles (outline) ")); Serial.println(testCircles(10, ILI9341_WHITE)); delay(500); Serial.print(F("Triangles (outline) ")); Serial.println(testTriangles()); delay(500); Serial.print(F("Triangles (filled) ")); Serial.println(testFilledTriangles()); delay(500); Serial.print(F("Rounded rects (outline) ")); Serial.println(testRoundRects()); delay(500); Serial.print(F("Rounded rects (filled) ")); Serial.println(testFilledRoundRects()); delay(500); Serial.println(F("Done!")); } void loop(void) { for(uint8_t rotation=0; rotation<4; rotation++) { tft.setRotation(rotation); testText(); delay(1000); } } unsigned long testFillScreen() { unsigned long start = micros(); tft.fillScreen(ILI9341_BLACK); yield(); tft.fillScreen(ILI9341_RED); yield(); tft.fillScreen(ILI9341_GREEN); yield(); tft.fillScreen(ILI9341_BLUE); yield(); tft.fillScreen(ILI9341_BLACK); yield(); return micros() - start; } unsigned long testText() { tft.fillScreen(ILI9341_BLACK); unsigned long start = micros(); tft.setCursor(0, 0); tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1); tft.println("Hello World!"); tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2); tft.println(1234.56); tft.setTextColor(ILI9341_RED); tft.setTextSize(3); tft.println(0xDEADBEEF, HEX); tft.println(); tft.setTextColor(ILI9341_GREEN); tft.setTextSize(5); tft.println("Groop"); tft.setTextSize(2); tft.println("I implore thee,"); tft.setTextSize(1); tft.println("my foonting turlingdromes."); tft.println("And hooptiously drangle me"); tft.println("with crinkly bindlewurdles,"); tft.println("Or I will rend thee"); tft.println("in the gobberwarts"); tft.println("with my blurglecruncheon,"); tft.println("see if I don't!"); return micros() - start; } unsigned long testLines(uint16_t color) { unsigned long start, t; int x1, y1, x2, y2, w = tft.width(), h = tft.height(); tft.fillScreen(ILI9341_BLACK); yield(); x1 = y1 = 0; y2 = h - 1; start = micros(); for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color); x2 = w - 1; for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color); t = micros() - start; // fillScreen doesn't count against timing yield(); tft.fillScreen(ILI9341_BLACK); yield(); x1 = w - 1; y1 = 0; y2 = h - 1; start = micros(); for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color); x2 = 0; for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color); t += micros() - start; yield(); tft.fillScreen(ILI9341_BLACK); yield(); x1 = 0; y1 = h - 1; y2 = 0; start = micros(); for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color); x2 = w - 1; for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color); t += micros() - start; yield(); tft.fillScreen(ILI9341_BLACK); yield(); x1 = w - 1; y1 = h - 1; y2 = 0; start = micros(); for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color); x2 = 0; for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color); yield(); return micros() - start; } unsigned long testFastLines(uint16_t color1, uint16_t color2) { unsigned long start; int x, y, w = tft.width(), h = tft.height(); tft.fillScreen(ILI9341_BLACK); start = micros(); for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1); for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2); return micros() - start; } unsigned long testRects(uint16_t color) { unsigned long start; int n, i, i2, cx = tft.width() / 2, cy = tft.height() / 2; tft.fillScreen(ILI9341_BLACK); n = min(tft.width(), tft.height()); start = micros(); for(i=2; i<n; i+=6) { i2 = i / 2; tft.drawRect(cx-i2, cy-i2, i, i, color); } return micros() - start; } unsigned long testFilledRects(uint16_t color1, uint16_t color2) { unsigned long start, t = 0; int n, i, i2, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(ILI9341_BLACK); n = min(tft.width(), tft.height()); for(i=n; i>0; i-=6) { i2 = i / 2; start = micros(); tft.fillRect(cx-i2, cy-i2, i, i, color1); t += micros() - start; // Outlines are not included in timing results tft.drawRect(cx-i2, cy-i2, i, i, color2); yield(); } return t; } unsigned long testFilledCircles(uint8_t radius, uint16_t color) { unsigned long start; int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2; tft.fillScreen(ILI9341_BLACK); start = micros(); for(x=radius; x<w; x+=r2) { for(y=radius; y<h; y+=r2) { tft.fillCircle(x, y, radius, color); } } return micros() - start; } unsigned long testCircles(uint8_t radius, uint16_t color) { unsigned long start; int x, y, r2 = radius * 2, w = tft.width() + radius, h = tft.height() + radius; // Screen is not cleared for this one -- this is // intentional and does not affect the reported time. start = micros(); for(x=0; x<w; x+=r2) { for(y=0; y<h; y+=r2) { tft.drawCircle(x, y, radius, color); } } return micros() - start; } unsigned long testTriangles() { unsigned long start; int n, i, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(ILI9341_BLACK); n = min(cx, cy); start = micros(); for(i=0; i<n; i+=5) { tft.drawTriangle( cx , cy - i, // peak cx - i, cy + i, // bottom left cx + i, cy + i, // bottom right tft.color565(i, i, i)); } return micros() - start; } unsigned long testFilledTriangles() { unsigned long start, t = 0; int i, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(ILI9341_BLACK); start = micros(); for(i=min(cx,cy); i>10; i-=5) { start = micros(); tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, tft.color565(0, i*10, i*10)); t += micros() - start; tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, tft.color565(i*10, i*10, 0)); yield(); } return t; } unsigned long testRoundRects() { unsigned long start; int w, i, i2, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(ILI9341_BLACK); w = min(tft.width(), tft.height()); start = micros(); for(i=0; i<w; i+=6) { i2 = i / 2; tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0)); } return micros() - start; } unsigned long testFilledRoundRects() { unsigned long start; int i, i2, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(ILI9341_BLACK); start = micros(); for(i=min(tft.width(), tft.height()); i>20; i-=6) { i2 = i / 2; tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); yield(); } return micros() - start; } Schemat podłączeń. Zdjęcia płytki Arduino nie mogę wrzucić Forbot wyświetla błąd -200
  8. Udało mi się uruchomić oleda i barometr na i2c. Musiałem tylko wpisać adres barometru 0x77 i oleda 0x3c bmp.begin(0x77); display.begin(SSD1306_SWITCHCAPVCC, 0x3c); Wszystko pięknie działa. Co do tft chyba jest wadliwy, podpiąłem go tak jak pisaliście oraz na kilka innych sposobów używając szkiców z bibliotek i oprócz białego ekranu nic nie uzyskałem
  9. Na TFT na razie nic nie planuje chcę go po prostu odpalić, ale chyba zamienię tego Oleda na tft z uwagi na wielkość. (Oled mniejszy) Oleda natomiast wrzucę do przyszłego prędkościomierza do samolotów rc. Mimo wszystko dziękuję za pomoc i naświetlenie tematów.
  10. Może za wcześnie użyłem określenia "Robienie projektu" dożę do zrobienia stacji pogodowej. Czytałem o I2C tutoriale manuale specyfikacje ale polecenia i2c.write czy coś takiego robi wodę z mózgu jak mam wysłać metodą i2c.write żądanie do barometru i wyświetlacza bo konkretnie tego nie umiem/nie rozumiem nigdzie to nie jest pokazane (przynajmniej tam gdzie patrzyłem)
  11. Jeszcze jedno robię drugi projekt opary o wyświetlacz OLED i barometr BMP108 oba na I2C. Pytanie brzmi jak zaadresować polecenia dla barometru i wyświetlacza?
  12. Układ scalony: LVC245A oraz zdjęcie Czy jak podłączę 3,3V zamiast 5V to wyświetlacz da jakiś znak życia?
  13. Witam, mam problem z uruchomieniem w/w wyświetlacza na arduino z powodu opisu pinów. Na różnych stronach i blogach wyświetlacz używa pinów MOSI MISO CS DC.. Natomiast na moim module występują piny CLK RST RS CS SDA Próbowałem podłączyć wyświetlacz do magistrali I2C i SPI ale bez skutku. Proszę o pomoc lub wskazówki dot. połączenia i oprogramowania wyświetlacza. Wyświetlacz podłączam przez dzielnik rezystorowy ponieważ wyczytałem że zasilany jest napięciem 3,3V. Na niektórych forach podają że wyświetlacz pracuje na napięciu 5V Jeśli to możliwe to proszę mi wyjaśnić na jakim napięciu powinien pracować. Link do wyświetlacza: https://abc-rc.pl/pl/products/wyswietlacz-lcd-tft-2-0-spi-176x220px-arduino-10169.html
  14. W takim razie jak składać ten payload i skąd strona u klienta wie gdzie go umieścić?
  15. Czytałem trochę więcej od ostatniego razu o esp i html'u i wydaje mi się że powinienem użyć procedur get i post, ale nie wiem jak je wykorzystać. Po drugie w podesłanym przez Ciebie przykładzie są polecenia których nie rozumiem, np void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) IPAddress ip = webSocket.remoteIP(num); Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\r\n", num, ip[0], ip[1], ip[2], ip[3], payload); Dodatkowo w innym przykładzie widziałem jeszcze jakieś e.serialprint czy coś takiego.
×
×
  • Utwórz nowe...