Arduino 32 Segment Display Counter programmieren?

1 Antwort

Also etwas Eigeninitiative muss da schon kommen.

Aber hier ist der Inhalt der Loop-Funktion dafür:

for (int i = 9; i >= 0; i--) {
     lcd.setCursor(8, 2);
     lcd.print(i);
}

while (true);

lg Suiram1

Woher ich das weiß:Hobby

Nils119 
Beitragsersteller
 01.07.2024, 16:03

Sorry, aber ich bin erst sehr neu in diesem Thema :-) . Aber noch eine Frage: Was soll ich in den setup Teil schreiben, weil wenn ich nur das was du mir geschrieben hast in den Loop teil mache und den Rest so lasse (ich habe erst den Loop Inhalt gelöscht und dann deinen eingefügt) dann steht auf dem Display die ganze Zeit 0 also in der 2. Zeile.

Woran liegt das?

LG

Nils

0
Suiram1  01.07.2024, 16:06
@Nils119

Nur lcd.begin(16, 2); muss in der setup-Methode stehen. Das mit der 0 kommt wahrscheinlich davon das meine Korrektur noch nicht vorhanden ist (siehe anderen Kommentar von mir).

0
Nils119 
Beitragsersteller
 01.07.2024, 16:13
@Suiram1

Ich habe jetzt es so gemacht wie du gesagt hast:
/*

LiquidCrystal Library - Hello World

Demonstrates the use a 16x2 LCD display. The LiquidCrystal

library works with all LCD displays that are compatible with the

Hitachi HD44780 driver. There are many of them out there, and you

can usually tell them by the 16-pin interface.

This sketch prints "Hello World!" to the LCD

and shows the time.

The circuit:

* LCD RS pin to digital pin 12

* LCD Enable pin to digital pin 11

* LCD D4 pin to digital pin 5

* LCD D5 pin to digital pin 4

* LCD D6 pin to digital pin 3

* LCD D7 pin to digital pin 2

* LCD R/W pin to ground

* LCD VSS pin to ground

* LCD VCC pin to 5V

* 10K resistor:

* ends to +5V and ground

* wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008

by David A. Mellis

library modified 5 Jul 2009

by Limor Fried (http://www.ladyada.net)

example added 9 Jul 2009

by Tom Igoe

modified 22 Nov 2010

by Tom Igoe

modified 7 Nov 2016

by Arturo Guadalupi

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/LiquidCrystalHelloWorld

*/

// include the library code:

#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin

// with the arduino pin number it is connected to

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

delay(1000);

lcd.begin(16, 2);

}

void loop() {

delay(1000);

lcd.print(millis() / 1000);

for (int i = 9; i >= 0; i--) {

lcd.setCursor(8, 2);

lcd.print(i);

}

while (true);

}

Aber das steht jetzt nur in der ersten Zeile eine 2 und in der 2. Zeile 9.Sekment eine 0.

Woran liegt das?

