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

Θέμα: arduino buttons

  1. #1
    Μέλος
    Όνομα
    Κώστας
    Εγγραφή
    Oct 2015
    Περιοχή
    Τρίκαλα
    Μηνύματα
    108

    Lightbulb arduino buttons

    καλησπαρα,,,, θελω να ετοιμασω ενα προτζεκτ το οποιο θα αποτελειτε απο τρια κουμπια τα οποια θελω το καθε ενα να κανει την εξης δουλεια,,πχ οταν κουμπι1 πατηθει 3 φορες η μεταβλητη να περνει την 3000 η οταν το κουμπι πατηθει 6 να περνει την τιμη 6000 και ου το καθεξης,,,καμοια ιδδεα εχετε?

    0 Not allowed! Not allowed!

  2. #2
    Μέλος Το avatar του χρήστη thanasis 1
    Όνομα
    Θανάσης
    Εγγραφή
    Jul 2010
    Περιοχή
    ΑΘΗΝΑ
    Μηνύματα
    1.382

    Προεπιλογή

    Το πιο απλο που μπορεις να κανεις ειναι να ενημερωνεις ενα flag καθε φορα που πατας ενα
    κουμπι και με την καταλληλη συνθηκη η μεταβλητη θα περνει την αναλογη τιμη.

    0 Not allowed! Not allowed!

  3. #3
    Μέλος
    Όνομα
    Κώστας
    Εγγραφή
    Oct 2015
    Περιοχή
    Τρίκαλα
    Μηνύματα
    108

    Προεπιλογή

    to exw kanei ayto alla den leitoyrgoyse kai den 3erw giati

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη thanasis 1
    Όνομα
    Θανάσης
    Εγγραφή
    Jul 2010
    Περιοχή
    ΑΘΗΝΑ
    Μηνύματα
    1.382

    Προεπιλογή

    Για βαλε τον κωδικα να δουμε.

    0 Not allowed! Not allowed!

  5. #5
    Μέλος
    Όνομα
    Κώστας
    Εγγραφή
    Oct 2015
    Περιοχή
    Τρίκαλα
    Μηνύματα
    108

    Προεπιλογή

    //sta8eres_koybioy_a
    const int button_a = 3;
    const int led_a = 6;

    const int button_b = 8;
    const int led_b = 5;

    //metablhtes_koybioy_b
    int buttonState_a = 0;
    int a=0;

    int buttonState_b = 0;
    int b=0;


    void setup() {
    pinMode(led_a, OUTPUT);
    pinMode(button_a, INPUT);
    pinMode(led_b, OUTPUT);
    pinMode(button_b, INPUT);
    }

    void loop() {
    buttonState_a = digitalRead(button_a);
    buttonState_b = digitalRead(button_b);
    //ean path8ei to koybi_a
    if (buttonState_a == HIGH) { //syn8hkh_a
    a=a+1;
    if ( a == 4){
    digitalWrite(led_a, HIGH);
    a=0; //change flag variable
    if (a==0){
    digitalWrite(led_a, LOW);
    }
    }
    }
    if (buttonState_b == HIGH) {
    b=b+1;
    if ( b == 4){
    digitalWrite(led_b, HIGH); //syn8hks_b
    b=0; //change flag variable
    if (b==0){
    digitalWrite(led_a, LOW);
    }
    }
    }
    delay(200); //Small delay

    }

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Με μια γρήγορη ματιά βλέπω ότι υπάρχει πρόβλημα με το debounce του διακόπτη.
    Ρίξε μια ματιά εδώ:

    https://www.google.gr/?gfe_rd=cr&ei=...tware+debounce

    0 Not allowed! Not allowed!
    FreeBsD For Ever

  7. #7
    Μέλος
    Όνομα
    Κώστας
    Εγγραφή
    Oct 2015
    Περιοχή
    Τρίκαλα
    Μηνύματα
    108

    Προεπιλογή

    μπορεις να μου εξηγισεισ τι εννοεισ (ειμαι νεος στο αρντουινο καιδεν καταλαβαινω παρα πολλα)

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από kostasmantzios Εμφάνιση μηνυμάτων
    μπορεις να μου εξηγισεισ τι εννοεισ (ειμαι νεος στο αρντουινο καιδεν καταλαβαινω παρα πολλα)
    Software Debounce:

    When using a hardware switch you may want to debounce the input one way or another. Either in hardware or in software so that you don't multiple trigger on a noisy edge transition. The following is an easy and reliable software debouncing algorithm which is intended to work on a periodic sampling of an input line.
    Με απλά ελληνικά, όταν πατάς έναν μηχανικό διακόπτη, αυτός μέχρι να σταθεροποιηθεί η κατάστασή του περνά από πολλές μεταβάσεις χαμηλής/υψηλής κατάστασης. Εσύ μπορεί να μην προλαβαίνεις να το δεις/καταλάβεις αλλά ο μικροελεγκτής διαβάζει όλες αυτές τις μεταβάσεις και δε σου δείχνει τα αποτελέσματα που θα περίμενες.

    Μπορείς να κάνεις και hardware debounce με RC κύκλωμα ή με schmit trigger αλλά αν ο μικροελεγκτής σου δεν έχει μεγάλο φόρτο εργασίας τότε μπορείς να το κάνεις πολύ πιο εύκολα προγραμματιστικά. Μια άλλη ιδέα για software debounce είναι αντί να παίρνεις μία μέτρηση της κατάστασης εισόδου να παίρνεις πολλές μετρήσεις μέχρι να αποφασίσεις αν ο διακόπτης είναι on ή off. Γρήγορη και "βρώμικη" υλοποίηση είναι κάτι τέτοιο:

    Κώδικας:
    // Συνάρτηση ελέγχου αν πατήθηκε το κουμπί λήψης δεδομένων
    //**
    void checkButton()
    {
      /* Για το debouncing του διακόπτη πέρνουμε 80 μετρήσεις κάθε φορά και βλέπουμε την κατάσταση
      που έχει τις περισσότερες φορές (περισσότερη ώρα πατημένο ή όχι) */
      int sumCount = 0;
      for (int pressCount = 1; pressCount < 80; pressCount++)
      {
        // read the state of the switch into a local variable:
        int reading = digitalRead(BUTTONPIN);
        sumCount = sumCount + reading; 
        //delay(1);                  
      }
      
      // Έλεγχος για το αν ηταν πραγματικό πάτημα ή όχι
      if (sumCount >= 40)
      {
        buttonState = 1;
      }
      else
      {
        buttonState = 0;
      }
    }
    Επίσης, μέσα στο IDE του arduino υπάρχει στα basic examples, παράδειγμα debounce με χρόνο.

    0 Not allowed! Not allowed!
    FreeBsD For Ever

  9. #9
    Μέλος
    Όνομα
    Κώστας
    Εγγραφή
    Oct 2015
    Περιοχή
    Τρίκαλα
    Μηνύματα
    108

    Προεπιλογή

    Θα το δω..σε ευχαριστω πολυ παντως

    Στάλθηκε από το LG-D722 μου χρησιμοποιώντας Tapatalk

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Καλησπέρα,
    Θα πρέπει να προσθέσεις το denouncing ή να χρησιμοποιήσεις μια βιβλιοθήκη για κουμπιά που το διαχειρίζεται αρκετά καλά.

    Εγω πρόσεξα κάτι άλλο:
    if (buttonState_a == HIGH) {
    a=a+1;
    if ( a == 4){
    digitalWrite(led_a, HIGH);
    a=0; //change flag variable
    if (a==0){
    digitalWrite(led_a, LOW);
    }
    }
    }
    Έστω ότι φτάνει στο 4ο πάτημα, κάνει την έξοδο high, μηδενίζει το "α" και αν το "α" είναι 0 (9999% θα είναι 0 αφού μόλις το μηδενισες) θα το κάνει LOW, πράγμα που σημαίνει πως το led θα φωτίζει για μερικές δεκάδες κύκλους (στο arduino γιατί δεν κλίνει ακαριαία, δεν θυμάμαι πόσους ακριβώς έστω 50) δηλαδή για 50/16000 3ms περίπου, το μάτι αντιλαμβάνεται πάνω από 10ms άρα δεν το βλέπεις (χώρια τον χρόνο που χρειάζεται ένα led για να ανάψει)
    Άμα βάλεις το delay ακριβώς κάτω από το σημείο που αναβεις το led θα παραμένει αναμενόμενο όσο χρόνο έχεις στο delay και μετά θα σβήνει.

    Σε ποιο ψηλά γράμματα τώρα, απ ότι κατάλαβα έχεις δώσει 5V στους διακόπτες και μόλις πατηθούν δίνουν τα 5V στο arduino σωστά?
    Το θέμα είναι πως όση ώρα δεν είναι πατημένοι το pin του arduino είναι πρακτικά στον "Αέρα" πράγμα που σημαίνει πως μπορεί να διαβάσει ότι του έρθει στο κεφάλι, ακόμα και high χωρίς να το εχεις πατήσει.
    Για τον λόγο αυτό βάζουμε μια αντίσταση "pulldown" 10k περίπου πάνω στο πιν συνδεδεμένη με την γείωση έτσι το πιν δεν μένει ποτέ στον αέρα (πάντα LOW απάτητο, πάντα HIGH πατημένο).
    Επίσης επειδή είναι πολύ χρήσιμες τέτοιου είδους αντιστάσεις οι κατασκευαστές έχουν τοποθετήσει εσωτερικές "pull up" δηλαδή ενωμένες με τα pin και τα 5V που τις ενεργοποιείς μέσω εντολής "pinmode(button, INPUT_PULLUP)" με αποτέλεσμα όσο ΔΕΝ πατάς τον διακόπτη να διαβάζεις HIGH και μόλις τον πατήσεις (του δίνεις γείωση σε αυτήν την περίπτωση) να διαβαζεις LOW.

    Σχεδον ολοι pull up βάζουν γιατί γλυτώνεις χώρο και χρήμα :P

    0 Not allowed! Not allowed!

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

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

  1. Push buttons
    By info@kalarakis.com in forum Ηλεκτρολογικά
    Απαντήσεις: 10
    Τελευταίο Μήνυμα: 21-08-17, 00:15
  2. arduino?
    By nikakis30 in forum Μικροελεγκτές
    Απαντήσεις: 7
    Τελευταίο Μήνυμα: 19-04-17, 00:50
  3. συστημα επιλογης εξοδου για ηχο με buttons
    By ixtlilton in forum Κυκλώματα Εικόνας-'Ηχου & Φωτισμού
    Απαντήσεις: 2
    Τελευταίο Μήνυμα: 10-01-17, 01:19
  4. 2 buttons και 1 counter arduino
    By peiperakos in forum Μικροελεγκτές
    Απαντήσεις: 12
    Τελευταίο Μήνυμα: 29-12-14, 00:03
  5. Buttons για λειτουργια μοτερ
    By thabibikas in forum Αυτοματισμοί
    Απαντήσεις: 32
    Τελευταίο Μήνυμα: 16-06-14, 23:45

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

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