0
Παιδιά υπάρχει ένα 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);
}
}