17-10-2020, 18:20
(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.