PDA

Επιστροφή στο Forum : Άναμα λαμπών με τυχαία σειρά?????



suicida
27-01-11, 00:07
Καλημέρα σε όλους,

Έχω 10 λάμπες 20W η καθεμία, θέλω να ανάβουν 4 λάμπες ταυτόχρονα με το πάτημα ενός διακόπτη αλλά κάθε φορά που ανοίγει και κλείνει ο διακόπτης να ανάβουν διαφορετικές λάμπες με τυχαία σειρά.

Είναι ευκολό να γίνει κάτι τέτοιο και πως θα μπορούσα να το κάνω?

Ευχαριστώ για την βοήθεια.

mariosm
27-01-11, 10:32
Με μικροεπεξεργαστη ειναι πολυ ευκολο. Αναλογα του πως θελεις να φαινονται οι λαμπες που αναβουν μπορεις να επιλεξεις ψευδοτυχαια ακολουθια που ειναι πιο ευκολο 'η εντελως τυχαια που απαιτει λιγο ποιο πολυπλοκη διαδικασια.

somone
27-01-11, 11:59
Με μικροεπεξεργαστη ειναι πολυ ευκολο. Αναλογα του πως θελεις να φαινονται οι λαμπες που αναβουν μπορεις να επιλεξεις ψευδοτυχαια ακολουθια που ειναι πιο ευκολο 'η εντελως τυχαια που απαιτει λιγο ποιο πολυπλοκη διαδικασια.

mariosm μπορείς να πεις γενικά πως θα έχουμε εντελώς τυχαία επιλογή;; Με κώδικα δεν μπορεί να γίνει κάτι τέτοιο, εκτός και αν πάρουμε κάποια είσοδο που μεταβάλεται εντελώς τυχαία αλλά πως μπορεί να γίνει κάτι τέτοιο;

spyropap
27-01-11, 12:22
Η γνώμη μου είναι ότι μόνο ψευδοτυχαίο πρόγραμμα μπορείτε να έχετε διότι δεν γνωρίζω
να υπάρχει πρόγραμμα η/υ που να μην επαναλαμβάνει μετά από κάποιο χρονικό διάστημα.

Αφού λοιπόν θα είναι μια δήθεν τυχαία σειρά αναλαμπών προτείνω να μην ασχοληθείτε με
το μέρος του «τυχαίου».
Εάν για παράδειγμα οδηγήσεις απλά ένα 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)

suicida
27-01-11, 12:42
Ευχαριστώ για τις απαντήσεις.
Tο όλο κύκλωμα θα είναι συνδεδεμένο σε έναν διακόπτη on/off. Εγώ θέλω κάθε φορά που ανοίγει ο διακόπτης να ανάβουν 4 λάμπες από τις 10 με τυχαία επιλογή ή ψευδοτυχαία και να παραμένουν αναμένες εώς ότου κλείσει ο διακόπτης.
Το βασικό μου πρόβλημα είναι ότι θέλω η πλακέτα να βγει όσο το δυνατόν μικρότερη. Εάν έχετε κάποια πρόταση με pic θα με εξυπηρετούσε πάρα πολύ.

Thanxxx...

Gant
27-01-11, 12:47
Και εγώ με μικροεπεξεργαστή θα το έκανα.
Για την επιλογή τυχαίου αριθμού: έχεις ένα timer που αυξάνει η τιμή του σε κάθε κύκλο του επεξεργαστή.

Όταν έχεις πατημένο το κουμπί διαβάζεις την τιμή του timer και ανάλογα επιλέγεις έναν από τους πιθανούς συνδυασμούς.

mariosm
27-01-11, 13:18
Το βασικό μου πρόβλημα είναι ότι θέλω η πλακέτα να βγει όσο το δυνατόν μικρότερη.

Το μεγεθος της πλακετας θα εξαρτηθει απο τα δεκα κυκλωματα ισχυος που θα χρησιμοποιησεις. Ολο το υπολοιπο εχει μεγεθος οσο χωρο πιανει ενας μικροεπεξεργαστης.


Όταν έχεις πατημένο το κουμπί διαβάζεις την τιμή του timer και ανάλογα επιλέγεις έναν από τους πιθανούς συνδυασμούς.

Αυτο ειναι μια σωστη λυση αλλα οποιοσδηποτε τροπος και αν χρησιμοποιηθει πρεπει στο προγραμμα να υπαρχει μια database που να περιεχει ολους τους συνδιασμους των 10 εξοδων ανα 4 ωστε σε καθε επομενο σταδιο να μην υπαρχει πιθανοτητα να αναψουν λιγοτερες ή περισσοτερες απο 4.

suicida
27-01-11, 14:30
Επειδή με τον προγραμματισμό δεν τα πάω πολύ καλά υπάρχει κάποιο παραδειγμα ώστε να μπορέσω να έχω κάποια βάση?

herctrap
27-01-11, 15:34
οριστε εγραψα εγω ενα απλο για σενα στην 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);
}

Gant
27-01-11, 15:58
κομψή η λύση του Ηρακλή σε ότι αφορά τον ορισμο τον 4 τυχαίων αριθμών. Δεν έχω ξαναδεί τη γλώσσα αυτή και έχω 2 ερωτήσεις:

1) Ο πίνακας Lamps σε τί χρησιμεύει;
2)Το πιν 2 γιατί ορίζεται ως είσοδος και μετά γράφεται ως έξοδος (high);

herctrap
27-01-11, 16:52
ειναι η γλωσσα του arduino

το lamp[1] αντιστοιχει στο Pin 4 τοy arduino δλδ στο Pin 5 του atmega

αν το κανεις εισοδο και μετα HIGH τοτε εχεις μια pull up αντισταση για το button που δεν χρειαζεται να την βαλεις εξωτερικα

για να ειναι ακομα πιο τυχαιο θα μπορουσες να μην εβαζες και πυκνωτη για debounce στο κουμπι ετσι ωστε να ετρεχε 3-4 φορες

Μπορει να γινει ακομα πιο πολυπλοκο μιας και υπαρχουν adc ελευθερα για ποντεσιομετρα για να ρυθμιζεις διαφορες παραμετρους

ή να αυξησεις τις λαμπες

Gant
27-01-11, 18:49
ειναι η γλωσσα του arduino
το lamp[1] αντιστοιχει στο Pin 4 τοy arduino δλδ στο Pin 5 του atmega


ok, ευχαριστώ.
Στο τέλος του προγράμματος δεν θα ήταν σωστό:

for ... {
digitalWrite (Lamps[i], LOW)
}
και
digitalWrite (Lamps[lamp1], HIGH)
digitalWrite (Lamps[lamp2], HIGH)
...

;

herctrap
27-01-11, 19:02
for (i=1; i<12; i++){
digitalWrite(i,LOW);
}
digitalWrite(lamp1,HIGH);
digitalWrite(lamp2,HIGH);
digitalWrite(lamp3,HIGH);
digitalWrite(lamp4,HIGH);
}

οριστε το εχω γραψει

suicida
27-01-11, 23:41
Ευχαριστώ και πάλι,

Χίλια συγνώμη εάν φαίνομαι αχάριστος, αλλά μήπως θα μπορούσε το παραπάνω πρόγραμμα να μετατραπεί για λειτουργεία σε pic μιας και έχω πολύ περισσότερη οικειότητα με τους εν λόγω μικροελεγτές? Τους ΑΤmega δεν τους έχω δουλέψει καθόλου.

Ευχαριστώ.