30-03-2019, 00:03
Witam!
Robię "stacje pogodową" i napotkałem problem. Mianowicie po wgraniu programu na Arduino Nano po przyciśnięciu przycisku (uruchomieniu funkcji pogoda) czas sie zatrzymuje i muszę resetować arduino. Czy wynika to z wielkości programu? Nie powinno bi zajmuje tylko 52% całej pamięci. proszę o pomoc. przed dodaniem funkcji do czujnika DHT wszystko płynnie działało.
Robię "stacje pogodową" i napotkałem problem. Mianowicie po wgraniu programu na Arduino Nano po przyciśnięciu przycisku (uruchomieniu funkcji pogoda) czas sie zatrzymuje i muszę resetować arduino. Czy wynika to z wielkości programu? Nie powinno bi zajmuje tylko 52% całej pamięci. proszę o pomoc. przed dodaniem funkcji do czujnika DHT wszystko płynnie działało.
Kod:
#include "DHT.h"
#include <Wire.h>//Dodawanie bibliotek
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_BMP085.h>
#include <IRremote.h>
#include <RTClib.h>
#define prz 9
#define irPin 11
#define przycisk 10
#define DHTPIN 2
#define DHTTYPE DHT22
IRrecv irrecv(irPin);
decode_results results;
LiquidCrystal_I2C lcd(0x27, 20, 4); // Ustawienie adresu ukladu na 0x27
DHT dht(DHTPIN, DHTTYPE);
OneWire oneWire(A3); //Podłączenie do A3
DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki
Adafruit_BMP085 bmp;//Inicjalizacja czujnika bmp180
DateTime now;
char daysOfTheWeek[7][12] = {"Niedziela", "Poniedzialek", "Wtorek", "Sroda", "Czwartek", "Piatek", "Sobota"};
RTC_DS3231 rtc;
void showDate(void);
void showTime(void);
void showDay(void);
int przStatus = LOW;
void setup() {
pinMode(przycisk, INPUT_PULLUP);
pinMode(prz, OUTPUT);//Ustawienie
lcd.init();
lcd.backlight(); // zalaczenie podwietlenia
sensors.begin();//Wloczenie czujnikow
irrecv.enableIRIn();
dht.begin();
if (!bmp.begin()) {//Petla wykonan gdy nie znajdzie czuujnika bmp
lcd.setCursor(0, 0);
lcd.print(" ERROR! ");
lcd.setCursor(0, 1);
lcd.print(" BMP180 ");
while (1) {}
}
if (! rtc.begin())
{
lcd.setCursor(0,0);
lcd.print(" RTC ERROR! ");
while (1);
}
}
void loop() {
now = rtc.now();
showDate();
showDay();
showTime();
if(digitalRead(przycisk)==HIGH){
pogoda();
}
if (irrecv.decode(&results)) { //Jesli czujnik odbirze sygnał
switch (results.value) {
case 0xFF30CF:
pogoda();
break;
case 0xFF18E7:
przStatus = ~przStatus;
digitalWrite(prz, przStatus);
delay(250);
break;
}
irrecv.resume();
}
}
void pogoda() { //Petla pogody
int sensorA = analogRead(A0);
int sensorD = digitalRead(8);
int opady =map (sensorA,1023,0,0,100);
float h = dht.readHumidity();
float t = dht.readTemperature();
lcd.print(" Pogoda ");
sensors.requestTemperatures(); //Pobranie temperatury czujnika
lcd.setCursor(0,1);
lcd.print("Temp(Z): ");
lcd.print(sensors.getTempCByIndex(0)); //Wyswietlenie informacji
lcd.setCursor(14,1);
lcd.print("C*");
lcd.setCursor(0, 2);
lcd.print("Temp(W): ");
lcd.print(sensors.getTempCByIndex(1)); //Wyswietlenie informacji
lcd.setCursor(14,2);
lcd.print("C*");
lcd.setCursor(0,3);
lcd.print("Cisnienie: ");
lcd.print(bmp.readPressure()/100);//Wyswietlenie cisnienia z bmp180
lcd.print(" hPa");
delay(4000);
lcd.clear();
lcd.print(" Pogoda ");
lcd.setCursor(0,1);
lcd.print("Opady: ");
if (sensorD==1) {
lcd.print("Sucho");}
else{
lcd.print("Pada");
delay(1000);
}
lcd.setCursor(0,2);
lcd.print("Wilg: ");
lcd.print(h);
delay(4000);
lcd.clear();
}
void showDate()
{
lcd.setCursor(2,0);
lcd.print(now.day());
lcd.print('.');
lcd.print(now.month());
lcd.print('.');
lcd.print(now.year());
}
void showDay()
{
lcd.setCursor(2,3);
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
}
void showTime(){
lcd.setCursor(2,1);
lcd.print(now.hour());
lcd.print(':');
lcd.print(now.minute());
lcd.print(':');
lcd.print(now.second());
lcd.print(" ");
}