• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Balon meteo z GPS, czujnikiem temperatury i wilgotności oraz modułem karty SD
#15
(17-10-2020, 17:47)Agregacik napisał(a): Poprawa a właściwie napisanie od nowa całego programu nie jest takie szybkie i dla mnie proste. Trzeba mieć makietę z wszystkimi elementami. Wiedzieć, co po kolei ma się wykonywać a właściwie czego dokładnie oczekujesz.
Podziel program na "podprogramy" w LOOP powinno być, według mnie, tylko 3-4 pozycje z odniesieniami do podprogramów.  Ułatwi to Ci analizę co się dzieje.
Może teraz program zatrzymuje się już na poziomie setup. Może masz coś źle podłączone i program czeka na odpowiedź podłączonych urządzeń, zatrzymuje się na którymś beginie i czeka.
Jak chcesz przeżywać przygodę z "arduino" to trzeba samemu dochodzić do wszystkiego. No może nie samemu bo jest wiele samouczków. Tutaj na grupie, czy gdzie indziej, pytać już o konkrety a nie "program mi nie działa".
Pytanie powinno brzmieć: program zatrzymuje się tu, co może być przyczyną, albo mam tak zrobione i mi nie czyta danych z czujnika co może być przyczyną.
Poczytaj może na początek  tu: https://plociennik.info/index.php/arduino-wstep i tu: https://forbot.pl/blog/kurs-arduino-pods...rsu-id5290
Zapoznaj się z niezależnym miganiem diodami, to jest podstawą do sterowania opóźnieniami za pomocą millis().
I jeszcze jedna sprawa, jak piszesz program to dopisuj komentarze co dana linijka czy blok linijek ma robić. To ułatwia Tobie i ewentualnie doradzającym zrozumienie działania programu.

Podłączenie elementów jest prawidłowe. Jak pisałem, wszystko z osobna działa.
Poprawiłem kod, wróciłem do jego pierwotnej wersji. W tym momencie działa i zapisuje mi dane z czujnika temperatury i dane z GPS na kartę pamięci w fajnej dla mnie formie, wszystko w excelu. Nadal pozostaje kwestia rozwiązania wysyłania sms przez moduł ze swoim położeniem.  Aktualnie wygląda to tak:
Kod:
#include "Wire.h"
#include "SD.h"
#include "SoftwareSerial.h"
#include "TinyGPS.h"
#include "DHT.h"
#define DHTTYPE DHT22                        // DHT 22  (AM2302), AM2321
#define DHTPIN A0
const int chipSelect = 10;
File dataFile;
DHT dht(DHTPIN, DHTTYPE); 
TinyGPS gps;
SoftwareSerial ss(6, 7);

void setup() 
{
  Serial.begin(115200);
  Serial.print("Initializing SD card...");
  ss.begin(9600);
  dht.begin();
  pinMode(chipSelect, OUTPUT);
 
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1) ;
  }
  Serial.println("card initialized.");
 
  // Open up the file we're going to log to!
  dataFile = SD.open("GPStest.txt", FILE_WRITE);
  if (! dataFile) {
    Serial.println("error opening GPStest.txt");
    // Wait forever since we cant write data
    while (1) ;
  } 
}

void loop()                   
{
  bool newData = false;

for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

    if (newData)
  {
    float flat, flon;
    unsigned long age;
    int year;
    byte month, day, hour, minute, second, hundredths;
    gps.f_get_position(&flat, &flon, &age);
    gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
        char sz[32];
    sprintf(sz, "%02d/%02d/%02d, %02d:%02d:%02d,  ",
     month, day, year, hour, minute, second);
   
    Serial.print("");
    Serial.print("Szerokość: ");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(", ");
    Serial.print("Długośc: ");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(", ");

    dataFile.print("");
    dataFile.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    dataFile.print(", ");
    dataFile.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    dataFile.print(", ");
    float temperature;                              // Temperature variable
    delay (100);
    float DHTh = dht.readHumidity();                // Read DHT sensor
    Serial.print("Wilgotnosc: ");
    Serial.print(DHTh, 2);
    dataFile.print(" Wilgotnosc: ");
    dataFile.print(DHTh, 2);                        // write humidity data to SD card
    dataFile.print("%,");
    float DHTt = dht.readTemperature();             // Read temperature as Celsius (the default)
    Serial.print(" Temperatura: ");
    Serial.println(DHTt, 2);
    dataFile.print(" Temperatura: ");
    dataFile.println(DHTt, 2);                      // write temperature data to SD card and end line
  }

  dataFile.flush();
  delay(500);
}

W takim razie doszkalam się dalej i postaram się jakoś część z modułem GSM dodać do programu.
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Balon meteo z GPS, czujnikiem temperatury i wilgotności oraz modułem karty SD - przez kampap91 - 17-10-2020, 18:20

Skocz do:


Przeglądający: 1 gości