Powielenie kodu dla 4 sekcji - prośba o pomoc

Projekty Arduino i pochodne
Awatar użytkownika
Krzysztof
Administrator
Posty: 2111
Rejestracja: 19 kwie 2016, 14:03
Lokalizacja: Darłowo
Kontaktowanie:

Powielenie kodu dla 4 sekcji - prośba o pomoc

Postautor: Krzysztof » 09 gru 2016, 18:48

Bardzo proszę o pomoc w powieleniu tego co znalazłem. Chciałbym użyć 4 sekcji takich samych z jednym arduino (4x potencjometr i 4x wskaźnik LED). Kod przygotowany jest na 1 sekcję.

Kod: Zaznacz cały

/*
 * LED Bar Graph controlled with an external potentiometer.
 *
 * A 4017 counter is used to save pins on the arduino.
 * The technique of "Persistence of vision" is used to turn on
 * many LEDs at the same time.
 *
 * Developed by Leonel Machava
 * http://codentronix.com
 *
 * This code is release under the "MIT License" available at
 * http://www.opensource.org/licenses/mit-license.php
 */

/* Digital pin connected to the counter's clock pin */
int clockPin = 2;

/* Digital pin connected to the counter's reset pin */
int resetPin = 3;

/* Analog pin connected to the potentiometer wiper */
int potPin = 0;

void setup() {
  pinMode(clockPin,OUTPUT);
  pinMode(resetPin,OUTPUT);
  reset();
}

void loop() {
  /* Read the analog value from the potentiometer. */
  int potValue = analogRead(potPin);
 
  /* Map the value to the range 0-9. */
  int n = potValue * 10 / 1024;
 
  /* Turn ON/OFF quickly the first n LEDs. The n LEDs
     will appear to be ON at the same time due to the
     "persistence of vision" effect. */
  for( int i = 0; i < n; i++ ) {
    clock();
  }
 
  reset();
}

/*
 * Sends a clock pulse to the counter making it advance.
 */
void clock() {
  digitalWrite(clockPin,HIGH);
  delay(1);
  digitalWrite(clockPin,LOW); 
}

/*
 * Resets the counter making it start counting from zero.
 */
void reset() {
  digitalWrite(resetPin,HIGH);
  delay(1);
  digitalWrite(resetPin,LOW);
}


Projekt z tej stronki
http://codentronix.com/2011/06/05/ardui ... ntiometer/
arduino_led_bar_graph_4017_pot_schem.png
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

madman
Posty: 9
Rejestracja: 16 maja 2016, 11:24
Kontaktowanie:

Re: Powielenie kodu dla 4 sekcji - prośba o pomoc

Postautor: madman » 09 gru 2016, 22:28

Proszę bardzo

Kod pisany na szybko więc bez żadnych optymalizacji. Gryzie w oczy ale będzie działać. Musisz tylko zdefiniować poszczególne piny do układu jaki masz.

Kod: Zaznacz cały

/*
 * LED Bar Graph controlled with an external potentiometer.
 *
 * A 4017 counter is used to save pins on the arduino.
 * The technique of "Persistence of vision" is used to turn on
 * many LEDs at the same time.
 *
 * Developed by Leonel Machava
 * http://codentronix.com
 *
 * This code is release under the "MIT License" available at
 * http://www.opensource.org/licenses/mit-license.php
 */

/* Digital pin connected to the counter's clock pin */
int clockPin = 2;
int clockPin2 = 2;
int clockPin3 = 2;
int clockPin4 = 2;

/* Digital pin connected to the counter's reset pin */
int resetPin = 3;
int resetPin2 = 3;
int resetPin3 = 3;
int resetPin4 = 3;

/* Analog pin connected to the potentiometer wiper */
int potPin = 0;
int potPin2 = 0;
int potPin3 = 0;
int potPin4 = 0;

