• 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
NANO V3, i problem z RTC DS3231
#1
Witam wszystkich!!
Mam taki problem i nie wiem co jest grane męczę się z tym już 3 dzień i nie daje mi to usnąć.
  Mianowicie robie stację pogodową na Arduino Nano v3, wszystko działa jak na razie jak powinno poza RTC DS3231. Jak użyje przykładowego kodu do testu zegara ładnie pokazuje mi date, godzine i co tam chcę, ale ten sam kod wklepany w program stacji w róznych konfiguracjach (na dole pętli czy na gorze pętli czy też w środku) wyświetla mi date, 00-00-0000 i godzine 00:00:00. Próbowałem na dwóch różnych zegarach oraz na dwóch różnych egzemplarzach i dalej jest to samo.
Edit: Godzina w zegarze jest zaprogramowana przy próbach na programie testującym działanie zegara
Czy ktoś się z was z podobna rzeczą spotkał?


Poniżej kod stacji pogodowej.
Kod:
//biblioteki i definicje wilgotnościomierza
#include "DHT.h"
#define DHTPIN 2 // pin pod którym mamy czujnik wilgoci
#define DHTTYPE DHT22 // DHT 22 typ czujnika
DHT dht(DHTPIN, DHTTYPE); // czesc dla wilgotnocsciomierza

//biblioteki i definiowanie barometru
#include <Wire.h>
#include "i2c.h" //biblioteka magistrali i2c
#include "i2c_BMP280.h" //--||-- dla barometru i2c
BMP280 bmp280; //definiowanie barometru

//Zegar ds3231
#include <Wire.h>
#include <DS3231.h> //biblioteka zegara

DS3231 clock; //definiowanie zegara
RTCDateTime dt; //definicja czasu


//biblioteki i pin anenometru
#include <LaCrosseTX23.h> //biblioteka anenometru
LaCrosseTX23 anemometer = LaCrosse_TX23(7);//

//bibliioteki i definiowanie czujnika opadów
int sensorA0 = A1; // podłączenie od A0 na czujniku do A1 na Arduino
int sensorD0 = 8; // podłączenie od D0 na czujniku do pinu 8 na Arduino
int wartoscA0; // zmienna dla wartości A0
int wartoscD0; // zmienna dla wartości A0

// czujnik swiatła
int LDR_Pin = A0; //analog pin 0

//czujki temperatury
#include <DallasTemperature.h>
#define ONEWIREBUS 9
OneWire oneWire(ONEWIREBUS);
DallasTemperature sensors(&oneWire);

void setup() {
Serial.begin(9600);

clock.begin(); //uruchomienie zegara

Serial.println("Test Wilgotnosciomierza");

dht.begin(); //uruchomienie wilgotnosciomierza
delay(1000);

//uruchamianie Barometru
Serial.print("Sprawdzam barometr: ");
if (bmp280.initialize()) Serial.println("Działa"); //uruchomienie barometru
else
{
Serial.println("Sensor missing");
while (1) {}
}

// onetime-measure:
bmp280.setEnabled(0);
bmp280.triggerMeasurement();


}

