0
Το δοκίμασα μου έβγαζε ένα σφάλμα και απ'ότι κατάλαβα ήτανε γιατί δεν είχα την
συγκεκριμένη βιβλιοθήκη περασμένη μέσα,την αποθήκευσα,και τώρα έχω ξεκινήση την δοκιμή μέχρι στιγμής
αυτός ο τρόπος λειτουργεί και παράλληλα προσπαθώ να καταλάβω και να φτιάξω και τους κώδικες που
μου έστειλαν ο SavKok και ο dalai για να κάνω δοκιμές και με τους άλλους κώδικες.
Έτσι μαθαίνω κιόλας.
Ευχαριστώ πολύ για τον χρόνο σου.
Τώρα κοιτάω τον κώδικα που μου έστειλες και προσπαθώ να τον φτιάξω για την δουλειά που τον θέλω,
αλλά δεν θα προλάβω σήμερα γιατί σε λίγο θα φύγω πάλι για δουλειά,θα τον συνεχίσω πάλι το βράδυ.
Έκανα αλλαγή από delay(10) σε delay(1000) και το δοκίμασα σε serial.print και πάλι με την ίδια ταχύτητα κατεβαίνει ο χρόνος.
Μήπως χρειάζεται να αλλάξω και κάτι άλλο?
Ευχαριστώ πολύ.Για οτιδήποτε άλλο θα ξαναστείλω.
Δικιά μου η βλακεία συγνώμη εγώ έκανα λάθος αντί να αλλάξω και τις δύο εντολές delay(10) άλλαξα μόνο την μία.
Τελευταία επεξεργασία από το χρήστη keap : 12-11-15 στις 13:07
SavKok
Δικιά μου η βλακεία συγνώμη εγώ έκανα λάθος αντί να αλλάξω και τις δύο εντολές delay(10) άλλαξα μόνο την μία.
Μια χαρά μου δουλεύει εμένα, έφτιαξα μόνο τα διαστήματα γιατί έτρωγε έναν χαρακτήρα στα δεξιά της οθόνης. Δεν καταλαβαίνω, μια χαρά μου πάει, κάνει κανονικά rollover στο χρόνο αυτό που θέλεις.
Κώδικας:#include <LiquidCrystal.h> //η βιβλιοθήκη για οθόνες LCD χαρακτήρων, https://github.com/arduino/Arduino/tree/master/libraries/LiquidCrystal #include<CountUpDownTimer.h> //η βιβλιοθήκη για τον timer, https://github.com/AndrewMascolo/CountUpDownTimer // ================================== #define _60min 1 //=====>ΒΑΛΕ ΕΔΩ ΠΟΣΑ ΛΕΠΤΑ ΘΕΛΕΙΣ ΝΑ ΕΙΝΑΙ Ο ΚΥΚΛΟΣ #define pumpPin1 6 //ΔΩΣΕ ΤΟΝ ΑΡΙΘΜΟ ΤΟΥ ΨΗΦΙΑΚΟΥ PIN ΓΙΑ ΕΞΟΔΟ ΑΝΤΛΙΑΣ 1 #define pumpPin2 7 //ΔΩΣΕ ΤΟΝ ΑΡΙΘΜΟ ΤΟΥ ΨΗΦΙΑΚΟΥ PIN ΓΙΑ ΕΞΟΔΟ ΑΝΤΛΙΑΣ 2 #define Arrow 1 //ΔΩΣΕ ΟΡΙΣΜΟ ΘΕΣΗΣ ΓΙΑ ΤΟ ΕΙΚΟΝΙΔΙΟ ARROW ΣΤΗΝ ΜΝΗΜΗ USER ΧΑΡΑΚΤΗΡΩΝ ΤΗΣ LCD // ================================== //https://www.arduino.cc/en/Reference/BooleanVariables boolean relay1State=true; //boolean ΠΟΥ ΔΙΝΕΙ ΚΑΤΑΣΤΑΣΗ ΑΝΤΛΙΑΣ 1 boolean relay2State=false; //boolean ΠΟΥ ΔΙΝΕΙ ΚΑΤΑΣΤΑΣΗ ΑΝΤΛΙΑΣ 2 byte RIGHT_ARROW[8] = { //ΔΕΣ https://www.arduino.cc/en/Reference/Array B00000, B00100, B11110, B11111, B11110, B00100, B00000, B00000 }; // ================================== LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //ΟΡΙΣΜΟΣ ΚΑΙ ΑΡΧΙΚΟΠΟΙΗΣΗ ΟΘΟΝΗΣ, ΔΕΣ ΒΙΒΛΙΟΘΗΚΗ ΓΙΑ PIN ASSIGNEMENTS CountUpDownTimer Timer60Minutes(DOWN);//ΟΡΙΣΜΟΣ ΚΑΙ ΑΡΧΙΚΟΠΟΙΗΣΗ TIMER, ΔΕΣ ΒΙΒΛΙΟΘΗΚΗ // ================================== void setup() //ΑΡΧΙΚΟΠΟΙΗΣΗ { pinMode(pumpPin1, OUTPUT); //ΚΑΘΟΡΙΣΜΟΣ PIN ΑΝΤΛΙΑΣ 1 ΩΣ ΕΞΟΔΟΣ pinMode(pumpPin2, OUTPUT); //ΚΑΘΟΡΙΣΜΟΣ PIN ΑΝΤΛΙΑΣ 2 ΩΣ ΕΞΟΔΟΣ lcd.begin(16,2); //ΕΚΚΙΝΗΣΗ ΟΘΟΝΗΣ lcd.createChar(Arrow, RIGHT_ARROW); //ΔΗΜΙΟΥΡΓΙΑ CUSTOM CHARACTER ΣΤΗ ΘΕΣΗ 1 ΤΗΣ ΜΝΗΜΗΣ ΟΘΟΝΗΣ lcd.setCursor(0, 0); //Ο ΚΑΡΣΟΡΑΣ ΣΕ ΠΑΝΩ ΓΡΑΜΜΗ 0, ΘΕΣΗ 0 (ΠΑΝΩ ΑΡΙΣΤΕΡΑ) lcd.print(" Control System "); //ΤΥΠΩΝΕΙ ΜΗΝΥΜΑ lcd.setCursor(5, 1); //Ο ΚΑΡΣΟΡΑΣ ΣΕ ΚΑΤΩ ΓΡΑΜΜΗ 1, ΘΕΣΗ 5 lcd.print("2 Pump"); //ΤΥΠΩΝΕΙ ΜΗΝΥΜΑ delay(5000); //ΕΙΣΑΓΩΓΗ ΚΑΘΥΣΤΕΡΗΣΗς 5 ΔΕΥΤΕΡΟΛΕΠΤΩΝ (5000mS) lcd.clear(); //ΚΑΘΑΡΙΣΜΟΣ ΟΘΟΝΗΣ Timer60Minutes.SetTimer(0,_60min,0); //ΠΡΟΡΥΘΜΙΣΗ TIMER ΓΙΑ 0 ΩΡΕΣ, 59 ΛΕΠΤΑ, 59 ΔΕΥΤΕΡΟΛΕΠΤΑ Timer60Minutes.StartTimer(); //ΕΚΚΙΝΗΣΗ TIMER digitalWrite(pumpPin1, HIGH); //H ANTLIA 1 EINAI ON, digitalWrite(pumpPin2, LOW); //H ANTLIA 2 EINAI OFF lcd.setCursor(6,0); //Ο ΚΑΡΣΟΡΑΣ ΣΕ ΠΑΝΩ ΓΡΑΜΜΗ 0, ΘΕΣΗ 6 lcd.write(Arrow); //ΤΥΠΩΝΕΙ ΒΕΛΑΚΙ lcd.print("PUMP1 ON "); //ΤΥΠΩΝΕΙ ΜΗΝΥΜΑ lcd.setCursor(6,1); //Ο ΚΑΡΣΟΡΑΣ ΣΕ ΚΑΤΩ ΓΡΑΜΜΗ 1, ΘΕΣΗ 6 lcd.print(" PUMP2 OFF"); //ΤΥΠΩΝΕΙ ΜΗΝΥΜΑ } // ================================== void loop() //ΚΥΡΙΟΣ ΒΡΟΓΧΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ { Timer60Minutes.Timer(); displayTime60Minutes(0,0,Timer60Minutes); if(Timer60Minutes.TimeCheck(0,0,0) == true) { Timer60Minutes.SetTimer(0,_60min,0); relay1State = !relay1State; relay2State = !relay2State; if((relay1State == true) && (relay2State == false)) { //ΤΟ LCD ΘΑ ΦΑΙΝΕΤΑΙ ΕΤΣΙ: //=================// //59:59 >PUMP1 ON // // PUMP2 OFF// //=================// digitalWrite(pumpPin1, HIGH); digitalWrite(pumpPin2, LOW); lcd.setCursor(6,0); lcd.write(Arrow); lcd.print("PUMP1 ON "); lcd.setCursor(6,1); lcd.print(" PUMP2 OFF"); } else if((relay1State == false) && (relay2State == true)) { //ΤΟ LCD ΘΑ ΦΑΙΝΕΤΑΙ ΕΤΣΙ: //=================// //59:59 PUMP1 OFF// // >PUMP2 ON // //=================// digitalWrite(pumpPin1, LOW); digitalWrite(pumpPin2, HIGH); lcd.setCursor(6,0); lcd.print(" PUMP1 OFF"); lcd.setCursor(6,1); lcd.write(Arrow); lcd.print("PUMP2 ON "); } } } // ================================== void displayTime60Minutes(int col, int row, CountUpDownTimer)// { int minutes, seconds; minutes = Timer60Minutes.ShowMinutes(); seconds = Timer60Minutes.ShowSeconds(); lcd.setCursor(col, row); if(minutes < 10) lcd.print("0"); lcd.print(minutes,DEC); lcd.print(":"); if(seconds < 10) lcd.print("0"); lcd.print(seconds,DEC); } // ==================================
ναι αλλά άμα το κάνεις με dleay η μια ώρα στο τέλος θα είναι μια ώρα και κάτι δευτερολεπτα
γιατί τα serial.kati kai ta if παίρνουν χρόνο
Ναι αλλά πρόσεξα ότι έχεις βάλει το <PUMP ON 1 - PUMP 2 OFF > και στο void setup και στο void loop και γι αυτό πιστεύω ότι μου παίζει δύο φορές την ίδια εντολή.Κοιταξέ το και πέσμου αν κάνω κάπου λάθος εγώ.
Ευχαριστώ και για την ανάλυση.Μ'άρεσε που μου ανάλυσες και τον κώδικα που έγραψα εγώ είσαι φοβερός.Αλλά σίγουρα αφιέρωσες πολύ χρόνο και πάλι ευχαριστώ.
Στη setup() βάζω >PUMP1 ON και PUMP2 OFF για να αρχικοποιηθούν τα ρελέ των αντλιών. Εκτός και αν δεν θες να είναι κανένα ενεργό, οπότε τα γυρίζεις και τα δύο OFF. Στη loop() μετά γίνεται η εναλλαγή τους κάθε μια ώρα.