void setup() {
  pinMode(clockPin,OUTPUT);
  pinMode(resetPin,OUTPUT);

  pinMode(clockPin2,OUTPUT);
  pinMode(resetPin2,OUTPUT);
 
  pinMode(clockPin3,OUTPUT);
  pinMode(resetPin3,OUTPUT);
 
  pinMode(clockPin4,OUTPUT);
  pinMode(resetPin4,OUTPUT);
  reset();
}

void loop() {
  /* Read the analog value from the potentiometer. */
  int potValue = analogRead(potPin);
  int potValue2 = analogRead(potPin2);
  int potValue3 = analogRead(potPin3);
  int potValue4 = analogRead(potPin4);
 
  /* Map the value to the range 0-9. */
  int n = potValue * 10 / 1024;
  int n2 = potValue2 * 10 / 1024;
  int n3 = potValue3 * 10 / 1024;
  int n4 = potValue4 * 10 / 1024;
 
  /* Turn ON/OFF quickly the first n LEDs. The n LEDs
     will appear to be ON at the same time due to the
     "persistence of vision" effect. */
  for( int i = 0; i < n; i++ ) {
    clock();
  }
 
  for( int i = 0; i < n2; i++ ) {
    clock2();
  }
  for( int i = 0; i < n3; i++ ) {
    clock3();
  }
  for( int i = 0; i < n4; i++ ) {
    clock4();
  }
 
  reset();
}

/*
 * Sends a clock pulse to the counter making it advance.
 */
void clock() {
  digitalWrite(clockPin,HIGH);
  delay(1);
  digitalWrite(clockPin,LOW);
}

void clock2() {
  digitalWrite(clockPin2,HIGH);
  delay(1);
  digitalWrite(clockPin2,LOW);
}

void clock3() {
  digitalWrite(clockPin3,HIGH);
  delay(1);
  digitalWrite(clockPin3,LOW);
}

void clock4() {
  digitalWrite(clockPin4,HIGH);
  delay(1);
  digitalWrite(clockPin4,LOW);
}



/*
 * Resets the counter making it start counting from zero.
 */
void reset() {
  digitalWrite(resetPin,HIGH);
  delay(1);
  digitalWrite(resetPin,LOW);
 
  digitalWrite(resetPin2,HIGH);
  delay(1);
  digitalWrite(resetPin2,LOW);
 
  digitalWrite(resetPin3,HIGH);
  delay(1);
  digitalWrite(resetPin3,LOW);
 
  digitalWrite(resetPin4,HIGH);
  delay(1);
  digitalWrite(resetPin4,LOW);
}

Awatar użytkownika
Krzysztof
Administrator
Posty: 2111
Rejestracja: 19 kwie 2016, 14:03
Lokalizacja: Darłowo
Kontaktowanie:

Re: Powielenie kodu dla 4 sekcji - prośba o pomoc

Postautor: Krzysztof » 10 gru 2016, 8:12

Dzięki.
A tak informacyjnie, aby coś w głowie zostało, to w jaki sposób następuje połączenie danego potencjometru z konkretną linijką diodową z 4017 (oczywiście w kodzie)? Który fragment za to odpowiada?

madman
Posty: 9
Rejestracja: 16 maja 2016, 11:24
Kontaktowanie:

Re: Powielenie kodu dla 4 sekcji - prośba o pomoc

Postautor: madman » 10 gru 2016, 9:24

int potValue = analogRead(potPin); - tu odczytujesz wartość analogową jaką ustawiasz potencjometrem.
int n = potValue * 10 / 1024; - tu przeliczamy wartość analogową na wartość liczbową od 0 do 9

CD4017 to jest licznik dziesiętny co oznacza, że tyle zapalasz tyle diod ile razy podasz sygnał zegarowy.
Odpowiada za to ten fragment:
for( int i = 0; i < n; i++ ) {
clock();
}

na końcu gasimy wszystkie diody funkcją:
reset()

i tak od początku.


Wróć do „Arduino”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość