|
DIY . Φτιάχτο μόνος σου Ο τίτλος τα λέει όλα. |
|
Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#18
|
||||
|
||||
![]()
Ωραίος! Το stilo ήταν ο εμπνευστής του δημιουργού του iAqua.
Μια παρατήρηση μόνο, αν είδα καλά τροφοδοτείς το arduino με 9v. Όχι ότι είναι κακό, αλλά το καλύτερο θα ήταν 7-7.5v ώστε να μην ζεσταίνεται αρκετά ο regulator για να ρίξει την τάση στα 5v. Σχετικά με τον κώδικα τώρα, σου ανεβάζω αυτά που χρειάζεσαι για να παίξει. Χρειάζεσαι και ένα BC337 για να μπορέσει να ντιμάρει. Η φωτοαντίσταση απλά ρυθμίζει την τάση που θα πάει στην οθόνη με βάσει το τι διαβάζει σαν εξωτερικό φωτισμό: Κώδικας:
const int lightSensorPin = A8; // analog pin for the ambient light sensor const int screenBrightPin = 8; // pwm pin for the LCD backlight byte screenDimLevel, screenDimSec, screenBrightMem, screenBrightness; Κώδικας:
pinMode(screenBrightPin, OUTPUT); pinMode(lightSensorPin, INPUT); // get screen settings from eeprom readScreenSettings(); analogWrite(screenBrightPin, screenBrightness); // turn up screen brightness right away Κώδικας:
// adjust brightness automatically unless touch event unsigned long pastSeconds; if (screenDimSec != 0) // if set to 0, we won't dim { if (screenDimLevel != 0) // if set to 0, we won't dim { if (backlightTouch == true) { pastSeconds = (currentTime - dimTime); if (pastSeconds > screenDimSec) backlightTouch = false; } else { autoBrightness(); } } } void autoBrightness() { int photocellReading = analogRead(lightSensorPin); // map the photo sensor value of 0-1023 directly to the PWM output of 0-255 int brightnessLevel=map(photocellReading, 0, 1023, 0, 255); // can't get brighter than 255, must be at least 1 or it's off brightnessLevel = constrain(brightnessLevel, 5, 255); int diff=brightnessLevel-backLight; if (diff < 0) { diff = ((diff - diff) - diff); } if (diff > 25) // we only adjust brightness if it's more than a 10% change from where we are now { rampScreenBrightness(backLight, brightnessLevel); } } // smoothly ramps the screen brightness from one level to another void rampScreenBrightness(byte fromLevel, byte toLevel) { if (fromLevel < toLevel) { while (fromLevel < toLevel) { analogWrite(screenBrightPin, fromLevel); fromLevel++; Alarm.delay(5); } } else if (fromLevel > toLevel) { while (fromLevel > toLevel) { analogWrite(screenBrightPin, fromLevel); fromLevel--; Alarm.delay(5); } } backLight = toLevel; } void readScreenSettings() { screenDimLevel = EEPROM.read(29); //Brightness during idle screenBrightMem = EEPROM.read(31);//Brightness during operation if (screenBrightMem > 10) { screenBrightMem = 10; EEPROM.update(31, 10); } screenBrightness = screenBrightMem * 25; } Καλό θα ήταν να τα συμπεριλάβεις για να παίξει σωστά, αλλά μετά θα πρέπει να φτιάξεις και τις κατάλληλες επιλογές στο μενού ώστε να ορίσεις εσύ πότε θα είναι το idle. Αλλιώς δεν ξέρω αν μπορεί να γίνει κατευθείαν από τον κώδικα. Πχ. να διαβάζει σαν default screen settings μια συγκεκριμένη τιμή: Κώδικας:
screenDimSec = EEPROM.read(30); //How long to wait for idle Κώδικας:
EEPROM.update(30, 30); Κώδικας:
// default screen settings EEPROM.update(29, 3); EEPROM.update(31, 255); |
Tags |
aquarium controller, arduino, iaqua |
Συνδεδεμένοι χρήστες που διαβάζουν αυτό το θέμα: 1 (0 μέλη και 1 επισκέπτες) | |
|
|
![]() |
||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
arduino απορια | gregkn73 | DIY . Φτιάχτο μόνος σου | 4 | 20-11-14 03:20 |
arduino controller | ikaria_jim | DIY . Φτιάχτο μόνος σου | 5 | 09-02-14 16:21 |
Arduino aquarium controller | chris the trik | DIY . Φτιάχτο μόνος σου | 33 | 06-04-10 20:23 |
Προγραμματισμός σεμιναρίων | ΠΣΦΕ | Πανελλήνιος Σύλλογος Φίλων του Ενυδρείου | 33 | 03-12-07 09:58 |
Σκέψεις - προγραμματισμός - απόψεις | KwstasV | DIY . Φτιάχτο μόνος σου | 10 | 12-02-07 14:58 |