Arduino Problem

Hallo zusammen,
Ich bin gerade dabei meinen Arduino zu Programmieren. Er soll folgendes können:
Ausgeben einer 4 Stelligen Nummer auf einem 7 Segment Display, die Eingabe der Nummer soll über den Serial Monitor erfolgen und nach Tastendruck auf entsprechendem Display angezeigt werden.

Bin leider noch neu und nicht mit allem vertraut deshalb benötige ich eure Hilfe!

Der Code den ich verwende sowie eine Darstellung der Verkabelung des Arduinos sind angehängt.

  • Den Code habe ich 1:1 auch in Arduino übernommen.
  • Die Verkabelung im Link habe ich noch mit einem Taster und 2 zusätzlichen Kabeln ergänzt. Das eine Kabel vom Taster ist mit GND verbunden, das andere mit Pin (TX ->1).
  • Board: Arduino Uno
  • Port: COM 3

Der Upload des Codes funktioniert fehlerfrei. Nach Eingabe einer Ziffer über den Serial Monitor passiert jedoch garnichts, außer das die Lampe bei TX kurz aufblinkt. Drücken des Tasters fürt ebenfalls zu keiner Ausgabe auf dem Display.

Ich gehe davon aus, dass das Problem bei der Verkabelung liegt, sehe ich das richtig und habt ihr Tipps oder andere Vorschläge wie ich mein Programm bzw. meinen Arduino zum laufen bringen kann?

Bei Fragen gerne jederzeit melden.

Danke schonmal im Voraus!
Verkabelung Arduino

const int digitPins[] = { 2, 3, 4, 5 }; // Pins für die Ziffern (A, B, C, D)
const int segmentPins[] = { 6, 7, 8, 9, 10, 11, 12, 13 }; // Pins für die Segmente (A, B, C, D, E, F, G, DP)

const int buttonPin = 1; // Taster-Pin
int buttonState = 0; // Variable für den Tasterzustand
bool displayEnabled = true; // Variable zur Steuerung der Anzeige

int Status = 0;

void setup() {
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
}

for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}

pinMode(buttonPin, INPUT); // Setze den Tasterpin als Eingang
}

void displayNumber(int number) {
const int numArray[10][7] = {
{ 1, 1, 1, 1, 1, 1, 0 }, // 0
{ 0, 1, 1, 0, 0, 0, 0 }, // 1
{ 1, 1, 0, 1, 1, 0, 1 }, // 2
{ 1, 1, 1, 1, 0, 0, 1 }, // 3
{ 0, 1, 1, 0, 0, 1, 1 }, // 4
{ 1, 0, 1, 1, 0, 1, 1 }, // 5
{ 1, 0, 1, 1, 1, 1, 1 }, // 6
{ 1, 1, 1, 0, 0, 0, 0 }, // 7
{ 1, 1, 1, 1, 1, 1, 1 }, // 8
{ 1, 1, 1, 1, 0, 1, 1 } // 9
};

for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], LOW);

for (int j = 0; j < 7; j++) {
  digitalWrite(segmentPins[j], numArray[number][j]);
}

delay(1);
digitalWrite(digitPins[i], HIGH);
}
}

void loop() {

if (Serial.available() > 0) {
int value = Serial.parseInt(); //Die zahl die in den seriellen monitor geschrieben wurde, wird gelesen
displayNumber(value);
Status = 0;
}

while (Status = 1) {
buttonState = digitalRead(buttonPin); // Lese den Tasterzustand
if (buttonState = LOW) {
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH); // Alle Ziffern ausschalten
}
Status = 1;
}
}
}

Sage mir, wann die Schleife aufhört zu laufen....

Und da wohl noch mal der gleiche Fehler.

Tipp: Warnungen aktivieren, und zwar alle.
Und: Unterscheide zwischen Zuweisung und Vergleich

Was combie verschweigt:

= und == sind 2 vershiedenen Sachen.
= ist eine Zuweisung
== ist ein Vergleich

Bei if, while ecc braucht es ein ==.

laß pin 1 frei.
A0 bis A5 können als D14 bia D19 als Digitale Ein/Ausgänge verwendet werden ( so wie die anderen 14 D Pins) .

Grüße Uwe

Wie Uwe schon angemerkt hat: Nicht unbedingt eine gute Wahl, denn dieser Pin wird auch für die serielle Schnittstelle (Verbindung zum PC) verwendet.

Okay. Aber dann solltest Du den Pin auch passend mit Pullup konfigurieren oder einen externen Widerstand verbauen:

pinMode(buttonPin, INPUT_PULLUP); // Setze den Tasterpin als Eingang

JA, ABER wenn du ein NANO hast, würde ich IMMER A4 + A5 freilassen.

Einzige Ausnahme :

Wenn ich sicher bin NIEMALS ein I2C - Bus im Projekt zu benutzen. Und das ist erfahrungsgemäß sehr selten :wink:

Weil die beiden sind der I2C-Bus :wink:

Gruß

Pucki

Tipp:
Für unbenutzte Pins gibts kein Geld zurück.

2 Likes

JA, aber spätestens in 4 Wochen will er ein 1602 o.ä. Display haben. Dann erklärt man ihn der ne Huckpack-Platine das Leben viel einfacher macht.

Und dann muss er sein Code umbauen :wink:

Also lieber vorplanen.

Der i2c-Bus ist halt einer von 2 Busen (andere ist SPI) die der Arduino / ESP am wichtigsten braucht.

Ach ja, TX/RX sind auch drauf, Nutze ich fast nie und habe ich auch bezahlt :frowning:

Gruß

Pucki

Vorsicht:
Prognosen sind unglaublich schwierig.
Insbesondere, wenn sie die Zukunft betreffen.

Auch nicht zum Flashen des Sketches?

Gruß Tommy

Vermutlich möchte ihm auch nicht den Seriellen Monitor nutzen, weil der sich sonst schneller abnutzt.
Oder aus sonstigen (absurden?) Gründen.

Leute ich rede von den PINs wo daneben so 2 Buchstaben sind. :wink:

Ich kaufe nur fertige Boards mit USB-Anschluss. Und ALLES was ihr am lästern seit, mache ich darüber.

Gruß

Pucki

Verstehst Du eigentlich selbst den Unsinn, den Du schreibst?

Gruß Tommy

Offensichtlich nicht, sonst wüsste er, dass bei vielen Boards die 'PINs mit den 2 Buchstaben daneben' nicht alle unabhängig von USB sind.

Der TO verwendet einen UNO.
Wenn man vorsieht den I2C Bus zu verwenden dann ist auch beim UNO besser die Pins A4 und A5 nicht zu verwenden.

Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.