Hallo Arduinofreunde,
ich habe ein Projekt in dem ich einen RFID Leser am Mega2560 betreibe.
Je nachdem welchen der 48 - RFID Chips ich vor den Leser halte, schaltet der MEGA entsprechende DI -Ausgang auf HIGH. Mein Wunsch (D0-D48)
Nun meine Frage, warum ist D0, D1 und D21 dauerhaft an.
Darf man diese Ausgänge nicht mit "digitalwrite() LOW oder HIGH schalten ?
Oder ist mein MEGA defekt.
Zweite Frage, kann ich auch die analogen Eingänge als Digitale Ausgänge betreiben ?
Ich könnt dann dies Nutzen statt der D0 , D1 und D21
Wie müssen die Analog-Eingänge deklariert werden ?
Ich steuere mit dem Programm und meiner Modellbahn-Steuerungs-Software WinDigipet meinen Loklift (Vitrinen).
ÜberAntworten würde ich mich sehr freuen.
ps. ich weiß der Code ist umfangreich , wird aber später mit For Schleifen vereinfacht.
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
}
void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
long code = 0; // Als neue Variable fügen wir „code“ hinzu, unter welcher später die UID als zusammenhängende Zahl ausgegeben wird. Statt int benutzen wir jetzt den Zahlenbereich „long“, weil sich dann eine größere Zahl speichern lässt.
for (byte i = 0; i < mfrc522.uid.size; i++)
{
code = ((code + mfrc522.uid.uidByte[i]) * 10); // Nun werden wie auch vorher die vier Blöcke ausgelesen und in jedem Durchlauf wird der Code mit dem Faktor 10 „gestreckt“. (Eigentlich müsste man hier den Wert 1000 verwenden, jedoch würde die Zahl dann zu groß werden.
}
Serial.print("Die Kartennummer lautet:"); // Zum Schluss wird der Zahlencode (Man kann ihn nicht mehr als UID bezeichnen) ausgegeben.
Serial.println(code);
switch (code) {
case 773940 :
Serial.println("Setzkasten 1");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(0, HIGH);
break;
case 776540 :
Serial.println("Setzkasten 2");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(1, HIGH);
break;
case 778640 :
Serial.println("Setzkasten 3");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(2, HIGH);
break;
case 790280 :
Serial.println("Setzkasten 4");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(3, HIGH);
break;
case 791340 :
Serial.println("Setzkasten 5");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(4, HIGH);
break;
case 792200 :
Serial.println("Setzkasten 6");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(5, HIGH);
break;
case 792940 :
Serial.println("Setzkasten 7");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(6, HIGH);
break;
case 793440 :
Serial.println("Setzkasten 8");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(7, HIGH);
break;
case 797940 :
Serial.println("Setzkasten 9");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(8, HIGH);
break;
case 800640 :
Serial.println("Setzkasten 10");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(9, HIGH);
break;
case 801940 :
Serial.println("Setzkasten 11");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(10, HIGH);
break;
case 802040 :
Serial.println("Setzkasten 12");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(11, HIGH);
break;
case 803040 :
Serial.println("Setzkasten 13");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(12, HIGH);
break;
case 806540 :
Serial.println("Setzkasten 14");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(13, HIGH);
break;
case 814840 :
Serial.println("Setzkasten 15");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(14, HIGH);
break;
case 819040 :
Serial.println("Setzkasten 16");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(15, HIGH);
break;
case 829740 :
Serial.println("Setzkasten 17");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(16, HIGH);
break;
case 841340 :
Serial.println("Setzkasten 18");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(17, HIGH);
break;
case 841640 :
Serial.println("Setzkasten 19");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(18, HIGH);
break;
case 846140 :
Serial.println("Setzkasten 20");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(19, HIGH);
break;
case 850680 :
Serial.println("Setzkasten 21");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(20, HIGH);
break;
case 851440 :
Serial.println("Setzkasten 22");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(21, HIGH);
break;
case 862000 :
Serial.println("Setzkasten 23");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(22, HIGH);
break;
case 863000 :
Serial.println("Setzkasten 24");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(23, HIGH);
break;
case 863380 :
Serial.println("Setzkasten 25");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(24, HIGH);
break;
case 866240 :
Serial.println("Setzkasten 26");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(25, HIGH);
break;
case 868340 :
Serial.println("Setzkasten 27");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(26, HIGH);
break;
case 873640 :
Serial.println("Setzkasten 28");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(27, HIGH);
break;
case 878940 :
Serial.println("Setzkasten 29");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(28, HIGH);
break;
case 879440 :
Serial.println("Setzkasten 30");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(29, HIGH);
break;
case 881240 :
Serial.println("Setzkasten 31");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(30, HIGH);
break;
case 885440 :
Serial.println("Setzkasten 32");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(31, HIGH);
break;
case 892740 :
Serial.println("Setzkasten 33");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(32, HIGH);
break;
case 893240 :
Serial.println("Setzkasten 34");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(33, HIGH);
break;
case 897040 :
Serial.println("Setzkasten 35");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(34, HIGH);
break;
case 907140 :
Serial.println("Setzkasten 36");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(35, HIGH);
break;
case 911180 :
Serial.println("Setzkasten 37");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(36, HIGH);
break;
case 911680 :
Serial.println("Setzkasten 38");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(37, HIGH);
break;
case 926280 :
Serial.println("Setzkasten 39");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(38, HIGH);
break;
case 929940 :
Serial.println("Setzkasten 40");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(39, HIGH);
break;
case 930440 :
Serial.println("Setzkasten 41");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(40, HIGH);
break;
case 932580 :
Serial.println("Setzkasten 42");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(41, HIGH);
break;
case 934640 :
Serial.println("Setzkasten 43");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(42, HIGH);
break;
case 934680 :
Serial.println("Setzkasten 44");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(43, HIGH);
break;
case 935680 :
Serial.println("Setzkasten 45");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(44, HIGH);
break;
case 935900 :
Serial.println("Setzkasten 46");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(45, HIGH);
break;
case 944440 :
Serial.println("Setzkasten 47");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(46, HIGH);
break;
case 945240 :
Serial.println("Setzkasten 48");
for (i = 0; i < 48; i++) {
digitalWrite(i, LOW);
}
digitalWrite(47, HIGH);
break;
Wundert mich etwas, dass bei der Länge deiner Zugehörigkeit hier, du noch nicht weißt, dass D0 und D1 für den USB-Serialwandler genutzt wird und daher nicht anderwertig verwendet werden "sollte".
Bei D21 ist das ein Pin für I2C.
Das steht übrigens alles im Datenblatt und auch im Pinout.
Und ja, du kannst auch die analogen Pins verwenden.
Die werden dann genau so, wie die digitalen Pins definiert.
Gruß Dieter
I2C = weniger ist mehr: weniger Kabel, mehr Probleme.
23.12.2020, 13:38 (Dieser Beitrag wurde zuletzt bearbeitet: 23.12.2020 22:04 von Bitklopfer.)
(23.12.2020 13:31)hotsystems schrieb: Wundert mich etwas, dass bei der Länge deiner Zugehörigkeit hier, du noch nicht weißt, dass D0 und D1 für den USB-Serialwandler genutzt wird und daher nicht anderwertig verwendet werden "sollte".
Bei D21 ist das ein Pin für I2C.
Das steht übrigens alles im Datenblatt und auch im Pinout.
Und ja, du kannst auch die analogen Pins verwenden.
Die werden dann genau so, wie die digitalen Pins definiert.
Hallo hotsystems,
super danke für deinen Hinweis
Programm geändert, es läuft. Muss jetzt unter die Modellbahn und einiges umverkabeln.
Ich melde mich später mit einem Foto zu meinem Projekt bei Euch zurück.
VG
Christian
24.12.2020, 14:08 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2020 23:12 von Christian_Moba-Arduino.)
Hallo Arduinofreunde,
ich wünsche Euch Allen frohe, besinnliche Weinachten. Ich möchte mich dazu für die schnellen Antworten auf meine Probleme im Umgang mit der IDE und Arduino danken.
Frage, darf ich auch A0 bis A16 in einer FOR- Schleife initialisieren lassen ?
Ähnlich wie ich es mit Digitalausgängen gemacht habe ?
Hatte als Index i dann geschrieben:
digitalWrite(Ai, LOW);
Beim Kompellieren kam dann promt die Meldung, IDE kennt keine Variable "Ai" was mir natürlich klar ist. Aber wie könnte ich das trotzdem realisieren, damit sich mein Programm verkürzt.
Zur Hardware und Leseabstand,.
Meine RFID Chips sind in der Vitrine auf einem 6mm starkem Sperrholz geklebt und zwischen Vitrinenrückwand und RFID-Leser Leiterplatte sind nochmals 5 mm Luftabstand. Damit ergeben sich ca. 10 mm Leseabstand.
Die Chips werden dennoch alle sauber erkannt.
Haben die RFID Chips eine maximale Lebensdauer ?
VG
Christian
Anbei mein fertiger Code:
Code:
/* kleines Modellbahntool, zur Rückmeldung , welche Vitrine sich am Auffahrtgleis zur Modellbahnanlage befindet.
V1.0 Dezember 2020 Christian
zusätzliche Modellbahnsoftware: Win-Digipet 2018
Hardware :
1x Arduino MEGA 2560
1x RFID Kartenleser
4x DR4088LN OPTO von Digikeijs
diverse Steuerleitungen
60x RFID Chips (je Vitrine 1 Mal) und eine RFIDD Chip Karte (Meldung an Windigipet 2018, wenn keine Vitrine sich am Auffahrtgleis befindet)
/*
Setzkasten Position Chip Nummer Arduino MEGA PIN Litzenfarbe
--------------------------------------------------------------------
Setzkasten 1 773940 Digital 2 rosa
Setzkasten 2 776540 Digital 3 schwarz
Setzkasten 3 778640 Digital 4 gelb
Setzkasten 4 790280 Digital 5 grau
Setzkasten 5 791340 Digital 6 braun
Setzkasten 6 792200 Digital 7 weiss
Setzkasten 7 792940 Digital 8 violett
Setzkasten 8 793440 Digital 9 gruen
Setzkasten 9 797940 Digital 10 rot
Setzkasten 10 800640 Digital 11 blau
Setzkasten 11 801940 Digital 12 rosa grau
Setzkasten 12 802040 Digital 14 gelb braun
Setzkasten 13 803040 Analog A0 weiss gruen
Setzkasten 14 806540 Analog A1 weiss gelb
Setzkasten 15 814840 Analog A2 braun gruen
Setzkasten 16 819040 Analog A3 rot blau
Setzkasten 17 829740 Digital 15 rosa
Setzkasten 18 841340 Digital 16 schwarz
Setzkasten 19 841640 Digital 17 gelb
Setzkasten 20 846140 Digital 18 grau
Setzkasten 21 850680 Digital 19 braun
Setzkasten 22 851440 Digital 20 weiss
Setzkasten 23 862000 Digital 22 violett
Setzkasten 24 863000 Digital 23 gruen
Setzkasten 25 863380 Digital 24 rot
Setzkasten 26 866240 Digital 25 blau
Setzkasten 27 868340 Digital 26 rosa grau
Setzkasten 28 873640 Digital 27 gelb braun
Setzkasten 29 878940 Digital 28 weiss gruen
Setzkasten 30 879440 Digital 29 weiss gelb
Setzkasten 31 881240 Digital 30 braun gruen
Setzkasten 32 885440 Digital 31 rot blau
Setzkasten 33 892740 Digital 32 rosa
Setzkasten 34 893240 Digital 33 schwarz
Setzkasten 35 897040 Digital 34 gelb
Setzkasten 36 907140 Digital 35 grau
Setzkasten 37 911180 Digital 36 braun
Setzkasten 38 911680 Digital 37 weiss
Setzkasten 39 926280 Digital 38 violett
Setzkasten 40 929940 Digital 39 gruen
Setzkasten 41 930440 Digital 40 rot
Setzkasten 42 932580 Digital 41 blau
Setzkasten 43 934640 Digital 42 rosa grau
Setzkasten 44 934680 Digital 43 gelb braun
Setzkasten 45 935680 Digital 44 weiss gruen
Setzkasten 46 935900 Digital 45 weiss gelb
Setzkasten 47 944440 Digital 46 braun gruen
Setzkasten 48 945240 Digital 47 rot blau
Setzkasten 49 955440 Analog A4 rosa
Setzkasten 50 957540 Analog A5 schwarz
Setzkasten 51 959040 Analog A6 gelb
Setzkasten 52 959880 Analog A7 grau
Setzkasten 53 967340 Analog A8 braun
Setzkasten 54 967740 Analog A9 weiss
Setzkasten 55 969840 Analog A10 violett
Setzkasten 56 970140 Analog A11 gruen
Setzkasten 57 975740 Analog A12 rot
Setzkasten 58 982840 Analog A13 blau
Setzkasten 59 984080 Analog A14 rosa grau
Setzkasten 60 984740 Analog A15 gelb braun
Setzkasten 61 990040 n.c. Verwendet für die Chip-Karte
*/
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
long code = 0; // Als neue Variable fügen wir „code“ hinzu, unter welcher später die UID als zusammenhängende Zahl ausgegeben wird. Statt int benutzen wir jetzt den Zahlenbereich „long“, weil sich dann eine größere Zahl speichern lässt.
for (byte i = 0; i < mfrc522.uid.size; i++)
{
code = ((code + mfrc522.uid.uidByte[i]) * 10); // Nun werden wie auch vorher die vier Blöcke ausgelesen und in jedem Durchlauf wird der Code mit dem Faktor 10 „gestreckt“. (Eigentlich müsste man hier den Wert 1000 verwenden, jedoch würde die Zahl dann zu groß werden.
}
Serial.print("Die Kartennummer lautet:"); // Zum Schluss wird der Zahlencode (Man kann ihn nicht mehr als UID bezeichnen) ausgegeben.
Serial.println(code);
switch (code) {
case 773940 :
Serial.println("Setzkasten 1");
for (i = 2; i < 49; i++) {
digitalWrite(i, LOW);
}
(24.12.2020 14:08)Christian_Moba-Arduino schrieb: Frage, darf ich auch A0 bis A16 in einer FOR- Schleife initialisieren lassen ?
Ähnlich wie ich es mit Digitalausgängen gemacht habe ?
Ja, darfst du. Diese Pins sind auch nur digitale, die zusätlich noch als analoger Input genutzt werden können.
Zitat:Hatte als Index i dann geschrieben:
digitalWrite(Ai, LOW);
Das geht so natürlich nicht.
Du müsstest zuvor ein Arry aufbauen und das dann per Index ansprechen.