// Voltage 0...5 V is measured and shown as 0... 5000 (mV)
// 12 lines only are needed when using multiplexing:
byte _7SEG[8] = { 6,7,8,9,10,11,12,13 } ;
const char SEG7[ ] = { // invertierte Logik, gemeinsame Anode
0b11000000, 0b11111001, 0b10100100, 0b10110000, // 0 1 2 3
0b10011001, 0b10010010, 0b10000010, 0b11111000, // 4 5 6 7
0b10000000, 0b10010000, 0b10001000, 0b10000011, // 8 9 A b
0b11000110, 0b10100001, 0b10000110, 0b10001110, // C d E F
0b11111111 } ; // und Nix
//bosch 0281002531 maf sensor
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
for( byte i = 0 ; i < 8 ; i++ ) pinMode( _7SEG[i], OUTPUT);
for( byte i = 2 ; i < 6 ; i++ ) pinMode( i, OUTPUT);
pinMode(A0, INPUT); //A0 als analoger Eingang
Serial.begin(9600); // Serielle Schnittstelle starten
}
// the loop routine runs over and over again forever:
void loop() {
unsigned int adw ; //Variable für ADW init. für positive Zahlen (0...2^16)
adw = analogRead(A0); //Analogwert einlesen und in adw ablegen
adw = map(adw,0,1023,0,5000); //Wertebereich auf Spg. 0-5000mV anpassen
//adw = adw/1023*5000; //das gleiche zu fuß gerechnet
Serial.println(adw);
// int Testanzeige = 9638;
// Anzeige_4x7SEG(Testanzeige);
// Serial.println(Testanzeige);
Anzeige_4x7SEG(3.59*pow(2.64,((float)adw)/1000)) ; //Aufruf der Fkt. "Anzeige_4x7SEG" mit Übergangewert adw
// while(1)
// {
// }
}
void Anzeige_4x7SEG ( unsigned int zahl )
{
int t = zahl/1000; //1000er Stelle (Ziffer) in t ablegen
int h = (zahl%1000)/100; //100er Stelle (Ziffer) in h ablegen
int z = (zahl%100)/10; //10er Stelle (Ziffer) in z ablegen
int e = (zahl%10); //1er Stelle (Ziffer) in e ablegen
// int Wert[4];
// Wert[0] = zahl/1000;
// Wert[1] = (zahl-Wert[0]*1000)/100;
// Wert[2] = (zahl-Wert[0]*1000-Wert[1]*100)/10;
// Wert[3] = zahl-Wert[0]*1000-Wert[1]*100-Wert[2]*10;
// Serial.println(t);
// Serial.println(h);
// Serial.println(z);
// Serial.println(e);
byte zahlen[4] = {t,h,z,e}; //Array mit Ziffern für 7Segmentanzeige
for(int k = 0; k<=3;k++) //Schleife für Ziffern der 7Segmentanzeige
{
byte j = 0b00000001; //Bitmaske für Datenleitungen
int Anzeige = SEG7[zahlen[k]]; //7 Segmentmuster für jeweilige Ziffer in Anzeige anlegen
if (((zahlen[k] == 0) && (zahlen[k-1] ==0) && ((zahlen[0] ==0) && (zahlen[1] ==0))) || ((zahlen[0]==0) && (k==0))) //Falls aktuelle Ziffer eine NULL ist und die nächst höhere Stelle auch eine NULL ist ODER die Tausender Stelle eine NULL ist und die diese aktuell ausgegeben werden soll, dann...
{
Anzeige = SEG7[16]; //...schreibe den Wert "NIX" in die aktuelle 7SEG-Anzeige
}
for (int i = 6; i<=13 ; i++) //Schleife für Datenleitungen (Welche LED der 7Seg soll eingeschaltet werden?)
{
if(Anzeige & j)
{
digitalWrite(i,HIGH);
}
else
digitalWrite(i,LOW);
//digitalWrite(i,Anzeige & j);
j= j << 1; //Bitmaske nach links verschieben für nächstes Bit
}
digitalWrite(k+2,HIGH); //Transistor für jeweilige 7Seg Anzeige schalten (Multiplexen)
delay(10); //Anzeige leuchtet für 10ms
digitalWrite(k+2,LOW); //Anzeige wieder abschalten
}
}
/*
int j = 0b00000001;
int Anzeige = SEG7[t];
for (int i = 6; i<=13 ; i++)
{
digitalWrite(i,Anzeige & j);
j= j << 1;
}
digitalWrite(2,HIGH);
delay(10);
digitalWrite(2,LOW);
*/