Εμφάνιση ενός μόνο μηνύματος
  #20  
Παλιά 27-09-15, 17:31
Το avatar του χρήστη jimbit22
jimbit22 Ο χρήστης jimbit22 δεν είναι συνδεδεμένος
Senior Member
 
Εγγραφή: 27-05-2011
Περιοχή: Ελληνορώσων
Μηνύματα: 491
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από Nick74 Εμφάνιση μηνυμάτων
Ευχαριστούμε, όποιος κάνει αλλαγές το σωστό είναι να ανεβάσει τη δική του εκδοχή (εγώ θα το τηρησω)
Μπορείς να κάνεις branch στο github..

Ωραία δουλειά έχεις κάνει και ο κώδικας ειναι επεξηγηματικότατος..

Επέτρεψε μου όμως να προτείνω και εγώ το Jarduino..
Αυτή την στιγμή αν θελήσεις να αλλάξεις κάποια ρύθμιση πρέπει να το υνδέσεις σε pc και να το κανείς flash με καινούριο κώδικα, πράγμα χρονοβόρο και κακό για την μνήμη flash του ATmega.
Οι 5000 από τις 6000 γραμμές κώδικα του Jarduino ειναι το μενού και οι σελίδες της οθόνης οπότε το να φτιάξεις καινούριο μενού ειναι δύσκολο και χρονοβόρο (όχι ακατόρθωτο)..

Μερικές προσθήκες:

Θερμοκρασία

Όπως είσαι τώρα, δουλεύεις με την τιμή θερμοκρασίας αφιλτράριστη. Όταν αυτή θα ειναι κοντά στο όριο (+- 0.1) τα ρελέ σου θα ανοιγοκλείνουν σαν τρελά. το καλύτερο θα ήταν να βγάζεις τον μέσο όρο ανά πχ δέκα μετρήσεις
και να δουλεύεις με αυτό..

οι αισθητήρες ONE Wire ειναι πολύ αργοί (προγραμματιστικα) στο να απαντήσουν την τιμή της θερμοκρασίας αφού λάβουν την αίτηση, οπότε πρέπει να καλείς μόνο μια φορά τον κάθε αισθητήρα σε κάθε loop του προγράμματος σου για να μην καθυστερεί η οθόνη.

παράδειγμα:

Κώδικας:
const int numReadings PROGMEM = 10;       // defines accuracy of the temp average
float readings[numReadings];      // the readings from the thermistor input
float total = 0;                  // the running total
float average = 0;                // the average
float tempW = 0;
int i = 0;

void setup()
{
  for (int y=0; y<numReadings-1; y++) // γεμηζεισ τον buffer του μεσου ορου
  {
    readings[y] =  sensors.getTempCByIndex(0);   //διαβαζεις τον αισθτήρα 
  }
}

Void loop()
{
  read_temp();
} 

int read_temp()
{
   int rawtemp =   sensors.getTempCByIndex(0);   //διαβαζεις τον αισθτήρα
   if (rawtemp >= (readings[i-1]-3) || (rawtemp<= (readings[i-1] +3) // το εχω γραψει λαθος.. αν i=0 τοτε δεν δουλευει παει στη θεση -1
     {
      // subtract the first reading:
      if ((i+1) == 10) total= total - readings[0];
      else  total= total - readings[i+1];  
     
      readings[i] = rawtemp;
      // add the reading to the total:
      total= total + readings[i];       
      // advance to the next position in the array:  
      i++;
       if (i>=numReadings) i= 0;
      // calculate the average:
      average = total / numReadings;
      tempC = average;
    }
    else 
       //error ο αισθητήρας έστειλε λανθασμένη θερμοκρασία

      
   }
δεν εχω κοιτάξει για τυχών λάθη σύνταξης και ούτε το έχω κάνει compile..
__________________
3dpg.gr/3D Printers Greece

30lit amano-red cherry shrimp
60lit blue pearl shrimp
130lit hi-tech φυτεμένο RIP
Απάντηση με παράθεση
 
Page generated in 0,01776 seconds with 11 queries