Hallo Leute. Ich habe zum ersten mal mit Arduino und C++ gearbeitet und für einen Tischkicker einen Torzähler zusammen gebastelt.
Material: Arduino Nano, zwei gewöhnliche Lichtschranken, zwei digitale Displays, Marke unbekannt.
Zum Betrieb der Displays habe ich mich der tm1637-Bibliothek bedient und solange probiert, bis es funktionierte.
Problem: Beide Displays sollen nicht parallel laufen, der Spielstand soll auf beiden Tischseiten so angezeigt werden, dass "Home" und "Gast" stets an der selben Stelle angezeigt werden. Spieler 1 (Home) sieht seine Tore also links, die des Gegners rechts. Der Gegner (Gast) sieht ebenfalls seine Tore links, die des Gegners rechts. Dazu müsste man die Display-Stellen irgendwie tauschen können (1+2 mit 3+4).
Die Pins für DIO und CLK werden am Anfang festgelegt; wäre es überhaupt möglich, zwei Displays zu betreiben, die unterschiedliche Werte zeigen?
Vorab schon mal besten Dank.
Mein Code:
#include "TM1637.h"
#define CLK 8
#define DIO 9
TM1637 tm1637(CLK, DIO);
int Torstand1; // Variablen fuer Torststaende definiert
int Torstand2;
int Maximal; // Maximal soll die Anzeige bei 99 resetten
#define Kontrolllampe1 3 // Lichtschranke1 //LED-Spielerei
#define Kontrolllampe2 5 // Lichtschranke2
#define Kontrolllampe3 7 // Reset
#define SENSORPIN1 2 // Lichtschranke1
#define SENSORPIN2 4 // Lichtschranke2
#define SENSORPIN3 6 // Reset
int Sensorstatus1 = 0, LetzterStatus1 = 0;
int Sensorstatus2 = 0, LetzterStatus2 = 0;
int Sensorstatus3 = 0, LetzterStatus3 = 0;
void setup() {
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);
tm1637.point(1); //Doppelpunkt
pinMode(Kontrolllampe1, OUTPUT);
pinMode(Kontrolllampe2, OUTPUT);
pinMode(Kontrolllampe3, OUTPUT);
pinMode(SENSORPIN1, INPUT);
digitalWrite(SENSORPIN1, HIGH);
pinMode(SENSORPIN2, INPUT);
digitalWrite(SENSORPIN2, HIGH);
pinMode(SENSORPIN3, INPUT);
digitalWrite(SENSORPIN3, HIGH);
Torstand1 = 0;
Torstand2 = 0;
Maximal = 99;
}
void loop(){
Sensorstatus1 = digitalRead(SENSORPIN1);
Sensorstatus2 = digitalRead(SENSORPIN2);
Sensorstatus3 = digitalRead(SENSORPIN3);
tm1637.display(0, (Torstand1 / 10) ); // Display-Stelle 1 = erste Stelle von Torstand1
tm1637.display(1, Torstand1 % 10 ); // Display-Stelle 2 = zweite Stelle von Torstand1
tm1637.display(2, (Torstand2 / 10) ); // Display-Stelle 3 = erste Stelle von Torstand2
tm1637.display(3, Torstand2 % 10 ); // Display-Stelle 4 = zweite Stelle von Torstand2
//"Falls-Sonst-Abfragen"
if (Sensorstatus1 == LOW) {
digitalWrite(Kontrolllampe1, HIGH); //Kontrolllampe ein
}
else {
digitalWrite(Kontrolllampe1, LOW); //Kontrolllampe aus
}
if (Sensorstatus2 == LOW) {
digitalWrite(Kontrolllampe2, HIGH);
}
else {
digitalWrite(Kontrolllampe2, LOW);
}
if (Sensorstatus3 == LOW) {
for (int zaehler=1; zaehler<=3; zaehler = zaehler+1){ //3x Blinken bei Reset
digitalWrite(Kontrolllampe3, HIGH);
delay(200);
digitalWrite(Kontrolllampe3, LOW);
delay(200);
}
}
else {
digitalWrite(Kontrolllampe3, LOW);
}
if (Sensorstatus1 && !LetzterStatus1) {
}
if (!Sensorstatus1 && LetzterStatus1) {
Torstand1 = Torstand1 + 1;
delay(1000);
}
if (Sensorstatus2 && !LetzterStatus2) {
}
if (!Sensorstatus2 && LetzterStatus2) {
Torstand2 = Torstand2 + 1;
delay(1000);
}
if (Sensorstatus3 && !LetzterStatus3) {
}
if (!Sensorstatus3 && LetzterStatus3) {
Torstand1 = 0;
Torstand2 = 0;
delay(500);
}
if (Torstand1 == Maximal){
Torstand1 = 0;
}
if (Torstand2 == Maximal){
Torstand2 = 0;
}
LetzterStatus1 = Sensorstatus1; // Auf diesen 3 Zeilen werden die zuletzt erkannten Zustaende
LetzterStatus2 = Sensorstatus2; // an den Lichtschranken und dem Nullsteller gespeichert
LetzterStatus3 = Sensorstatus3;
}