Εμφάνιση αποτελεσμάτων : 1 έως 8 από 8

Θέμα: Arduino, Έλεγχος εξόδου μετά από χρόνο

  1. #1
    Μέλος Το avatar του χρήστη NIKPAPAZOGLOU
    Όνομα
    Νίκος
    Εγγραφή
    Jul 2009
    Περιοχή
    Κομοτηνή
    Μηνύματα
    70

    Προεπιλογή Arduino, Έλεγχος εξόδου μετά από χρόνο

    Ένα μεγάλο γεια σε όλους και καλό Πάσχα να έχουμε
    Θέλω να κάνω τον αυτοματισμό αστέρα τριγώνου με Arduino.
    Το πρόβλημα είναι στην μεταγωγή από αστέρα σε τρίγωνο,
    δεν μπορώ να βρω τον τρόπο της καθυστέρησης,
    με την εντολή delay δεν γίνετε σωστά γιατί σταματά ο κύκλος

    του προγράμματος.(Αν πατήσω το στοπ δεν θα το εκτελέσει γιατί δεν θα το διαβάσει )
    Υπάρχει κάποια άλλη εντολή που μπορεί να κάνει αυτό που
    θέλω;

    0 Not allowed! Not allowed!
    Η πραγματικότητα είναι μια ψευδαίσθηση που οφείλεται στην έλειψη οινοπνεύματος

  2. #2
    Συντονιστής Το avatar του χρήστη nestoras
    Όνομα
    Παναγιώτης
    Εγγραφή
    Feb 2006
    Περιοχή
    Ξάνθη
    Μηνύματα
    4.615

    Προεπιλογή

    Θα πρέπει να βάλεις το STOP σαν είσοδο με χρήση interrupt.
    Δές εδώ:

    http://arduino.cc/en/Reference/attachInterrupt
    http://playground.arduino.cc/Code/Interrupts

    0 Not allowed! Not allowed!
    FreeBsD For Ever

  3. #3
    Μέλος Το avatar του χρήστη geoek4
    Όνομα
    askme
    Εγγραφή
    Mar 2014
    Περιοχή
    παντού
    Μηνύματα
    74

    Προεπιλογή

    Γεια χαρα φίλε!
    Υπάρχει η εντολή millis η οποία είναι ο εσωτερικός counter του arduino. Βαση αυτου του counter οριζεις τον χρονο που θες. Διάβασε το παράδειγμα Blink Without Delay

    0 Not allowed! Not allowed!

  4. #4
    Μέλος
    Εγγραφή
    Jun 2005
    Περιοχή
    Μεγάλο Πεύκο
    Μηνύματα
    152

    Προεπιλογή

    Το interrupt δεν το ηξερα και θα το δω.

    Εγω για αυτο το προβλημα εδωσα την παρακατω λυση: καθε 0.5sec, ελεγχος της παραμετρου, και αν ισχυει break.

    for (int x=0;x<240;x++)
    {
    delay(500);
    magnState = digitalRead(magnPin);

    if (magnState == HIGH) break;

    }

    0 Not allowed! Not allowed!

  5. #5
    Μέλος Το avatar του χρήστη NIKPAPAZOGLOU
    Όνομα
    Νίκος
    Εγγραφή
    Jul 2009
    Περιοχή
    Κομοτηνή
    Μηνύματα
    70

    Προεπιλογή

    Έχω δοκιμάσει με την millis αλλά δεν κατάφερα κάτι.
    Προσπάθησα να προσαρμόσω τον παρακάτω κώδικα στις δικές μου ανάγκες.
    /* Flashing LED Version 2
    * ------------------------
    *
    * Turns on and off a light emitting diode(LED) connected to a digital
    * pin, in intervals of 2 seconds using millis() function
    *
    */
    int ledPin = 13; // LED connected to digital pin 13
    unsigned long currentTime;
    unsigned long loopTime;

    void setup()
    {
    pinMode(ledPin, OUTPUT); // sets the digital pin as output
    currentTime = millis();
    loopTime = currentTime;
    }

    void loop()
    {
    currentTime = millis();
    if(currentTime >= (loopTime + 1000)){
    digitalWrite(ledPin, !digitalRead(ledPin)); // toggles the LED on/off
    loopTime = currentTime; // Updates loopTime
    }
    // Other processing can be done here
    }
    Η millis ξεκινά να μετρά από την στιγμή που τρέχει το πρόγραμμα, δεν μπορώ να την κάνω να μετρήσει όταν πατώ το μπουτόν ή αφού έχω μια έξοδο και μετά, έτσι ώστε να προσθέσω ένα χρόνο που μετά από αυτό θα πάρω το αποτέλεσμα που θέλω.
    Ίσως να γράφω με λάθος σειρά τον κώδικα..
    Υπάρχει τρόπος να μετρήσει όταν θέλω εγώ;

    0 Not allowed! Not allowed!
    Η πραγματικότητα είναι μια ψευδαίσθηση που οφείλεται στην έλειψη οινοπνεύματος

  6. #6
    Νέο Μέλος
    Όνομα
    Μανος
    Εγγραφή
    Feb 2009
    Περιοχή
    Ηράκλειο
    Μηνύματα
    27

    Προεπιλογή

    οριζεις μια μεταβλητη και αποθηκευεις τα millis οταν πατας το κουμπι και ελεχγεις ποσος χρονος περασε με millis()-μεταβλητη

    0 Not allowed! Not allowed!

  7. #7
    Μέλος Το avatar του χρήστη katmadas
    Όνομα
    Φανης
    Εγγραφή
    Apr 2006
    Περιοχή
    Θεσσαλονικη
    Μηνύματα
    2.927

    Προεπιλογή

    Ευκολακι ειναι μπορεις να χρησιμοποιησεις και το while
    απλα καλεσε την ρουτινα wait οταν την θελεις
    αυτη θα ψαχνει για 1000 ms το πατημα του κουμπιου:




    unsigned long currentTime = 0;//δηλωση παραμετρων
    unsigned long pastTime = 0;

    int wait = 1000;
    unsigned long timePassed = 0;


    void wait()
    {
    while(wait >= timePassed)
    {
    pastTime = currentTime;
    currentTime = millis();

    timePassed = currentTime - pastTime;

    if......
    {
    .....dosomething

    }
    else
    {
    break;
    }

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη katmadas : 17-04-14 στις 21:38 Αιτία: δηλωση μεταβλητης τιμεπασσ
    Καλοκαιρι ειναι αν ετσι νιωθεις....
    www.oramasolutions.com

    Linkedin

  8. #8
    Μέλος Το avatar του χρήστη NIKPAPAZOGLOU
    Όνομα
    Νίκος
    Εγγραφή
    Jul 2009
    Περιοχή
    Κομοτηνή
    Μηνύματα
    70

    Προεπιλογή

    Ευχαριστώ παιδιά,
    τελικά το έκανα με την εντολή millis()
    Με την κατάλληλη συνθήκη παίρνω μια φορά τον τρέχον χρόνο
    και μετά προσθέτω σε αυτόν τον χρόνο που θέλω για να έχω την καθυστέρηση.
    (Το πρόβλημα που είχα πριν ήταν ότι σε κάθε κύκλο διάβαζε τον χρόνο με αποτέλεσμα
    ποτέ να μην φτάνει στο millis + "my time")

    0 Not allowed! Not allowed!
    Η πραγματικότητα είναι μια ψευδαίσθηση που οφείλεται στην έλειψη οινοπνεύματος

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

  1. Απαντήσεις: 5
    Τελευταίο Μήνυμα: 01-05-19, 20:20
  2. Απαντήσεις: 2
    Τελευταίο Μήνυμα: 22-01-13, 02:43
  3. Έλεγχος θυρών εισόδου-εξόδου
    By ALAMAN in forum Μικροελεγκτές
    Απαντήσεις: 45
    Τελευταίο Μήνυμα: 04-05-10, 23:31
  4. τάση στα άκρα του πυκνωτή μετά απο χρόνο τ
    By diamadiss in forum Ερωτήσεις Θεωρίας
    Απαντήσεις: 20
    Τελευταίο Μήνυμα: 24-10-09, 17:01
  5. Παροχή τροφοδοσίας μετά από χρόνο.
    By Kling_Klong in forum Χρονοκυκλώματα
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 24-03-09, 12:26

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

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