China Post – Arduino Multi Function Shield

Arduino Multi Function Shield
Arduino Multi Function Shield

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();
 }

5 Replies to “China Post – Arduino Multi Function Shield”

    1. 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.

      1. 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

    2. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.