// Hier wird mit ausgabe(n) für n=0...12 ein Segment angemacht, für n=13....25 wiederholt sich das, aber als Balken
#include <Ticker.h>
// Der Wert ist in µs, bezieht sich auf die Leuchtdauer eines einzelnen Segments; zu hohe Werte bewirken Flimmern
#define LEUCHTDAUER 34
#define barPin1 A1
#define barPin2 A2
#define barPin3 A3
#define barPin4 A4
byte ausgabewert;
void writeBargraph(int n)
{
pinMode(barPin1, INPUT);
pinMode(barPin2, INPUT);
pinMode(barPin3, INPUT);
pinMode(barPin4, INPUT);
switch(n)
{
case 0:
break;
case 2:
pinMode(barPin2, OUTPUT);
pinMode(barPin4, OUTPUT);
digitalWrite(barPin4, HIGH);
digitalWrite(barPin2, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 1:
pinMode(barPin2, OUTPUT);
pinMode(barPin4, OUTPUT);
digitalWrite(barPin2, HIGH);
digitalWrite(barPin4, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 9:
pinMode(barPin2, OUTPUT);
pinMode(barPin3, OUTPUT);
digitalWrite(barPin3, HIGH);
digitalWrite(barPin2, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 10:
pinMode(barPin3, OUTPUT);
pinMode(barPin2, OUTPUT);
digitalWrite(barPin2, HIGH);
digitalWrite(barPin3, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 3:
pinMode(barPin1, OUTPUT);
pinMode(barPin2, OUTPUT);
digitalWrite(barPin1, HIGH);
digitalWrite(barPin2, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 4:
pinMode(barPin1, OUTPUT);
pinMode(barPin2, OUTPUT);
digitalWrite(barPin2, HIGH);
digitalWrite(barPin1, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 5:
pinMode(barPin4, OUTPUT);
pinMode(barPin1, OUTPUT);
digitalWrite(barPin1, HIGH);
digitalWrite(barPin4, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 6:
pinMode(barPin1, OUTPUT);
pinMode(barPin4, OUTPUT);
digitalWrite(barPin4, HIGH);
digitalWrite(barPin1, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 7:
pinMode(barPin3, OUTPUT);
pinMode(barPin4, OUTPUT);
digitalWrite(barPin3, HIGH);
digitalWrite(barPin4, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 8:
pinMode(barPin3, OUTPUT);
pinMode(barPin4, OUTPUT);
digitalWrite(barPin4, HIGH);
digitalWrite(barPin3, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 12:
pinMode(barPin1, OUTPUT);
pinMode(barPin3, OUTPUT);
digitalWrite(barPin1, HIGH);
digitalWrite(barPin3, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
case 11:
pinMode(barPin1, OUTPUT);
pinMode(barPin3, OUTPUT);
digitalWrite(barPin3, HIGH);
digitalWrite(barPin1, LOW);
delayMicroseconds(LEUCHTDAUER);
break;
}
}
void updateBargraph ()
{
static int counter = 0;
if(digitalRead(10))
{
if(counter == ausgabewert)
{
writeBargraph(ausgabewert);
}
}
else
{
if(counter <= ausgabewert)
{
writeBargraph(counter);
}
}
counter++;
if(counter > 13)
{
counter = 0;
}
}
Ticker bargraph(updateBargraph,LEUCHTDAUER,0,MICROS_MICROS);
void setup() {
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(A3,INPUT);
pinMode(A4,INPUT);
pinMode(A0,INPUT);
analogReference(DEFAULT);
ausgabewert = 0;
bargraph.start();
}
void loop() {
// Beispielwert:
ausgabewert = map(analogRead(A0),0,1023,0,12);
bargraph.update();
}