void loop() {

//wyswietlanie daty
Serial.print("Data i godzina ");
Serial.println(clock.dateFormat("d-m-Y H:i:s",dt ));

if (clock.isAlarm1())
{
Serial.println("funkcja zapisywania!"); //tutaj będzie pętla zapisu do różnych plików o zadanej godzinie, funkcje aktywujaca alarm dodam pozniej
}

//część wilgotnościomierza
// Czekaj na pomiar.
delay(2000);

float h = dht.readHumidity();

// Jeżeli nie odczyta czujnika
if (isnan(h)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Wilgotność: ");
Serial.println(String(h) + "" + String("%"));

//część barometru

bmp280.awaitMeasurement();

float temperature;
bmp280.getTemperature(temperature);

float pascal;
bmp280.getPressure(pascal);

static float meters, metersold;


bmp280.triggerMeasurement();


Serial.print(" Ciśnienie: ");
Serial.print(pascal/100);
Serial.println(" hPa; : ");
Serial.print(" Ciśnienie wg poziomu morza: ");
Serial.print(pascal/100+19);
Serial.println(" hPa; : ");


//czesc anenometru

String dirTable[]= {"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"};
float speed;
int direction;

if(anemometer.read(speed, direction))
{
Serial.print("Prędkość Wiatru = " + String(speed,1) + " m/s , ");

Serial.println("Kierunek = " + dirTable[direction]);


}
else
{
Serial.println("Read error");
delay(2000);
}
//część czujnika opadów
wartoscA0 = analogRead(sensorA0); // pobranie wartości z A0
wartoscD0 = digitalRead(sensorD0); // pobranie wartości z D0
// wyświetlenie na monitorze szeregowym
if(wartosc_D0 = 1);{

Serial.print("Brak Opadów");


}

//czujnik swiatla analogowy
int LDRReading = analogRead(LDR_Pin);
Serial.print("Nasłonecznienie : ");
Serial.print(LDRReading);
Serial.println( "");
if(LDRReading < 50) { //Jeżeli pochmurno jest wartość ~900 → skalibrować
Serial.println( "noc");

}
//Czujniki ds18b20
float T1;
float T2;
static int a=0;
//Wysłanie komendy do pobrania temperatury
sensors.requestTemperatures();

T1 = sensors.getTempCByIndex(0);
T2 = sensors.getTempCByIndex(1);
Serial.print( " Czujnik osłonięty ");
Serial.print(T1);
Serial.println(" C");
Serial.print(" Czujnik odsłonięty ");
Serial.print(T2);
Serial.println(" C");
delay(6000);

}
 
Odpowiedź
#2
niżej jaki problem mam a pod spodem działanie programu testującego zegar [Obrazek: comment_3ZXqZeMapWdUoJK6D5VsP3NB8XM5oYGP.jpg][Obrazek: comment_1v7BycDGR3VttvKenXD1NJDgDuPY5fV6.jpg]
 
Odpowiedź
#3
A może wywal wszędzie
#include <Wire.h>
#include "i2c.h" //biblioteka magistrali i2c

zamiast tego
//Zegar ds3231
#include <Wire.h>
#include <DS3231.h> //biblioteka zegara
DS3231 clock; //definiowanie zegara
RTCDateTime dt; //definicja czasu
coś takiego:
#include <RTClib.h>
RTC_DS3231 rtc;

DateTime now = rtc.now();
Albo zmień swoją bibliotekę na coś takiego:
Arduino-DS3231-master


Załączone pliki
.zip   RTClib.zip (Rozmiar: 14.6 KB / Pobrań: 0)
 
Odpowiedź
#4
(26-02-2018, 20:49)OMK napisał(a): A może wywal wszędzie
#include <Wire.h>
#include "i2c.h" //biblioteka magistrali i2c

zamiast tego
//Zegar ds3231
#include <Wire.h>
#include <DS3231.h> //biblioteka zegara
DS3231 clock; //definiowanie zegara
RTCDateTime dt; //definicja czasu
coś takiego:
#include <RTClib.h>
RTC_DS3231 rtc;

DateTime now = rtc.now();
Albo zmień swoją bibliotekę na coś takiego:
Arduino-DS3231-master

Przepisałem sobie w poniedziałek z rana program od nowa wpisywałem to samo tylko w innym szkicu. Godzine pokazało. ale zepsuła się funkcja string z tej linii i linii anenometru
   Serial.print(String("Wilgotność: ") + (String(h) + "" + String("%")));
Musiałem przerobić na 3x serial print  bo jak inaczej mialem napisane było takie zjawisko

godzina
dane z anenometru
Dane z czujnika opdaow
<tu powinino byc z higromeetru a byla dziura>
dane z czujników DS18b20
dane z czujnika natezenia swiatl
 
Odpowiedź
#5
Wg mnie funkcja String() służy do zamiany danych liczbowych na napisy, na zmienne tekst.
String napis=""; //deklaracja zmiennej napis typu i przypisanie nic.
napis ="Wilgotność: " + String(h) + "%";//nowe przypisanie do zmiennej napis i przykład użycia funkcji do konwersji na napis
Serial.print(napis); //wydruk całości.
Nie wiem po co konwertować napisy na napisy i dodawać w środku pusty napis "". Może poczytaj trochę o C/C++.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości