Arduino Polska Forum
atmega328p i dht22 odczyt wartości z czujnika - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Mikrokontrolery (https://forum.arduinopolska.pl/dzial-mikrokontrolery)
+--- Wątek: atmega328p i dht22 odczyt wartości z czujnika (/watek-atmega328p-i-dht22-odczyt-warto%C5%9Bci-z-czujnika)



atmega328p i dht22 odczyt wartości z czujnika - loki1707 - 18-07-2018

Witam.
Mam problem z odczytem wartosći z czujnika dht22 na atmedze, ciągle dostaje wynik 0. Juz od kilku dni się z tym męczę i jak narazie rezultatów brak.
To mój kod:
#define przycisk1 9
#define przycisk2 10
#define d (3000)

#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <DHT.h>
#include <Wire.h>
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
DS3231 rtc(SDA, SCL);
float wilgotnosc;
float temperatura;
#define DHTPIN 12
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  lcd.begin(16,2);
  dht.begin ();
  rtc.begin ();
  lcd.noBacklight ();
  pinMode (przycisk1, INPUT_PULLUP);
  pinMode (przycisk2, INPUT_PULLUP);
  //rtc.setTime(17, 39, 30);
  //rtc.setDate(30, 05, 2018);

}

void loop() {
  temperatura = dht.readTemperature();
  wilgotnosc = dht.readHumidity();
  switch ((digitalRead(przycisk1) == LOW))
  {
  case 1:
    //instrukcje dla var=1
    lcd.clear();
    lcd.backlight();
    lcd.setCursor(0,0);
    lcd.print("TEMP");
    lcd.setCursor(0,1);
    lcd.print("WILG");
    lcd.setCursor(8,0);
    lcd.print(temperatura);
    lcd.print("*C");
    lcd.setCursor(8,1);
    lcd.print(wilgotnosc);
    lcd.print("%");
    delay(d);
    lcd.clear();
    break;
  default:
    lcd.noBacklight();
    lcd.setCursor(0,0);
    lcd.print("Godz:   ");
    lcd.setCursor(0,1);
    lcd.print("Data:   ");
    lcd.setCursor(6,0);
    lcd.print(rtc.getTimeStr());
    lcd.setCursor(6,1);
    lcd.print(rtc.getDateStr());

  }
  if ((digitalRead(przycisk2) == LOW))
  {
    lcd.backlight();
    delay(d);

  }
  else if ((digitalRead(przycisk2) == HIGH))
  {
    lcd.noBacklight ();
  }
}




Będę wdzięczny za każdą pomoc. Dodam, ze na arduino program działa bez najmniejszych przeszkód.


RE: atmega328p i dht22 odczyt wartości z czujnika - Robson Kerman - 18-07-2018

Tak na pierwszy rzut oka, to wszystko okej z tym warunkiem switch?


RE: atmega328p i dht22 odczyt wartości z czujnika - kaczakat - 18-07-2018

Napisał 2 zdania, ale 3 trzeba się domyśleć. Skoro działa na Arduino to jest to pewnie jakiś export na czystego procka. Jaki procek i jakie czynności wykonałeś (bootloader itp), jaki masz schemat, zdjęcia. Domyślam się o co chodzi, ale pisać na pałę nie będę.


RE: atmega328p i dht22 odczyt wartości z czujnika - loki1707 - 19-07-2018

[attachment=620][attachment=620][attachment=620][attachment=620][attachment=620][attachment=620]
Procek to atmega328p, bootloader wgrywałem przez soft arduino i usbasp, schematu jako takiego nie mam, w załączeniu zdjęcia mam nadzieję, że będą chcociaż trochę pomocne, zapomniałem dodać o dziwnym zachowaniu "delay" mam ustawione na 3s,a w rzeczywistości trwa ok 30s.


RE: atmega328p i dht22 odczyt wartości z czujnika - es2 - 19-07-2018

(19-07-2018, 09:12)loki1707 napisał(a): zapomniałem dodać o dziwnym zachowaniu "delay" mam ustawione na 3s,a w rzeczywistości trwa ok 30s.

DIV8 odznacz.


RE: atmega328p i dht22 odczyt wartości z czujnika - loki1707 - 19-07-2018

Problem z "delay" rozwiązany...dzięki, ale dht nadal nie działa :/


RE: atmega328p i dht22 odczyt wartości z czujnika - es2 - 19-07-2018

(19-07-2018, 10:29)loki1707 napisał(a): Problem z "delay" rozwiązany...dzięki, ale dht nadal nie działa :/

Zdecyduj się na jedno forum, nie będę odpowiadał na kilku https://www.elektroda.pl/rtvforum/viewtopic.php?p=17337705#17337705


RE: atmega328p i dht22 odczyt wartości z czujnika - kaczakat - 19-07-2018

Jakbyś wgrał bootloader prawidłowo to on ustawia również fuses tak by był jak np. w UNO. Nowe procki przylatują z Chin z ustawieniem na 1MHz i USBASP z Arduino nie działa, trzeba wybrać programator USBASP SLOW, potem po wgraniu bootloadera znowu przestawić na normalny, bo znowu SLOW nie działa z kwarcem 16MHz. Na wszelki wypadek odpal AVRLAB i sprawdź czy reszta (trzy liczby HEX przy fuse) jest tak samo jak przy wybranej płytce zdefiniowane w pliku boards.txt w katalogu Arduino. Kwarc możesz wpiąć bezpośrednio do nóżek procka bez tych kabelków i kondensatorków, takie pierdoły się dopieszcza na koniec, a na stykówce to i tak  ma znaczenie marginalne. Już lepiej dać 3 kondensatory przy VCC, AVCC i Aref. 
[attachment=622]
Jak już z fuses będzie OK, to sprawdź czy w ogóle #define DHTPIN 12 jest tą nóżką o której myślisz. Jak nie masz pinooutu atmegi/Arduino to w innym szkicu odpal sobie blinka na 12 i sprawdź, czy LED (z rezystorem oczywiście) podłączony do Twojej 12 działa. Zresztą akurat 12 jest mało szczęśliwym wyborem bo pewnie masz tu podłączony programator USBASP, który może bruździć, można użyć jakiegoś pośledniego pinu, np. 4-8,14-17 z ADC, jeśli ADC nie używasz.
Przy takiej plątaninie powodów niedziałania może być  jak ilość kabelków^2.