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

Θέμα: Πρόγραμμα barGraph Arduino

  1. #1
    Μέλος
    Όνομα
    Θοδωρής Λέκας
    Εγγραφή
    Oct 2010
    Περιοχή
    Αν. Θεσσαλονίκη
    Μηνύματα
    390

    Προεπιλογή Πρόγραμμα barGraph Arduino

    Παιδιά υπάρχει ένα example στο arduino, το barGraph το οποίο το έχω τροποποιήσει αρκετά (μόνο την ιδέα πήρα στην ουσία) έτσι ώστε να χρησιμοποιήσω έναν shift register (HC595) προκειμένου να αποδεσμεύσω επαφές από την πλακέτα, και όχι digital pins 2-11 που χρησιμοποιεί το παράδειγμα.

    Ωστόσο δε δουλεύει καλά... δηλαδή ενώ θα έπρεπε να είναι σβηστά όλα τα LED (8 έβαλα) στη μία τέρμα άκρη του ποτενσιομέτρου και αναμμένα όλα στην άλλη άκρη, ωστόσο μου κάνει κάτι κόλπα δηλαδή αναβοσβήνουν LED που θα έπρεπε να είναι σβηστά κλπ.

    Έχετε να προτείνετε διορθώσεις?

    Στον παρακάτω κώδικα απλοποίησα τη διαδικασία χρησιμοποιώντας if-else χωρίς for κλπ αλλά και πάλι δε βρίσκω τί φταίει.


    int analogPin = A0; // the pin that the potentiometer is attached to.
    int clockPin=11;
    int latchPin=12;
    int dataPin=13; // goes to 14 pin of HC595
    int ledCount=8; // the number of LEDs in the bar graph




    void setup() {
    Serial.begin(9600);
    pinMode(latchPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
    }


    void loop() {
    // read the potentiometer:
    int sensorReading = analogRead(analogPin);
    // map the result to a range from 0 to the number of LEDs:
    int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);

    if (ledLevel == 0) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 0);
    digitalWrite(latchPin, HIGH);
    }

    else if (ledLevel == 1) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 1);
    digitalWrite(latchPin, HIGH);
    delay(200);
    }

    else if (ledLevel == 2) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 3);
    digitalWrite(latchPin, HIGH);
    delay(200);
    }

    else if (ledLevel == 3) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 7);
    digitalWrite(latchPin, HIGH);
    delay(200);
    }

    else if (ledLevel == 4) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 15);
    digitalWrite(latchPin, HIGH);
    delay(200);
    }

    else if (ledLevel == 5) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 31);
    digitalWrite(latchPin, HIGH);
    delay(200);
    }

    if (ledLevel == 6) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 63);
    digitalWrite(latchPin, HIGH);
    delay(200);
    }

    else if (ledLevel == 7) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 127);
    digitalWrite(latchPin, HIGH);
    delay(200);
    }

    else {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 255);
    digitalWrite(latchPin, HIGH);
    delay(200);
    }
    }

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη lelek : 15-04-15 στις 14:08

  2. #2
    Μέλος
    Όνομα
    Θοδωρής Λέκας
    Εγγραφή
    Oct 2010
    Περιοχή
    Αν. Θεσσαλονίκη
    Μηνύματα
    390

    Προεπιλογή

    Να και σε πιο απλοποιημένη μορφή, τίποτα πάλι... δε δουλεύει σωστά.



    int analogPin = A0; // the pin that the potentiometer is attached to int ledCount = 8; // the number of LEDs in the bar graph
    int clockPin=11;
    int latchPin=12;
    int dataPin=13;
    int ledCount=8;






    void setup() {
    Serial.begin(9600);
    pinMode(latchPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
    }


    void loop() {
    // read the potentiometer:
    int sensorReading = analogRead(analogPin);
    // map the result to a range from 0 to the number of LEDs:
    int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);


    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, (pow(2, ledLevel)-1));
    digitalWrite(latchPin, HIGH);
    delay(1000);


    }

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη lelek : 15-04-15 στις 16:02

  3. #3
    Μέλος
    Όνομα
    Θοδωρής Λέκας
    Εγγραφή
    Oct 2010
    Περιοχή
    Αν. Θεσσαλονίκη
    Μηνύματα
    390

    Προεπιλογή

    Δε βρήκα άλλο τρόπο, μόνο αυτόν παρακάτω.... ωστόσο για τέρμα κλειστό pot ανάβει το πρώτο LED.

    Επιπλέον, χρειάστηκε να προσθέσω μια if γιατί όταν το ledLevel=1, άναβε μόνο το δεύτερο LED ενώ εγώ θέλω να ανάβει και το πρώτο αφού η είσοδος στο shift register πρέπει να είναι η 0b00000011 = 3 στο δεκαδικό = num ενώ εγώ έπαιρνα όπως είναι λογικό num=2. Αντίθετα, στις υπόλοιπες τιμές της ledLevel δουλεύει καλά το κύκλωμα, πχ για ledLevel=4 έχω num=16 ΑΛΛΑ ανάβουν ΚΑΝΟΝΙΚΑ τα πρώτα 4 LEDs (είσοδος στον register δηλαδή 0b00010000=16) αντί να συμβαίνει αυτό με num=15!!!!

    Δηλαδή στην περίπτωση ledLevel=1 διορθώνω εγώ από 2 σε 3 το num για να δουλέψει στη σωστή τιμή ο shift register και να ανάψουνε τα πρώτα 2 LEDs ενώ στις υπόλοιπες που δε κάνω κάτι δουλεύει μια χαρά χωρίς διόρθωση. Πιστεύω να έγινα κατανοητός όσο γίνεται.

    Πολύ περίεργο...

    Αν μπορεί κάποοιος ας βοηθήσει παιδιά..




    int analogPin = A0; // the analog pin that the potentiometer is attached to.
    int clockPin=11;
    int latchPin=12;
    int dataPin=13;
    const int ledCount=9; // I use a barGraph of 8 LEDs!
    float num;
    float num1;






    void setup() {
    Serial.begin(9600);
    pinMode(latchPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
    }


    void loop() {
    // read the potentiometer:
    int sensorReading = analogRead(analogPin);
    // map the result to a range from 0 to the number of LEDs:
    int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);




    num = pow(2, ledLevel);
    if(num==2.0) {num = num + 1.0;}
    delay(50);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, num);
    digitalWrite(latchPin, HIGH);
    Serial.println(ledLevel);
    Serial.println(num);
    Serial.println();
    delay(100);

    }

    0 Not allowed! Not allowed!

  4. #4
    Μέλος
    Όνομα
    Θοδωρής Λέκας
    Εγγραφή
    Oct 2010
    Περιοχή
    Αν. Θεσσαλονίκη
    Μηνύματα
    390

    Προεπιλογή

    Κάποιος να μου πει τη γνωμη του υπάρχει?

    0 Not allowed! Not allowed!

  5. #5
    Μέλος
    Όνομα
    Θοδωρής Λέκας
    Εγγραφή
    Oct 2010
    Περιοχή
    Αν. Θεσσαλονίκη
    Μηνύματα
    390

    Προεπιλογή

    Τίποτα κανεις?

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Δεν υπάρχει κανένας λόγος να γραφεις 45.000 post για να γράψεις το πρόβλημά σου, ούτε για να ζητάς βοήθεια, όποιος διάβασε το ποστ κατάλαβε οτι θες βοήθεια και πιθανόν να το προσπέρασε γιατί θα αρχιζες να πυροβολάς με ερωτήσεις.

    Χρησιμοποησε αυτήν την βιβλιοθηκη http://playground.arduino.cc/Main/ShiftOutX για να λύσεις το πρόβλημά σου. Περιέχει και παράδειγμα και υπάρχουν και αναφορές στο forum του arduino.

    0 Not allowed! Not allowed!

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

  1. Πρόγραμμα σε C++
    By stavros_97s in forum Software Η/Υ
    Απαντήσεις: 30
    Τελευταίο Μήνυμα: 05-03-18, 22:47
  2. Επαγωγικό Αμπερόμετρο bargraph 1A
    By CLOCKMAN in forum Παρουσίαση Ολοκληρωμένων Κατασκευών
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 03-03-14, 11:48
  3. ψάχνω πρόγραμμα
    By giannis - IKARIA in forum Software Η/Υ
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 05-11-12, 01:46
  4. Απαντήσεις: 2
    Τελευταίο Μήνυμα: 24-03-12, 23:32
  5. Multicolor Bargraph...
    By P@s@ris! in forum Ερωτήσεις Αρχάριων
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 26-03-08, 10:41

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

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