Επιστροφή στο Forum : Άναμα λαμπών με τυχαία σειρά?????
Καλημέρα σε όλους,
Έχω 10 λάμπες 20W η καθεμία, θέλω να ανάβουν 4 λάμπες ταυτόχρονα με το πάτημα ενός διακόπτη αλλά κάθε φορά που ανοίγει και κλείνει ο διακόπτης να ανάβουν διαφορετικές λάμπες με τυχαία σειρά.
Είναι ευκολό να γίνει κάτι τέτοιο και πως θα μπορούσα να το κάνω?
Ευχαριστώ για την βοήθεια.
Με μικροεπεξεργαστη ειναι πολυ ευκολο. Αναλογα του πως θελεις να φαινονται οι λαμπες που αναβουν μπορεις να επιλεξεις ψευδοτυχαια ακολουθια που ειναι πιο ευκολο 'η εντελως τυχαια που απαιτει λιγο ποιο πολυπλοκη διαδικασια.
Με μικροεπεξεργαστη ειναι πολυ ευκολο. Αναλογα του πως θελεις να φαινονται οι λαμπες που αναβουν μπορεις να επιλεξεις ψευδοτυχαια ακολουθια που ειναι πιο ευκολο 'η εντελως τυχαια που απαιτει λιγο ποιο πολυπλοκη διαδικασια.
mariosm μπορείς να πεις γενικά πως θα έχουμε εντελώς τυχαία επιλογή;; Με κώδικα δεν μπορεί να γίνει κάτι τέτοιο, εκτός και αν πάρουμε κάποια είσοδο που μεταβάλεται εντελώς τυχαία αλλά πως μπορεί να γίνει κάτι τέτοιο;
Η γνώμη μου είναι ότι μόνο ψευδοτυχαίο πρόγραμμα μπορείτε να έχετε διότι δεν γνωρίζω
να υπάρχει πρόγραμμα η/υ που να μην επαναλαμβάνει μετά από κάποιο χρονικό διάστημα.
Αφού λοιπόν θα είναι μια δήθεν τυχαία σειρά αναλαμπών προτείνω να μην ασχοληθείτε με
το μέρος του «τυχαίου».
Εάν για παράδειγμα οδηγήσεις απλά ένα chip ακολουθίας όπως το 4017 που έχει 10 εξόδους
και έχεις μπερδεμένη σειρά για τις λάμπες όπως 0738149625 τότε δεν θα καταλάβει κάποιος
ότι η ακολουθία δεν είναι τυχαία εάν η συχνότητα εναλλαγής είναι γρήγορη.
http://www.electro-tech-online.com/electronic-projects/327-10-channel-light-bulb-sequencer.html (http://www.electro-tech-online.com/electronic-projects/327-10-channel-light-bulb-sequencer.html)
Ευχαριστώ για τις απαντήσεις.
Tο όλο κύκλωμα θα είναι συνδεδεμένο σε έναν διακόπτη on/off. Εγώ θέλω κάθε φορά που ανοίγει ο διακόπτης να ανάβουν 4 λάμπες από τις 10 με τυχαία επιλογή ή ψευδοτυχαία και να παραμένουν αναμένες εώς ότου κλείσει ο διακόπτης.
Το βασικό μου πρόβλημα είναι ότι θέλω η πλακέτα να βγει όσο το δυνατόν μικρότερη. Εάν έχετε κάποια πρόταση με pic θα με εξυπηρετούσε πάρα πολύ.
Thanxxx...
Και εγώ με μικροεπεξεργαστή θα το έκανα.
Για την επιλογή τυχαίου αριθμού: έχεις ένα timer που αυξάνει η τιμή του σε κάθε κύκλο του επεξεργαστή.
Όταν έχεις πατημένο το κουμπί διαβάζεις την τιμή του timer και ανάλογα επιλέγεις έναν από τους πιθανούς συνδυασμούς.
Το βασικό μου πρόβλημα είναι ότι θέλω η πλακέτα να βγει όσο το δυνατόν μικρότερη.
Το μεγεθος της πλακετας θα εξαρτηθει απο τα δεκα κυκλωματα ισχυος που θα χρησιμοποιησεις. Ολο το υπολοιπο εχει μεγεθος οσο χωρο πιανει ενας μικροεπεξεργαστης.
Όταν έχεις πατημένο το κουμπί διαβάζεις την τιμή του timer και ανάλογα επιλέγεις έναν από τους πιθανούς συνδυασμούς.
Αυτο ειναι μια σωστη λυση αλλα οποιοσδηποτε τροπος και αν χρησιμοποιηθει πρεπει στο προγραμμα να υπαρχει μια database που να περιεχει ολους τους συνδιασμους των 10 εξοδων ανα 4 ωστε σε καθε επομενο σταδιο να μην υπαρχει πιθανοτητα να αναψουν λιγοτερες ή περισσοτερες απο 4.
Επειδή με τον προγραμματισμό δεν τα πάω πολύ καλά υπάρχει κάποιο παραδειγμα ώστε να μπορέσω να έχω κάποια βάση?
οριστε εγραψα εγω ενα απλο για σενα στην arduino-γλωσσα
int lamp1;
int lamp2;
int lamp3;
int lamp4;
int i;
int Lamps[11]={
0,4,5,6,7,8,9,10,11,12,13};
void setup(){
for (i=1; i<12; i++){
pinMode(i,OUTPUT);
}
pinMode(2,INPUT);
digitalWrite(2,HIGH);
attachInterrupt(0, updatelamps, CHANGE);
}
void loop(){
}
void updatelamps(){
lamp1 = random(0, 11);
while (((lamp2 = random(0, 11)) == lamp1)) {
};
while ( ((lamp3 = random(0, 11)) == lamp1) || ((lamp3 = random(0, 11)) == lamp2) ) {
};
while ( ((lamp4 = random(0, 11)) == lamp1) || ((lamp4 = random(0, 11)) == lamp2) || ((lamp4 = random(0, 11)) == lamp3) ) {
};
for (i=1; i<12; i++){
digitalWrite(i,LOW);
}
digitalWrite(lamp1,HIGH);
digitalWrite(lamp2,HIGH);
digitalWrite(lamp3,HIGH);
digitalWrite(lamp4,HIGH);
}
κομψή η λύση του Ηρακλή σε ότι αφορά τον ορισμο τον 4 τυχαίων αριθμών. Δεν έχω ξαναδεί τη γλώσσα αυτή και έχω 2 ερωτήσεις:
1) Ο πίνακας Lamps σε τί χρησιμεύει;
2)Το πιν 2 γιατί ορίζεται ως είσοδος και μετά γράφεται ως έξοδος (high);
ειναι η γλωσσα του arduino
το lamp[1] αντιστοιχει στο Pin 4 τοy arduino δλδ στο Pin 5 του atmega
αν το κανεις εισοδο και μετα HIGH τοτε εχεις μια pull up αντισταση για το button που δεν χρειαζεται να την βαλεις εξωτερικα
για να ειναι ακομα πιο τυχαιο θα μπορουσες να μην εβαζες και πυκνωτη για debounce στο κουμπι ετσι ωστε να ετρεχε 3-4 φορες
Μπορει να γινει ακομα πιο πολυπλοκο μιας και υπαρχουν adc ελευθερα για ποντεσιομετρα για να ρυθμιζεις διαφορες παραμετρους
ή να αυξησεις τις λαμπες
ειναι η γλωσσα του arduino
το lamp[1] αντιστοιχει στο Pin 4 τοy arduino δλδ στο Pin 5 του atmega
ok, ευχαριστώ.
Στο τέλος του προγράμματος δεν θα ήταν σωστό:
for ... {
digitalWrite (Lamps[i], LOW)
}
και
digitalWrite (Lamps[lamp1], HIGH)
digitalWrite (Lamps[lamp2], HIGH)
...
;
for (i=1; i<12; i++){
digitalWrite(i,LOW);
}
digitalWrite(lamp1,HIGH);
digitalWrite(lamp2,HIGH);
digitalWrite(lamp3,HIGH);
digitalWrite(lamp4,HIGH);
}
οριστε το εχω γραψει
Ευχαριστώ και πάλι,
Χίλια συγνώμη εάν φαίνομαι αχάριστος, αλλά μήπως θα μπορούσε το παραπάνω πρόγραμμα να μετατραπεί για λειτουργεία σε pic μιας και έχω πολύ περισσότερη οικειότητα με τους εν λόγω μικροελεγτές? Τους ΑΤmega δεν τους έχω δουλέψει καθόλου.
Ευχαριστώ.
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.