Temperaturmessung mit LM35 auf Multifunktionshield

Dependencies:   ShiftReg mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //LM35 auf Multifunktiionsshield A4 als Analogpin
00002 // Achtung LM35 mit runder Seite nach unten einstecken, abgeflachte Seite Richtung Anzeige.
00003 #include "mbed.h"
00004 #include "ShiftReg.h"
00005 
00006 AnalogIn LM35(A4);
00007 int tempC;
00008 unsigned short sensorValue;
00009 //#define ANZEIGE_MASKE 0x00000FFF
00010 //PortOut siebenSegPort(PortC, ANZEIGE_MASKE);
00011 const unsigned int siebenSegWerte[] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
00012 const unsigned int enableWerte[] = {0x10,0x20,0x040,0x80};
00013 unsigned int ausgabeWerte[] = {0x03,0x03,0x03,0x03}; // 0 0 0 0
00014 unsigned int pos=0;
00015 
00016 ShiftReg HC595(D8, D4, D7);
00017 
00018 //  -------------------------      -------------------------
00019 // | D6 | D4 | D2 | D0 | GND |    | D6 | D4 | D2 | D0 | GND |
00020 // |-------------------------|    |-------------------------|
00021 // | D7 | D5 | D3 | D1 | VCC |    | D7 | D5 | D3 | D1 | VCC |
00022 //  -------------------------      -------------------------
00023 //  -------------------------      -------------------------
00024 // | NC | NC | en2| en0| GND |    |  g |  e |  c |  a | GND |
00025 // |-------------------------|    |-------------------------|
00026 // | NC | NC | en3| en1| VCC |    | dot|  f |  d |  b | VCC |
00027 //  -------------------------      -------------------------
00028 
00029 void ausgabe();
00030 void aufteilung();
00031 
00032 
00033 int main()
00034 {
00035     HC595.ShiftByte(0x00, ShiftReg::LSBFirst); HC595.Latch(); wait(0.2);//Grundstellung
00036     while(1) {
00037         sensorValue=LM35.read_u16();
00038         printf("measure = %i \n", sensorValue);
00039         ausgabe();
00040         wait_ms(1);
00041         aufteilung();
00042     }
00043 }
00044 void ausgabe()
00045 {
00046     HC595.ShiftByte(ausgabeWerte[pos],ShiftReg::LSBFirst);
00047     HC595.ShiftByte(enableWerte[pos],ShiftReg::LSBFirst);
00048     HC595.Latch();
00049    
00050     pos++;
00051     pos=pos%4;
00052 }
00053 void aufteilung()
00054 {
00055     tempC=(sensorValue*2000/65536);    //hier sollte eigentlich 3300/65536 stehen, dann ist aber der Anzeigewert zu hoch
00056                                          //Azeigewert 222 entspricht 22,2 Grad 
00057         ausgabeWerte[0]=siebenSegWerte[tempC%10]; // Einer
00058         ausgabeWerte[1]=siebenSegWerte[tempC%100/10]; //Zehner
00059         ausgabeWerte[2]=siebenSegWerte[tempC%1000/100]; // Hunderter
00060         ausgabeWerte[3]=siebenSegWerte[tempC/1000]; // Tausender
00061     
00062 }