Hallo, ich möchte einen zweiten Multiplexer in mein Programm einbinden Hardware: Arduino Uno Multiplexer:CD74HC4067 16-Kanal Analog Digital Multiplexer Das Programm und die Empfangenen Daten laufen stabil mit einem Multiplexer. Nun möchte ich in das Programm mit einen zweiten Multiplexer erweitern um Analoge Daten zu empfangen. Ich möchte den zweiten Multiplexer auf S0 : 4 S1 : 5 S2 : 6 S3 : 7 Eingang: A1 einbinden. Es wäre cool wenn mir jemand helfen könnte das Programm zu erweitern. Hier mein Programm: int pin_Out_S1 = 9; int pin_Out_S2 = 10; int pin_Out_S3 = 11; int pin_In_Mux1 = A0; int Mux1_State[16] = {0}; //int val = 0; void setup() { pinMode(pin_Out_S0, OUTPUT); pinMode(pin_Out_S1, OUTPUT); pinMode(pin_Out_S2, OUTPUT); pinMode(pin_Out_S3, OUTPUT); //pinMode(pin_In_Mux1, INPUT); Serial.begin(9600); } void loop() { updateMux1(); for(int i = 0; i < 16; i ++) { if(i == 15) { Serial.println(Mux1_State[i]); } else { Serial.print(Mux1_State[i]); Serial.print(";"); } } } void updateMux1 () { for (int i = 0; i < 16; i++){ digitalWrite(pin_Out_S0, HIGH && (i & B00000001)); digitalWrite(pin_Out_S1, HIGH && (i & B00000010)); digitalWrite(pin_Out_S2, HIGH && (i & B00000100)); digitalWrite(pin_Out_S3, HIGH && (i & B00001000)); Mux1_State[i] = analogRead(pin_In_Mux1); } } Danke und Gruß
Beitrag #6441389 wurde von einem Moderator gelöscht.
Die Aufgabe ist so simpel, dass ich echt Hemmungen habe, die Lösung vor zu kauen. Du musst doch nur das Array verdoppeln und in der for-Schleife beide analogen Eingänge abfragen. Versuche es erst mal selbst und melde dich dann mit dem Versuch wieder.
Ich habe bereits versucht den Code anzupassen. Kam aber nur mist raus.
1 | int pin_Out_S0 = 8; |
2 | int pin_Out_S1 = 9; |
3 | int pin_Out_S2 = 10; |
4 | int pin_Out_S3 = 11; |
5 | int pin_In_Mux1 = A0; |
6 | int Mux1_State[16] = {0}; |
7 | |
8 | int pin_Out_S4 = 4; |
9 | int pin_Out_S5 = 5; |
10 | int pin_Out_S6 = 6; |
11 | int pin_Out_S7 = 7; |
12 | int pin_In_Mux2 = A1; |
13 | int Mux2_State[32] = {0}; |
14 | //int val = 0;
|
15 | |
16 | void setup() { |
17 | |
18 | pinMode(pin_Out_S0, OUTPUT); |
19 | pinMode(pin_Out_S1, OUTPUT); |
20 | pinMode(pin_Out_S2, OUTPUT); |
21 | pinMode(pin_Out_S3, OUTPUT); |
22 | |
23 | pinMode(pin_Out_S4, OUTPUT); |
24 | pinMode(pin_Out_S5, OUTPUT); |
25 | pinMode(pin_Out_S6, OUTPUT); |
26 | pinMode(pin_Out_S7, OUTPUT); |
27 | |
28 | //pinMode(pin_In_Mux1, INPUT);
|
29 | Serial.begin(9600); |
30 | }
|
31 | |
32 | void loop() { |
33 | updateMux1(); |
34 | for(int i = 0; i < 15; i ++) { |
35 | if(i == 16) { |
36 | Serial.println(Mux1_State[i]); |
37 | Serial.println(Mux2_State[i]); |
38 | |
39 | } else { |
40 | Serial.print(Mux1_State[i]); |
41 | Serial.print(Mux2_State[i]); |
42 | Serial.print(";"); |
43 | }
|
44 | }
|
45 | }
|
46 | |
47 | void updateMux1 () { |
48 | for (int i = 0; i < 16; i++){ |
49 | digitalWrite(pin_Out_S0, HIGH && (i & B00000001)); |
50 | digitalWrite(pin_Out_S1, HIGH && (i & B00000010)); |
51 | digitalWrite(pin_Out_S2, HIGH && (i & B00000100)); |
52 | digitalWrite(pin_Out_S3, HIGH && (i & B00001000)); |
53 | |
54 | digitalWrite(pin_Out_S4, HIGH && (i & B00000001)); |
55 | digitalWrite(pin_Out_S5, HIGH && (i & B00000010)); |
56 | digitalWrite(pin_Out_S6, HIGH && (i & B00000100)); |
57 | digitalWrite(pin_Out_S7, HIGH && (i & B00001000)); |
58 | |
59 | Mux1_State[i] = analogRead(pin_In_Mux1); |
60 | Mux2_State[i] = analogRead(pin_In_Mux2); |
61 | |
62 | }
|
63 | }
|
:
Bearbeitet durch Moderator
S4, S5, S6 und S7 brauchst du nicht. Du kannst beide Multiplexer parallel über S0, S1, S2 und S3 ansteuern. Schadet aber auch nicht. Mux2_State[32] ist unnötig groß, du willst doch nur 16 Werte speichern. AUch das schadet nichts. > Serial.print(Mux1_State[i]); > Serial.print(Mux2_State[i]); Dazwischen würde ich ein Trennzeichen (z.B. Komma) ausgeben, sonst kleben die beiden Zahlen direkt aneinander. Will sagen: Dein Programm sieht fast gut aus. Vielleicht hast du die Schaltung falsch aufgebaut.
Ok Danke für die Rückmeldung. Ich werde es mal versuchen. Melde mich dann nochmal
Beitrag #6441801 wurde vom Autor gelöscht.
Ich habe das Skipt jetzt wie folgt geändert und bekomme folgende Ausgabe (siehe Bild). Der letze Wert wird in einer neuen Zeile dargestellt.
1 | int pin_Out_S0 = 8; |
2 | int pin_Out_S1 = 9; |
3 | int pin_Out_S2 = 10; |
4 | int pin_Out_S3 = 11; |
5 | int pin_In_Mux1 = A0; |
6 | int Mux1_State[16] = {0}; |
7 | |
8 | int pin_Out_S4 = 4; |
9 | int pin_Out_S5 = 5; |
10 | int pin_Out_S6 = 6; |
11 | int pin_Out_S7 = 7; |
12 | int pin_In_Mux2 = A1; |
13 | int Mux2_State[16] = {0}; |
14 | //int val = 0;
|
15 | |
16 | void setup() { |
17 | |
18 | pinMode(pin_Out_S0, OUTPUT); |
19 | pinMode(pin_Out_S1, OUTPUT); |
20 | pinMode(pin_Out_S2, OUTPUT); |
21 | pinMode(pin_Out_S3, OUTPUT); |
22 | |
23 | pinMode(pin_Out_S4, OUTPUT); |
24 | pinMode(pin_Out_S5, OUTPUT); |
25 | pinMode(pin_Out_S6, OUTPUT); |
26 | pinMode(pin_Out_S7, OUTPUT); |
27 | |
28 | //pinMode(pin_In_Mux1, INPUT);
|
29 | Serial.begin(9600); |
30 | }
|
31 | |
32 | void loop() { |
33 | updateMux1(); |
34 | for(int i = 0; i < 16; i ++) { |
35 | if(i == 15) { |
36 | Serial.println(Mux1_State[i]); |
37 | Serial.println(";"); |
38 | Serial.println(Mux2_State[i]); |
39 | Serial.println(";"); |
40 | |
41 | |
42 | } else { |
43 | Serial.print(Mux1_State[i]); |
44 | Serial.print(";"); |
45 | Serial.print(Mux2_State[i]); |
46 | Serial.print(";"); |
47 | }
|
48 | }
|
49 | }
|
50 | |
51 | void updateMux1 () { |
52 | for (int i = 0; i < 16; i++){ |
53 | |
54 | digitalWrite(pin_Out_S0, HIGH && (i & B00000001)); |
55 | digitalWrite(pin_Out_S1, HIGH && (i & B00000010)); |
56 | digitalWrite(pin_Out_S2, HIGH && (i & B00000100)); |
57 | digitalWrite(pin_Out_S3, HIGH && (i & B00001000)); |
58 | |
59 | digitalWrite(pin_Out_S4, HIGH && (i & B00000001)); |
60 | digitalWrite(pin_Out_S5, HIGH && (i & B00000010)); |
61 | digitalWrite(pin_Out_S6, HIGH && (i & B00000100)); |
62 | digitalWrite(pin_Out_S7, HIGH && (i & B00001000)); |
63 | |
64 | Mux1_State[i] = analogRead(pin_In_Mux1); |
65 | Mux2_State[i] = analogRead(pin_In_Mux2); |
66 | |
67 | }
|
68 | }
|
:
Bearbeitet durch Moderator
Du hast vergessen, eine Frage zu stellen. Informiere dich mal über den Unterschied zwischen print und println.
Björn R. schrieb: > Ich habe das Skipt jetzt wie folgt geändert und bekomme folgende Ausgabe > (siehe Bild). Der letze Wert wird in einer neuen Zeile dargestellt. Reichlich unlogisch. Prinzipiell sollte dein Programm jetzt funktionieren, wenn gleich man das eher etwas anders strukturieren würde. Wie testest du dein Programm? Kannst du die Spannungen an den MUX-Eingängen verändern? Reagiert die Programm richtig?
Man kann das ein wenig besser aufbauen und straffen. Schlcukt der Arduino die B000001 Schreibweise? Ist das nicht eher 0b000001?
1 | int pin_Out_S0 = 8; |
2 | int pin_Out_S1 = 9; |
3 | int pin_Out_S2 = 10; |
4 | int pin_Out_S3 = 11; |
5 | int pin_In_Mux1 = A0; |
6 | int Mux1_State[16]; |
7 | |
8 | int pin_Out_S4 = 4; |
9 | int pin_Out_S5 = 5; |
10 | int pin_Out_S6 = 6; |
11 | int pin_Out_S7 = 7; |
12 | int pin_In_Mux2 = A1; |
13 | int Mux2_State[16]; |
14 | //int val = 0;
|
15 | |
16 | void setup() { |
17 | |
18 | pinMode(pin_Out_S0, OUTPUT); |
19 | pinMode(pin_Out_S1, OUTPUT); |
20 | pinMode(pin_Out_S2, OUTPUT); |
21 | pinMode(pin_Out_S3, OUTPUT); |
22 | |
23 | pinMode(pin_Out_S4, OUTPUT); |
24 | pinMode(pin_Out_S5, OUTPUT); |
25 | pinMode(pin_Out_S6, OUTPUT); |
26 | pinMode(pin_Out_S7, OUTPUT); |
27 | |
28 | //pinMode(pin_In_Mux1, INPUT);
|
29 | Serial.begin(9600); |
30 | }
|
31 | |
32 | void loop() { |
33 | updateMux1(); |
34 | |
35 | for(int i = 0; i < 16; i ++) { |
36 | Serial.print(Mux1_State[i]); |
37 | Serial.print(";"); |
38 | }
|
39 | Serial.println(""); |
40 | |
41 | for(int i = 0; i < 16; i ++) { |
42 | Serial.print(Mux2_State[i]); |
43 | Serial.print(";"); |
44 | }
|
45 | Serial.println(""); |
46 | Serial.println(""); |
47 | }
|
48 | |
49 | void updateMux1 () { |
50 | for (int i = 0; i < 16; i++){ |
51 | |
52 | digitalWrite(pin_Out_S0, (i & B00000001)); |
53 | digitalWrite(pin_Out_S1, (i & B00000010)); |
54 | digitalWrite(pin_Out_S2, (i & B00000100)); |
55 | digitalWrite(pin_Out_S3, (i & B00001000)); |
56 | |
57 | digitalWrite(pin_Out_S4, (i & B00000001)); |
58 | digitalWrite(pin_Out_S5, (i & B00000010)); |
59 | digitalWrite(pin_Out_S6, (i & B00000100)); |
60 | digitalWrite(pin_Out_S7, (i & B00001000)); |
61 | |
62 | Mux1_State[i] = analogRead(pin_In_Mux1); |
63 | Mux2_State[i] = analogRead(pin_In_Mux2); |
64 | }
|
65 | }
|
Das Programm läuft die Spannung verändert sich. Das Blöde ist nur das der letze Kanal in einer neuen Zeile dargestellt wird. Damit kann ich den Datensatz nicht weiter verarbeiten.
Björn R. schrieb: > Das Blöde ist nur das > der letze Kanal in einer neuen Zeile dargestellt wird. Das sollte sich sehr leicht ändern lassen.
Björn R. schrieb: > Wie kann ich das ändern? Indem du dich wie gesagt über den Unterschied zwischen print und println informierst. Denn genau da liegt der Hase im Pfeffer.
Unterschied zwischen Serial.print(""); und Serial.println(""); kennen lernen ;)
Habe das Skipt geändert. Jetzt läuft es so wie es soll. :-) Danke Leute
Björn R. schrieb: > Habe das Skipt geändert. Es heisst "Sketch" oder Quelltext, meinetwegen auch Programm. Ein Script ist etwas anderes.
Björn R. schrieb: > ich möchte einen zweiten Multiplexer in mein Programm einbinden Einfach die 4 Steuereingänge parallel schalten und den Ausgang auf einen 2. ADC-Eingang legen.
Björn R. schrieb: > mein Programm Bitte verwende die [c] Tags für deinen Code. Wie das geht steht über jeder Eingabebox bei "Antwort schreiben Wichtige Regeln - erst lesen, dann posten!"
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.