
Einfaches Test Shield für den Arduino
Es gibt leider nur wenige und meist recht teure Arduino Shields mit einer LED 7-Segmentanzeige. Bei diesem Multi Function Shield ist wenigsten eine kleine Anzeige dabei und teuer ist es auch nicht. Daneben bietet es noch weitere Features.
Eigentlich sind 7-Segmentanzeige günstig und in diversen Ausführungen enthalten. Das verdrahten einer mehrstelligen Anzeige macht aber nicht so richtig Spaß.
Das Shield bekommt man ab 5€ bei eBay. Da neben der Anzeige noch weitere Funktionen integriert sind bietet es die Möglichkeit viele Funktionen des Arduinos auszuprobieren, ohne das zusätzliche Bauteile oder Verdrahtungsaufwand erforderlich ist.
Funktionen des Arduino Multi Function Shield
- 4 digit 7-segment LED Display mit 2x 74HC595 Schieberegister
- 4x LED
- 10K Potentiometer als analoger Eingang
- 3 x Taster
- Piezo Buzzer
- Sockel für DS18B20 Temperature Sensor
- Sockel für Infrarot Empfänger
- Sockel für BT Modul
Anbei ein kleines Programm um einige Funktionen zu testen:
//******************************************************************************* //*******************************************************************************/ // LED D1 ... D4 #define LED1 10 #define LED2 11 #define LED3 12 #define LED4 13 int LEDS[] = {10,11,12,13}; // Taster #define KEY1 A1 #define KEY2 A2 #define KEY3 A3 unsigned char KEYS[] = {A1, A2, A3}; // Potentiometer #define Poti A0 int Spannung = 0; // Schieberegister für 7-Segment int latchPin = 4; int clockPin = 7; int dataPin = 8; // Buzzer #define Buz 3 // 7-Segment unsigned char Dis_table[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90}; // Ziffern 0 bis 7 unsigned char Dis_buf[] = {0xF1,0xF2,0xF4,0xF8}; // Schaltet die Segmente unsigned char disbuff[] = {0, 0, 0, 0}; int SUM = 0; int Flag_up = 1; int Flag_up1 = 1; void setup () { // LED D1 ... D4 for(int i=10; i<=13; i++) { pinMode(i, OUTPUT); digitalWrite(i,HIGH); } // Taster A1 bis A3 for(int i=0; i<=2; i++) { pinMode(KEYS[i],INPUT); //pinMode(KEYS[i],INPUT_PULLUP); } // Potentiometer //pinMode(Poti,INPUT); // Buzzer pinMode(Buz,OUTPUT); digitalWrite(Buz,HIGH); // 7-Segment pinMode(latchPin,OUTPUT); pinMode(clockPin,OUTPUT); pinMode(dataPin,OUTPUT); // Anzeige ausschalten for(char i=0; i<=3; i++) { digitalWrite(latchPin,LOW); shiftOut(dataPin,clockPin,MSBFIRST,0xFF); shiftOut(dataPin,clockPin,MSBFIRST,Dis_buf[i] ); digitalWrite(latchPin,HIGH); delay(2); } Serial.begin(9600); } void led() { for(int i=0; i<=3; i++) { digitalWrite(LEDS[i],HIGH); delay(1000); digitalWrite(LEDS[i],LOW); delay(1000); } } void taster () { for(int i=0; i<=2; i++) { if(digitalRead(KEYS[i]) == LOW) { delay(20); if(digitalRead(KEYS[i]) == LOW) { digitalWrite(LEDS[i],LOW); while(digitalRead(KEYS[i]) == LOW); } } digitalWrite(LEDS[i],HIGH); } } void analog() { Spannung = analogRead(Poti); Spannung = map(Spannung, 0, 1023, 0, 5000); Serial.print("Spannung = "); Serial.println(Spannung); delay(500); } void pwm () { analogWrite(LED1,analogRead(Poti)); } void buzzer () { digitalWrite(Buz,LOW); delay(10); digitalWrite(Buz,HIGH); delay(100); } void display1(void) { for(char i=0; i<=3; i++) { digitalWrite(latchPin,LOW); shiftOut(dataPin,clockPin,MSBFIRST,Dis_table[disbuff[i]]); shiftOut(dataPin,clockPin,MSBFIRST,Dis_buf[i] ); digitalWrite(latchPin,HIGH); delay(2); } } void display() { for(int i=0; i<=3; i++) { digitalWrite(latchPin,LOW); shiftOut(dataPin,clockPin,MSBFIRST,Dis_table[disbuff[i]]); shiftOut(dataPin,clockPin,MSBFIRST,Dis_buf[i] ); digitalWrite(latchPin,HIGH); delay(2); /* Serial.print("Index Ziffer: "); Serial.print("Dezimal= "); Serial.print(Dis_buf[i]); Serial.print("Binaer= "); Serial.print(Dis_buf[i],BIN); Serial.print(" Ziffer - dezimal: "); Serial.print(Dis_table[disbuff[i]]); Serial.print(" Binear: "); Serial.println(Dis_table[disbuff[i]],BIN); */ } } void no_multiplex () { for(char i=0; i<=3; i++) digitalWrite(latchPin,LOW); shiftOut(dataPin,clockPin,MSBFIRST,0b1111111); shiftOut(dataPin,clockPin,MSBFIRST,0B11111111 ); digitalWrite(latchPin,HIGH); delay(2); delay(1000); } void counter () { SUM++; disbuff[0]=SUM/1000; disbuff[1]=SUM%1000/100; disbuff[2]=SUM%100/10; disbuff[3]=SUM%10; } void loop() { //taster (); //led(); //display(); //counter(); //analog(); //pwm(); //buzzer(); }
Hallo, hab den Sketch mal audgespielt. Passiert nichts.
Hallo,
schaffe es momentan nicht zu prüfen da ich neben an mehreren Druckern baue.
Schau doch mal bei der ct Make rein…
Multi-Function-Shield für Arduino
die haben auch für die letzte Ausgabe was geschrieben…
In der Hauptschleife “loop()” sind alle Aufrufe auskommentiert. Entferne z.B. die Kommentarzeichen vor display() und counter() und schon sieht man den Zähler arbeiten.
Hallo, bin auch völlig neu mit diesem Shield unterwegs, weil ein LCD zu zeitkritsch ist im Zusammenhang mit einer Interrupt-Routine. Gibt es ein einfaches praktisches Beispiel zur 4 stelligen Ausgabe eines numerischen Wertes irgendwo ?
Ich bin für jeden Hinweis dankbar –
Liebe Grüße Oldi Peter
In der Hauptschleife “loop()” sind alle Aufrufe auskommentiert. Entferne z.B. die Kommentarzeichen vor display() und counter() und schon sieht man den Zähler arbeiten.