Σελίδα 1 από 4 1 2 3 ... ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 35

Θέμα: Ερωτήσεις σχετικά με το ARDUINO

  1. #1
    Μέλος Το avatar του χρήστη aris285
    Όνομα
    Αρης
    Εγγραφή
    Jul 2010
    Περιοχή
    Ελευσινα
    Μηνύματα
    1.637

    Προεπιλογή Ερωτήσεις σχετικά με το ARDUINO

    Καλησπέρα σε όλους. Άρχισα να κάνω τα πρώτα βήματα στο Arduino τον τελευταίο καιρό και θα σας ζαλίσω με ερωτήσεις σε αυτο το θέμα. υπομονη και μην βαρατε τον νεο...

    απορία πρωτη. στον παρακατω κωδικα αναβοσβήνει ενα led 10 φορες οταν πατηθει το button και γινει η ''i=10'' .
    πως θα κανω να ανανεωνετε η ''i'' πατωντας το button ενω τρεχει η while?

    Κώδικας:
    const int led = 5;
    const int button = 6;
    int buttonstate;
    int i = 0;
    
    
    void setup() {
        
        pinMode (led, OUTPUT);
        pinMode (button, INPUT_PULLUP); // internal pull up. Or "digitalWrite (button, HIGH);"
        digitalWrite (led, LOW);
        
        
    }
    
    
    void loop() {
        
        buttonstate = digitalRead(button);
        if (buttonstate == LOW) {
            i = 10;
        }
        
        while (i > 0) {
            digitalWrite(led, HIGH);
            delay (1000);
            digitalWrite(led, LOW);
            delay (1000);
            i = i - 1;
        }
        
    }

    0 Not allowed! Not allowed!

  2. #2
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    1. Όταν πατάς το κουμπί το i γίνετε 10 και στην while κάθε φορά το μειώνει κατά 1 μέχρι να γίνει 0.
    2.
    Κώδικας:
    void loop() {
        buttonstate = digitalRead(button);
        if (buttonstate == LOW) {
            i = 10;
        }
    
        
        while (i > 0) {
            buttonstate = digitalRead(button);
            if (buttonstate == LOW) {
                i = 10;
            }
    
            digitalWrite(led, HIGH);
            delay (1000);
            digitalWrite(led, LOW);
            delay (1000);
            i = i - 1;
        }
        
    }
    Όπως θα παρατηρήσεις το κουμπί θα πρέπει να το κρατάς πολύ ώρα για να πιάσει, αυτό συμβαίνει γιατί έχεις την delay και 'κολλάει' σε εκείνο το σημείο ο κώδικας. Κανονικά θα έπρεπε να έχεις την millis αλλά θα τα μάθεις αυτά στην πορεία.

    2 Not allowed! Not allowed!

  3. #3
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Εαν πατηθει το Button ενω εισαι 'μεσα' στη Delay, τοτε το προγραμμα που εκανες δεν θα το αντιληφθει.


    Οποτε ή σπας τα Delay() σε πολυ μικροτερα χρονικα διαστηματα και χρησιμοποιεις μετρητες ή το κανεις με διακοπες.

    Κώδικας:
    const int led = 5;
    const int button = 6;
    volatile int i = 0;
    
    
    
    
    void setup() 
    {
        
        pinMode (led, OUTPUT);
        pinMode (button, INPUT_PULLUP); // internal pull up. Or "digitalWrite (button, HIGH);"
        digitalWrite (led, LOW);
        attachInterrupt(digitalPinToInterrupt(button), refresh, LOW);
    }
    
    
    
    
    void loop() 
    {
        if (i > 0) 
        {
            digitalWrite(led, HIGH);
            delay (1000);
            digitalWrite(led, LOW);
            delay (1000);
            i = i - 1;
        }
    }
    
    
    void refresh() 
    {
      i=10;
    }
    Απλα θα πρεπει να μπει το Button σε Pin που υποστηριζει εξωτερικη διακοπη.


    EDIT: ή το κανεις με την millis() που αναφερει ο Στεφανος. Τωρα τη θυμηθηκα

    2 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    Του Σάββα είναι πιο σωστό (και καθαρό) αλλά επικίνδυνο για αρχάριο γιατί το debug είναι δύσκολο.

    0 Not allowed! Not allowed!

  5. #5
    Μέλος Το avatar του χρήστη aris285
    Όνομα
    Αρης
    Εγγραφή
    Jul 2010
    Περιοχή
    Ελευσινα
    Μηνύματα
    1.637

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Fire Doger Εμφάνιση μηνυμάτων
    1. Όταν πατάς το κουμπί το i γίνετε 10 και στην while κάθε φορά το μειώνει κατά 1 μέχρι να γίνει 0.
    2.
    Κώδικας:
    void loop() {
        buttonstate = digitalRead(button);
        if (buttonstate == LOW) {
            i = 10;
        }
    
        
        while (i > 0) {
            buttonstate = digitalRead(button);
            if (buttonstate == LOW) {
                i = 10;
            }
    
            digitalWrite(led, HIGH);
            delay (1000);
            digitalWrite(led, LOW);
            delay (1000);
            i = i - 1;
        }
        
    }
    Όπως θα παρατηρήσεις το κουμπί θα πρέπει να το κρατάς πολύ ώρα για να πιάσει, αυτό συμβαίνει γιατί έχεις την delay και 'κολλάει' σε εκείνο το σημείο ο κώδικας. Κανονικά θα έπρεπε να έχεις την millis αλλά θα τα μάθεις αυτά στην πορεία.
    googlαροντας μαθαινεις. millis λιπον.

    0 Not allowed! Not allowed!

  6. #6
    Μέλος Το avatar του χρήστη eleCtroAsxetos
    Όνομα
    Δημητρης
    Εγγραφή
    Aug 2010
    Περιοχή
    Ηράκλειο
    Μηνύματα
    829

    Προεπιλογή

    καλή η millis αλλα δεν ξερω τι ακριβως προβλημα (hardware μαλλον ασυννενοησια...) ειχε το αρντουίνο μου όταν τη χρησιμοποίησα τελευταία φορα δεν καταφερα να την κανω να δουλέψει σωστά. Στην περιπτωση μου ειχα το αρντουινο να ελεγχει με pwm σημα ενα μοσφετ που με τη σειρα του θέρμαινε μια αντίσταση. Ειχα βαλει τη millis για να αναβοσβηνει ανα δευτερολεπτο ενα λεντακι οταν η θερμοκρασία ανεβαινε πάνω απο ενα οριο και να σβηνει κατω απο αυτο. Το λεντακι αναβοσβηνε κανονικα οσο θυμαμαι αλλα μετα δεν έσβηνε μετά παρα το οτι υπηρχαν οι αντιστοιχες εντολες στον κώδικα κατι κολλουσε το ποδαρακι στο HIGH. Ακρη μετα απο απειρο ψαξιμο δεν μπορεσα να βρω παρα το οτι ολοι μου ελεγαν οτι ο κωδικας ηταν σωστος και το παρατησα. Λεω δε μας παρατας για λεντακι!

    0 Not allowed! Not allowed!

  7. #7
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Ανεβασε το κωδικα ή κανε Link το ποστ.Μαρεσουν αυτα

    1 Not allowed! Not allowed!

  8. #8
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    Όταν δουλεύει για λίγο και μετά χαλάει ή έχεις μπέρδεμα στα interrupt ή έκανε overflow o stack pointer ή βγήκες εκτός ορίων σε κάποια μεταβλητή και εκτελούσε κουτουρού εντολές.

    0 Not allowed! Not allowed!

  9. #9
    Μέλος Το avatar του χρήστη eleCtroAsxetos
    Όνομα
    Δημητρης
    Εγγραφή
    Aug 2010
    Περιοχή
    Ηράκλειο
    Μηνύματα
    829

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από SavKok Εμφάνιση μηνυμάτων
    Ανεβασε το κωδικα ή κανε Link το ποστ.Μαρεσουν αυτα
    δυστυχως δεν υπάρχουν ποια αυτοι οι κωδικες ηταν περσινη υποθεση οταν σεταρα το ρυθμιζομενο κολλητηρι μου και προσπαθούσα να βαλω αυτο το λεντακι σαν ενδειξη οτι το κολλητηρι επιασε τη σωστη θερμοκρασια οποτε ειναι ετοιμο προς χρηση. Τελικα κρατησα μονο τον απλο κωδικα και τελικα μπηκε ενα λεντακι που επαιρνε μονο αναλογικη εναυση απο την πύλη του μοσφετ.
    Και θα ηθελα πραγματικα να το συζητησουμε. Το ειχα κουβεντιάσει κυρίως με τον δημιουργο του αρχικου προτζεκτ-κωδικα αλλα τελικα το παρατησαμε.

    0 Not allowed! Not allowed!

  10. #10
    Μέλος Το avatar του χρήστη aris285
    Όνομα
    Αρης
    Εγγραφή
    Jul 2010
    Περιοχή
    Ελευσινα
    Μηνύματα
    1.637

    Προεπιλογή

    Από τι διάβασα η millis είναι ένας "counter"που τρέχει ασταμάτητα. Και σε τι τιμή κάνει overflow φήμες λένε σε 50 μέρες λειτουργεί ας μιλάμε για τεράστια τιμή έτσι?

    0 Not allowed! Not allowed!

Σελίδα 1 από 4 1 2 3 ... ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Ερωτήσεις σχετικά με χρώματα φάσεων
    By dog80 in forum Ηλεκτρολογικά
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 08-10-15, 11:11
  2. Απαντήσεις: 16
    Τελευταίο Μήνυμα: 26-12-13, 19:33
  3. ερωτήσεις σχετικά με το TDA7375
    By ninolas in forum Κυκλώματα Εικόνας-'Ηχου & Φωτισμού
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 17-09-13, 13:34
  4. Απαντήσεις: 29
    Τελευταίο Μήνυμα: 02-10-11, 06:36
  5. Απαντήσεις: 17
    Τελευταίο Μήνυμα: 05-05-07, 10:46

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας