Σελίδα 1 από 3 1 2 3 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 24

Θέμα: dht11

  1. #1
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή dht11

    γεια και χαρα σε ολους και καλο καλοκαιρι...
    προσπαθω με τον παρακατω κωδικα που παραθετω καθε 1 λεπτο να παιρνω μια μετρηση με το dht11 και να την ανεβαζω στο thingspeak
    το προβλημα ειναι οτι μολις τελειωσει η πρωτη αντιστροφη μετρηση και γινει η loop αντι να γυρισει παλι στο ενα λεπτο και να γινει η αντιστροφη μετρηση αυτο γυριζει στο 00:59:59 και κανει αντιστροφη μετρηση και καθε φορα γινεται το ιδιο...
    οποιος μπορει ας μου πει πιο λαθος κανω (στο παραδειγμα εχω ορισει 20 sec)
    #include "DHT.h"


    float therm;


    float humid;


    int hrs = 0;
    int Min = 0;
    int sec = 20;


    #define DHTPIN 6 // what pin we're connected to


    // Uncomment whatever type you're using!
    #define DHTTYPE DHT11 // DHT 11


    // Initialize DHT sensor for normal 16mhz Arduino
    DHT dht(DHTPIN, DHTTYPE);


    void setupdht11() {
    dht.begin();
    }


    void readdht11() {
    Serial.println("*********** DHT11 *********");
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // Check if any reads failed and exit early (to try again).
    if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
    }


    humid=h;
    therm=t;


    Serial.print("Humin void is ");
    Serial.print(humid);
    Serial.print(" %\t");


    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");

    }

    void set_time(){

    sec = sec - 1;

    if (sec == -1)
    {
    sec = 59;
    Min = Min - 1;
    }
    if (Min == -1)
    {
    Min = 59;
    hrs = hrs - 1;
    }
    if (hrs == -1) hrs = 0;
    if (hrs <= 9)
    {
    Serial.print('0');
    }
    Serial.print(hrs);
    Serial.print(':');
    if (Min <= 9)
    {
    Serial.print('0');
    }
    Serial.print(Min);
    Serial.print(':');
    if (sec <= 9)
    {
    Serial.print('0');
    }
    Serial.println(sec);
    }



    void setup() {

    Serial.begin(9600); // Setting the baud rate of Serial Monitor (Arduino)
    delay(500);
    setupdht11();
    delay(500);


    }

    void loop() {

    set_time();

    if (hrs == 0 && Min == 0 && sec == 0)
    {



    readdht11();

    Serial.print("humid in main is ");
    Serial.println(humid);

    Serial.print("temp is ");
    Serial.println(therm);
    delay(500);



    }
    delay(1000);
    }

    0 Not allowed! Not allowed!

  2. #2
    Μέλος
    Όνομα
    Μάρκος
    Εγγραφή
    Mar 2012
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.946

    Προεπιλογή

    Μέσα στο if (hrs == 0 && Min == 0 && sec == 0) { .......... } στο τέλος πριν κλείσει το if , θα πρέπει να επανατοποθετείς τις μεταβλητές στις προκαθορισμένες τιμές (0,0,20).

    0 Not allowed! Not allowed!
    Όταν όλα τα άλλα έχουν αποτύχει..... RTFM.
    Short instructions: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>> Good Luck!
    https://diyelectronics-gr.blogspot.gr https://www.facebook.com/groups/872041030200567

  3. #3
    Μέλος
    Όνομα
    ΧΡΗΣΤΟΣ
    Εγγραφή
    Mar 2012
    Περιοχή
    Περιστερι
    Μηνύματα
    217

    Προεπιλογή

    Κάνε αυτή την αλλαγή
    Κώδικας:
    void set_time(){
    
    sec = sec - 1;
    
    if (sec == -1)
    {
    sec = 20;
    Min = Min - 1;
    }
    if (Min == -1)
    {
    Min = 0;
    hrs = hrs - 1;
    }
    if (hrs == -1) hrs = 0;
    if (hrs <= 9)
    Και δες αν είναι εντάξει.

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη klik
    Όνομα
    just a click away
    Εγγραφή
    Oct 2009
    Περιοχή
    Θεσσαλλλονίκη
    Μηνύματα
    2.561

    Προεπιλογή

    Μπορεις να αγνοησεις την ακομψη set time και να αλλαξεις τη loop ως εξής:

    Κώδικας:
    void loop() {
         sec--;
         if(sec<=0) {
             readdht11();
    
             Serial.print("humid in main is ");
             Serial.println(humid);
    
             Serial.print("temp is ");
             Serial.println(therm);
             sec=20;//ή οτι interval θελεις
          }
         delay(1000);
    }
    Με τον παραπανω κωδικα οι μεταβλητες Min και Hrs ειναι περιττές οπως και η set_time

    1 Not allowed! Not allowed!

  5. #5
    Μέλος
    Όνομα
    ΧΡΗΣΤΟΣ
    Εγγραφή
    Mar 2012
    Περιοχή
    Περιστερι
    Μηνύματα
    217

    Προεπιλογή

    Άκυρο διάβασα λάθος

    0 Not allowed! Not allowed!

  6. #6
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από klik Εμφάνιση μηνυμάτων
    Μπορεις να αγνοησεις την ακομψη set time και να αλλαξεις τη loop ως εξής:

    Κώδικας:
    void loop() {
         sec--;
         if(sec<=0) {
             readdht11();
    
             Serial.print("humid in main is ");
             Serial.println(humid);
    
             Serial.print("temp is ");
             Serial.println(therm);
             sec=20;//ή οτι interval θελεις
          }
         delay(1000);
    }
    Με τον παραπανω κωδικα οι μεταβλητες Min και Hrs ειναι περιττές οπως και η set_time
    ευχαριστω για τις απαντησεις... οντως ετσι δουλευει σωστα η loop αλλα χρειαζομαι και τα λεπτα διοτι τα 20 sec τα ειχα βαλει σαν παραδειγμα για οικονομια χρονου

    0 Not allowed! Not allowed!

  7. #7
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή

    το καταλαβα το λαθος μου και το προσαρμοσα στον κωδικα και δουλευει τωρα
    #include "DHT.h"


    float therm;


    float humid;


    int hrs = 0;
    int Min = 0;
    int sec = 20;


    #define DHTPIN 6 // what pin we're connected to


    // Uncomment whatever type you're using!
    #define DHTTYPE DHT11 // DHT 11


    // Initialize DHT sensor for normal 16mhz Arduino
    DHT dht(DHTPIN, DHTTYPE);


    void setupdht11() {
    dht.begin();
    }


    void readdht11() {
    Serial.println("*********** DHT11 *********");
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // Check if any reads failed and exit early (to try again).
    if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
    }


    humid=h;
    therm=t;


    Serial.print("Humin void is ");
    Serial.print(humid);
    Serial.print(" %\t");


    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");

    }

    void set_time(){

    sec = sec - 1;

    if (sec == -1)
    {
    sec = 59;
    Min = Min - 1;
    }
    if (Min == -1)
    {
    Min = 59;
    hrs = hrs - 1;
    }
    if (hrs == -1) hrs = 0;
    if (hrs <= 9)
    {
    Serial.print('0');
    }
    Serial.print(hrs);
    Serial.print(':');
    if (Min <= 9)
    {
    Serial.print('0');
    }
    Serial.print(Min);
    Serial.print(':');
    if (sec <= 9)
    {
    Serial.print('0');
    }
    Serial.println(sec);
    }



    void setup() {

    Serial.begin(9600); // Setting the baud rate of Serial Monitor (Arduino)
    delay(500);
    setupdht11();
    delay(500);


    }

    void loop() {

    set_time();

    if (hrs == 0 && Min == 0 && sec == 0)
    {

    readdht11();

    Serial.print("humid in main is ");
    Serial.println(humid);

    Serial.print("temp is ");
    Serial.println(therm);
    delay(500);
    hrs =0;
    Min =0;
    sec = 20;
    }
    delay(1000);
    }

    0 Not allowed! Not allowed!

  8. #8
    Μέλος Το avatar του χρήστη klik
    Όνομα
    just a click away
    Εγγραφή
    Oct 2009
    Περιοχή
    Θεσσαλλλονίκη
    Μηνύματα
    2.561

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από stinger Εμφάνιση μηνυμάτων
    ευχαριστω για τις απαντησεις... οντως ετσι δουλευει σωστα η loop αλλα χρειαζομαι και τα λεπτα διοτι τα 20 sec τα ειχα βαλει σαν παραδειγμα για οικονομια χρονου


    Δηλαδη αν θες 3 λεπτα, δεν μπορεις να βαλεις το sec να ειναι 180;

    0 Not allowed! Not allowed!

  9. #9
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή

    ναι το εκανα κι αυτο αλλα οι μετρησεις θα ανεβαινουν καθε μια ωρα,,, η set_time() δεν ειναι σωστη οσον αφορα την δομη του κωδικα?

    αυτο αρχικα ηθελα να το κανω με το ds3231 που εχει και ακριβεια στην ωρα αλλα θα το προσπαθησω παλι

    0 Not allowed! Not allowed!

  10. #10
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από klik Εμφάνιση μηνυμάτων
    Δηλαδη αν θες 3 λεπτα, δεν μπορεις να βαλεις το sec να ειναι 180;
    γινεται αν βαλω 3600 sec που αντιστοιχουν σε 1 ωρα....

    0 Not allowed! Not allowed!

Σελίδα 1 από 3 1 2 3 ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Arduino DHT11, πρόβλημα μεταγλώττισης
    By demy in forum Μικροελεγκτές
    Απαντήσεις: 9
    Τελευταίο Μήνυμα: 02-06-19, 23:38

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας