Skocz do zawartości

Błędny odczyt danych z potencjometru, używając multipleksera CD74hc4067


DamianZiemba

Pomocna odpowiedź

#include <SoftwareSerial.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

#define MULTIPLEXER_ADDRESS 0x70
#define SW_SERIAL_TX 2
#define SW_SERIAL_RX 3

SoftwareSerial BTSerial(SW_SERIAL_RX, SW_SERIAL_TX);

const int s0 = 4;
const int s1 = 5;
const int s2 = 6;
const int s3 = 7;

int select = 0;
int pot1 = 0;
int pot2 = 1;
int pot3 = 2;
int pot4 = 3;

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

void setup() {
Serial.begin(38400);
Wire.begin();
pwm.begin();
pwm.setPWMFreq(60);

pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);

digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
}

void loop() {
for (int i = 0; i < 4; i++) {
select = i;
digitalWrite(s0, bitRead(select, 0));
digitalWrite(s1, bitRead(select, 1));
digitalWrite(s2, bitRead(select, 2));
digitalWrite(s3, bitRead(select, 3));

int pot;
if (i == 0) {
  pot = pot1;
} else if (i == 1) {
  pot = pot2;
} else if (i == 2) {
  pot = pot3;
} else {
  pot = pot4;
}

int angle = map(analogRead(pot), 0, 1005, 0, 180);
int pulse = map(angle, 0, 180, 0, 1005);
pwm.setPWM(i + 9, 0, pulse);

Serial.print("Pozycja servo ");
Serial.print(i + 1);
Serial.print(": ");
Serial.println(angle);

delay(1000);
}

}

Cześć, mam stosunkowo duży problem związany z multiplekserem CD74hc4067 z którym męczę się już kilka dni, mianowicie próbowałem naprawdę niezliczonej ilość programów, lecz ten wydaje się jak dotąd najlepszy. Podłączyłem cały multiplekser identycznie jak widnieje na zdjęciu, lecz po wgraniu programu jedynie potencjometr wychodzący z kanału C0 działa odpowiednio. Zależy mi na tym aby podczas obracania potencjometru ten wysyłał na bieżąco do monitoru portu szeregowego dane o aktualnym kącie potencjometru. Podczas wgrania kodu i odczytywania danych C0 działa poprawnie, lecz reszta potencjometrów, kompletnie nie reaguję(wysyła  losowe odczyty nie zważając na przekręcanie potencjometru). Bardzo dziękuję za pomoc!

image.pngimage.thumb.png.25ea18e19f91041ba0976cd839c73945.png

Edytowano przez DamianZiemba
Link do komentarza
Share on other sites

A więc tak mniej więcej wygląda układ. Sam sygnał jest wysyłany za pomocą modułu Hc-05 do Hc-06. Po rozwiązaniu tego problemu powinienem sobie dać radę z całą resztą ale na wszelki napiszę, że druga płytka jest połączona z modułem pca9685. image.thumb.png.1221787cf6ac4778ba8d8c6c552da9d5.png

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dodałem wejście analogowe jako int, np.

a następnie zmieniłem linijkę w ten sposób: Wydaję się, że działa. Dokładnie wszystko zlutuję i dam znać jak poszło. Bardzo dziękuję.

int analogInput = A0; //(DODANE)
int angle = map(analogRead(analogInput), 0, 1005, 0, 180); //ZMIENIONE

 

Link do komentarza
Share on other sites

Dodam jeszcze od siebie, że MUX'y analogowe bardzo nie lubią wiszących pinów, więc te, których nie używasz podciągnij do masy. Będzie mniej zakłóceń w układzie 😉 

  • Lubię! 2
Link do komentarza
Share on other sites

59 minut temu, H1M4W4R1 napisał:

Dodam jeszcze od siebie, że MUX'y analogowe bardzo nie lubią wiszących pinów, więc te, których nie używasz podciągnij do masy. Będzie mniej zakłóceń w układzie 😉 

Wydaję mi się, że zlutuję całą płytkę aby zminimalizować zakłócenia, w internecie znalazłem podobny problem, lecz wątek zakończył się na tezie o zepsutym multiplekserze (stosunkowo dziwne, ponieważ autor stwierdził, że jego 5 multiplekserów jest zepsuta???). Autor wątku kupił zupełnie inny model multipleksera i podobno problem się sam rozwiązał. Na wszelki wypadek podsyłam link do wątku. https://forum.arduino.cc/t/issues-with-multiplexing-16-to-1/1022231

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.