PHP-Code:
/*
* Copyright (c) 2015 Marco Steinhauser. All rights reserved
*
* Funktion Pin Anzeige
*
* Test Programm für eine 5 stellige 13 Segment Anzeige mit Doppelpunkt, Punkt, KM/H
* und Sekunden. Aufgeteilt auf zwei Arduino 2560 MEGA R3
*
*
* Für den Arduino 2560 MEGA R3 Nr.1
*
*
* Steuert die Digitalen Pins der Ziffern X4, X5 und X6 an und aktiviert die Digitalen Ausgänge
* für die Zahlen 0-9, KM/H und SEK. Für die Ziffern X1 und X2 sowie den Punkt und Doppelpunkt
* werden die Zahlen über den I²C Bus an den Mega Nr. 2 übergeben.
* Zur Kontrolle werden die Zustände der digitalen Ausgänge auf dem Serial Monitor angezeigt.
*
* Version 2.2
*
* Vers. 1.0 vom 27 März 2015
* V. 1.0 Das Programm wurde an Hand eines Beispiel Program aus dem Internet
* entworfen und dient zur Kontrolle ob die Digitalen Ausgänge auch so
* angesteuert werden wie gewünscht.
*
* Vers. 1.1 vom 28 März 2015
* V. 1.1 Das Programm wurde an die Funktion "Zahl Auswerten" angepasst.
*
*
* Vers. 2.2 vom 30 März 2015
* V. 2.0 Das Programm wurde in die Funktion "Pin Anzeige" geändert.
* V. 2.1 Es wurden die Fallunterscheidungen für die 6 stellige Einzelzahl implementiert.
* V. 2.2 Zu Testzwecken wurden die Funktionen "empfangeZahl" und "bestimmeZahl" implementiert.
*
**/
byte digipin[34]={6,7,13,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,};
// Digital-Ausgänge deklarieren
byte ziffer[3][11] = {
{43,44,45,46,47,48,49,50,51,52,13}, // Ziffer 0 = X4
{33,34,35,36,37,38,39,40,41,42,13}, // Ziffer 1 = X5
{22,23,24,25,26,27,28,29,30,31,32}, // Ziffer 2 = X6
};
byte segmente[14][11] = {
{1,1,1,1,1,1,1,0,1,1,0}, // segmente 0 = Zahl 0
{1,0,0,0,0,0,0,0,1,1,0}, // segmente 1 = Zahl 1
{1,1,1,0,1,1,1,1,1,0,1}, // segmente 2 = Zahl 2
{1,1,1,0,1,0,1,1,1,1,1}, // segmente 3 = Zahl 3
{1,0,1,1,1,0,0,1,1,1,0}, // segmente 4 = Zahl 4
{1,1,1,1,1,0,1,1,0,1,1}, // segmente 5 = Zahl 5
{1,1,1,1,1,1,1,1,0,1,1}, // segmente 6 = Zahl 6
{1,0,1,0,0,0,1,1,1,1,0}, // segmente 7 = Zahl 7
{1,1,1,1,1,1,1,1,1,1,1}, // segmente 8 = Zahl 8
{1,1,1,1,1,0,1,1,1,1,1}, // segmente 9 = Zahl 9
{1,1,1,1,1,1,1,1,0,0,1}, // segmente 10 = Buchstabe E
{1,1,1,1,1,1,0,0,1,1,1}, // segmente 11 = Buchstabe U
{1,1,1,1,1,0,1,1,0,1,1}, // segmente 12 = Buchstabe S
{1,1,1,1,1,1,1,1,1,1,0}, // segmente 13 = Buchstabe A
};
long eingangszahl=0; //Die Variable für den Empfang der Einganszahl deklarieren und den Wert 0 zuweisen.
long a =0;
long divisor=100000; // Variable Divisor deklarieren und Wert zuweisen. Dieser Wert muss mit der
// Anzahl der Stellen des Einganswerts übereinstimmen.
long teilzahl=0; // Variable für die zwischen Schritte deklarieren
int i=0; // Variable für die Zählerschleife deklarieren
int j=0;
byte einzelzahl[6]; // Variable für das Ergebnis deklarieren. Es werden die einzelnen Werte der
// achtstelligen Zahl in einer Feld-Variable gespeichert
void setup()
{
Serial.begin(9600);
for(int i = 0; i<34; i++){
pinMode(digipin[i], OUTPUT); //Digital Pins als Ausgang aktivieren
};
for(int j = 0; j<11; j++){
digitalWrite(ziffer[0][j], (segmente[11][j]==1)?HIGH:LOW);
digitalWrite(ziffer[1][j], (segmente[12][j]==1)?HIGH:LOW);
digitalWrite(ziffer[2][j], (segmente[13][j]==1)?HIGH:LOW);
}
Serial.print("USA"); Serial.println("");
for (int i = 0; i < 34; i++){
Serial.print(digitalRead(digipin[i]));
}
Serial.println("");
delay(2000);
}
void loop()
{
eingangszahl=0;
empfangZahl();
delay (1000);
bestimmeZahl(); // Aufruf der Funktion innerhalb des Programms
delay (1000);
pinAnzeige();
}
void empfangZahl(){
Serial.flush();
Serial.println("Bitte 6 stellige Zahl eingeben:");
while (Serial.available() == 0)
{
// Macht nichts! Wartet bis eine Zahl empfangen wird.
}
while (Serial.available() > 0)
{
eingangszahl = eingangszahl * 10;
a=Serial.read()-'0';
eingangszahl = eingangszahl + a;
delay (5);
}
Serial.print("Die empfangene Zahl ist:");
Serial.println(eingangszahl);
}
void bestimmeZahl () // Funktion zum Auswerten einer 8 stelligen Zahl
{
for (int i=0; i<6; i++){
teilzahl=(eingangszahl/divisor);
divisor=(divisor/10);
if (teilzahl >=10) {
teilzahl=(teilzahl%10);
}
einzelzahl[i] = (teilzahl);
}
divisor=100000;
Serial.println ("Die Einzelzahlen sind:");
for (int i=0;i<6;i++){
Serial.println (einzelzahl[i]);
}
}
void pinAnzeige()
{
for(int i = 0; i<34; i++)
digitalWrite(digipin[i],LOW); //Digitale Ausgäng ausschalten
if (einzelzahl[0]==1){ //erste Stelle ist 1 = Uhrzeit
Serial.print("Uhrzeit"); Serial.println("");
Serial.print("DoppelPunkt"); Serial.println("");
delay(1000);
for(int i=0; i<10; i++){
if (einzelzahl[3]==i){ //vierte Stelle 0-9 = Ziffer X4 Zahl 0-9
for(int j = 0; j<11; j++){
digitalWrite(ziffer[0][j], (segmente[i][j]==1)?HIGH:LOW);
Serial.print(digitalRead(ziffer[0][j]));
}
Serial.println("");
}
if (einzelzahl[4]==i){ //fünfte Stelle 0-9 = Ziffer X5 Zahl 0-9
for(int j = 0; j<11; j++){
digitalWrite(ziffer[1][j], (segmente[i][j]==1)?HIGH:LOW);
Serial.print(digitalRead(ziffer[1][j]));
}
Serial.println("");
}
}
}
if (einzelzahl[0]==2||einzelzahl[0]==3){ //erste Stelle ist 2 oder 3
if (einzelzahl[0]==2){ //erste Stelle ist 2 = Sekunden
digitalWrite(7,HIGH); //aktiviert PIN 7 SEK
Serial.print("PIN 7 SEK ="); Serial.println(digitalRead(7));
Serial.print("PIN 6 KM/H ="); Serial.println(digitalRead(6));
Serial.print("Punkt"); Serial.println("");
delay(1000);
}
if (einzelzahl[0]==3){ //erste Stelle ist 3 = KM/H
digitalWrite(6,HIGH); //aktiviert PIN 6 KM/H
Serial.print("PIN 7 SEK ="); Serial.println(digitalRead(7));
Serial.print("PIN 6 KM/H ="); Serial.println(digitalRead(6));
Serial.println("");
delay(1000);
}
for(int i = 0; i<10; i++){
if (einzelzahl[3]==i){ //vierte Stelle 0-9 = Ziffer X4 Zahl 0-9
for(int j = 0; j<11; j++){
digitalWrite(ziffer[0][j], (segmente[i][j]==1)?HIGH:LOW);
Serial.print(digitalRead(ziffer[0][j]));
}
Serial.println("");
}
if (einzelzahl[4]==i){ //fünfte Stelle 0-9 = Ziffer X5 Zahl 0-9
for(int j = 0; j<11; j++){
digitalWrite(ziffer[1][j], (segmente[i][j]==1)?HIGH:LOW);
Serial.print(digitalRead(ziffer[1][j]));
}
Serial.println("");
}
if (einzelzahl[5]==i){ //sechste Stelle 0-9 = Ziffer X6 Zahl 0-9
for(int j = 0; j<11; j++){
digitalWrite(ziffer[2][j], (segmente[i][j]==1)?HIGH:LOW);
Serial.print(digitalRead(ziffer[2][j]));
}
Serial.println("");
}
}
}
if (einzelzahl[0]>=4&&einzelzahl[0]<=6){ //erste Stelle ist größer/gleich 4 = Fehler
Serial.print("Fehler");
Serial.println("");
for(int j = 0; j<11; j++){
digitalWrite(ziffer[0][j], (segmente[10][j]==1)?HIGH:LOW);
Serial.print(digitalRead(ziffer[0][j]));
}
Serial.println("");
for(int i = 0; i<10; i++){
if (einzelzahl[4]==i){ //dritte Stelle 0-9 = Ziffer X1 Zahl 0-9
for(int j = 0; j<11; j++){
digitalWrite(ziffer[1][j], (segmente[i][j]==1)?HIGH:LOW);
Serial.print(digitalRead(ziffer[1][j]));
}
Serial.println("");
}
if (einzelzahl[5]==i){ //dritte Stelle 0-9 = Ziffer X1 Zahl 0-9
for(int j = 0; j<11; j++){
digitalWrite(ziffer[2][j], (segmente[i][j]==1)?HIGH:LOW);
Serial.print(digitalRead(ziffer[2][j]));
}
Serial.println("");
}
}
}
if (einzelzahl[0]==0||einzelzahl[0]>=7){ //erste Stelle ist 0 = Error
Serial.print("Error");
Serial.println("");
for(int j = 0; j<11; j++){
digitalWrite(ziffer[0][j], (segmente[10][j]==1)?HIGH:LOW);
digitalWrite(ziffer[1][j], (segmente[3][j]==1)?HIGH:LOW);
digitalWrite(ziffer[2][j], (segmente[3][j]==1)?HIGH:LOW);
Serial.print(digitalRead(ziffer[0][j]));
Serial.print(digitalRead(ziffer[1][j]));
Serial.print(digitalRead(ziffer[2][j]));
}
Serial.println("");
}
}
Lesezeichen