Sorry, dass ich die ganze Zeit Frage :(

NILS

0
Suiram1  01.07.2024, 16:18
@Nils119
Sorry, dass ich die ganze Zeit Frage :(

Dafür ist diese Plattform doch da.

So müsste es eigentlich aussehen:

void setup() {
 lcd.begin(16, 2);
}

void loop() {
 for (int i = 9; i >= 0; i--) {
  delay(1000);
  
  lcd.setCursor(8, 2);
  lcd.print(i);
 }

 while (true);
}

Das in der ersten Zeile kam durch lcd.print(millis() / 1000); zustande und der rest aufgrund desselben Problems wie davor.

0
Nils119 
Beitragsersteller
 01.07.2024, 16:23
@Suiram1

Hi.

bei mir kam jetzt ein Error: /private/var/folders/ry/lk6vzfk924g2n4qwpsjt2fpr0000gn/T/.arduinoIDE-unsaved202461-1381-l0064e.7cyrb/HelloWorld/HelloWorld.ino: In function 'void setup()':

/private/var/folders/ry/lk6vzfk924g2n4qwpsjt2fpr0000gn/T/.arduinoIDE-unsaved202461-1381-l0064e.7cyrb/HelloWorld/HelloWorld.ino:2:2: error: 'lcd' was not declared in this scope

 lcd.begin(16, 2);

 ^~~

/private/var/folders/ry/lk6vzfk924g2n4qwpsjt2fpr0000gn/T/.arduinoIDE-unsaved202461-1381-l0064e.7cyrb/HelloWorld/HelloWorld.ino: In function 'void loop()':

/private/var/folders/ry/lk6vzfk924g2n4qwpsjt2fpr0000gn/T/.arduinoIDE-unsaved202461-1381-l0064e.7cyrb/HelloWorld/HelloWorld.ino:9:3: error: 'lcd' was not declared in this scope

  lcd.setCursor(8, 2);

  ^~~

exit status 1

Compilation error: 'lcd' was not declared in this scope
Ich klaube aber der lag daran das lcd nicht definiert oder so wurde? Kann dass sein? Wenn ja, wie behebt man es?
NILS

0
Suiram1  01.07.2024, 16:27
@Nils119

Vermutlich hast du nur den Code genommen den ich gerade gepostet habe...

Das war allerdings nur für die setup und loop Methode, der Rest war schon richtig.

#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
 lcd.begin(16, 2);
}

void loop() {
 for (int i = 9; i >= 0; i--) {
  lcd.setCursor(8, 2);
  lcd.print(i);
   
  delay(1000);
 }

 while (true);
}

Hier ist noch mal der abgeänderte Code vom Anfang auf das wesentliche beschränkt (Kommentare hab ich alle rausgelöscht).

Um generell mit dem Arduino zu Arbeiten solltest du die Programmiersprache C/C++ lernen da das alles hier C/C++ wenn auch etwas abgewandelt.

0
Nils119 
Beitragsersteller
 01.07.2024, 17:01
@Nils119

So ich habe jetzt ein neues Problem :(. Was ist an diesem Code falsch dass der Motor nicht angeht
#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

lcd.begin(16, 2);

pinMode(13,OUTPUT);

pinMode(13,HIGH);

}

void loop() {

lcd.print("Motor startet in!");

for (int i = 9; i >= 0; i--) {

lcd.setCursor(1, 2);

lcd.print(i);

if (i==0){

lcd.clear();

lcd.setCursor(1,2);

lcd.print("Motor ist an!");

pinMode(13,HIGH);

}

delay(1000);

}

while (true);

}

0
Suiram1  01.07.2024, 17:14
@Nils119

Erstmal als genereller Hinweis ist es besser das alles als Quellcode einbetten da man es so vieleinfacher lesen kann. Das kannst du so machen indem du oben rechts auf das Icon klickst so das die Optionen ausgeklappt werden, dann den Quellcode Markierst und auf das </> Symbol klickst.

Zurück zur eigentlichen Frage. Das Problem hierbei ist das pinMode nur für die generelle Einstellung input oder output genutzt wird. Um nun den Pin wirklich an oder aus zu machen musst du digitalWrite nutzen.

Eine Verbesserung hatte ich ansonsten am bestehenden Code: Das If kannst du eigentlich komplett weglassen und anschließend den Teil mit der Aktivierung des Motors nach die for-Schleife packen. Also in etwa so:

lcd.print("Motor startet in!");

for (int i = 9; i >= 0; i--) {
   lcd.setCursor(1, 2);
   lcd.print(i);

   delay(1000);
}

lcd.clear();
lcd.setCursor(1, 2);
lcd.print("Motor ist an!");

digitalWrite(13, HIGH);

Edit: In der Setup hast du ja geschrieben pinMode(13, HIGH); was wenn man digitalWrite nutzen würde ja den Motor anmachen würde, also würde man doch keinen Unterschied sehen.

0
Suiram1  01.07.2024, 17:23
@Suiram1

Mal ein anderer Hinweis: In der Frage hast du geschrieben das es sich um ein 32 Segment Display handelt. Es müsste sich also um ein 32x4 Display handeln und damit du diese volle Größe auch nutzen kannst musst du das der Lib auch mitteilen indem du in der Setup-Methode anstelle von lcd.begin(16, 2); lcd.begin(32, 4); schreibst.

0
Nils119 
Beitragsersteller
 01.07.2024, 18:45
@Suiram1

Ich habe das jetzt gemacht und es geht nicht. Also im setup habe ich digitalPin(13,OUTPUT), digitalPin(13,HIGH)

voidloop:

digitalWrite(13, HIGH)

0
Suiram1  01.07.2024, 18:48
@Nils119

das pinMode(13, OUTPUT); kann bleiben. pinMode wird grunsätzlich genutzt um die Einstellung von output oder Input vorzunehmen und digitalWrite wird genutzt um den Pin an oder aus zu machen. Bei digitalPin müsste dir ein Fehler ausgegeben werden da es eine solche Methode nicht gibt.

0
Nils119 
Beitragsersteller
 01.07.2024, 19:00
@Suiram1

So ist es gerade:

void setup() {
 lcd.begin(16, 2);
 pinMode(13, OUTPUT);
 pinMode(13, HIGH);
 }
void loop() {
  lcd.print("Motor startet in!");
 for (int i = 9; i >= 0; i--) {
  lcd.setCursor(1, 2);
  lcd.print(i);
  if (i==0){
    lcd.clear();
    lcd.setCursor(1,2);
    lcd.print("Motor ist an!");
    digitalWrite(13, HIGH);
  }
   
  delay(1000);
 }

 while (true);
}
0
Suiram1  01.07.2024, 19:08
@Nils119
void setup() {
   lcd.begin(16, 2);
   pinMode(13, OUTPUT);
   digitalWrite(13, LOW);
}

void loop() {
   lcd.print("Motor startet in!");

   for (int i = 9; i >= 0; i--) {
      lcd.setCursor(1, 2);
      lcd.print(i);
      delay(1000);
   }

   lcd.clear();
   lcd.setCursor(1,2);
   lcd.print("Motor ist an!");

   digitalWrite(13, HIGH);

   while (true);
}

Änderungen:

  1. pinMode(13, HIGH); zu digitalWrite(13, LOW); gemacht weil 1. pinMode(13, HIGH) nicht geht und weil es sinnvoller ist den Motor (falls er aus welchem Grund auch immer an ist) aus zu schalten
  2. Das if entfernt und den Code Block vom if nach der For-Schleife eingefügt, weil das if unnötig ist
0
Nils119 
Beitragsersteller
 01.07.2024, 19:50
@Suiram1

Ok gut es geht jetzt, aber nur mit anschieben das ich ja schon das Dysplay habe. Wie kann ich noch eine zusätzliche Stromversorgung an den Arduino machen? Oder kann ich die 3 , 5 v deaktivieren und dann per code aktivieren?

0
Suiram1  01.07.2024, 19:54
@Nils119

3.3V und 5V Pin kann man nicht deaktivieren. Wenn du einen Pin wie die 13 aktivierst dann wird dieser mit 5V versorgt.

Wie kann ich noch eine zusätzliche Stromversorgung an den Arduino machen?

Was genau meinst du damit? Willst du einfach das Arduino betreiben ohne das es an den PC angeschlossen ist?

0
Nils119 
Beitragsersteller
 01.07.2024, 20:05
@Suiram1

Ich meine wenn ich es mit dem PC verbunden habe wie ich dann noch eine Stromquelle anbauen kann

0
Suiram1  01.07.2024, 20:08
@Nils119

Wenn es mit dem PC verbunden ist brauch es doch keine weitere Stromquelle.

Neben dem USB-B Anschluss ist noch ein runder Anschluss wo man ein entsprechendes Netzteil anschließen kann und man kann auch Spannung an den Vin Pin anlegen.

Worauf genau willst du den hinaus? Vllt. gibt es einen besseren weg das zu machen was du vorhast.

0
Nils119 
Beitragsersteller
 01.07.2024, 20:10
@Suiram1

Also ich will ein Display haben wo steht `Motor startet in: 9,8,7 ...` dann soll Pin 13 angehen und somit der Motor aber irgendwie geht es nicht bzw. man muss den Motor andrehen...

0
Suiram1  01.07.2024, 20:14
@Nils119

Auf dem Arduino müsste sich eine LED befinden die mit L beschriftet ist. Schau ob diese dann angeht wenn der Motor sollte.

0
Nils119 
Beitragsersteller
 01.07.2024, 20:16
@Suiram1

Da liegt Spannung auf aber zu wenig. Deswegen: Gibt es eine Möglichkeit 2 Stromquellen zu nutzen zb PC und Batterie

0
Suiram1  01.07.2024, 20:18
@Nils119

Leuchten die LEDs am Arduino generell sehr schwach und wie viel Spannung den?

0
Nils119 
Beitragsersteller
 01.07.2024, 20:19
@Suiram1

ne die leuchten Stark aber der Motor nicht.

0
Suiram1  01.07.2024, 20:24
@Nils119

Mir kam das mit dem Anschieben zwar seltsam vor, allerdings wenn die LEDs ansich stark leuchten kann es an der Versorgung des Arduinos nicht liegen. Bei solchen Hardware Sachen lässt sich das nur über den Chat hier sowieso schwer feststellen wo das Problem lieht, aber meine Vermutung ist das alles richtig läuft, allerdings die 5V dem Motor zu wenig sind damit er gut läuft. Deswegen schließt man eigentlich auch kein Motor direkt an das Arduino an, weil dieser dem dann quasi die Spannung 'klauen' könnte oder es dem Motor zu wenig ist. In der Regel würde man ein Motorcontroller wie z.B. einen L293D IC verwenden der an eine Eigene Spannung quelle angeschlossen ist.

0
Suiram1  01.07.2024, 15:59

Ergänzung Meinerseits: Ich hab in dem Körper der for-Schleife delay(1000); vergessen. Ohne das wird es so schnell angezeigt das man nichts erkennen kann.

0