Gewerblich-Technische Schule Offenburg
/
LM35functionshield
Temperaturmessung mit LM35 auf Multifunktionshield
main.cpp@0:efab2162f523, 2018-04-08 (annotated)
- Committer:
- muellerhubert
- Date:
- Sun Apr 08 07:01:19 2018 +0000
- Revision:
- 0:efab2162f523
Temperatur with LM35 and Multifunctionschield
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
muellerhubert | 0:efab2162f523 | 1 | //LM35 auf Multifunktiionsshield A4 als Analogpin |
muellerhubert | 0:efab2162f523 | 2 | // Achtung LM35 mit runder Seite nach unten einstecken, abgeflachte Seite Richtung Anzeige. |
muellerhubert | 0:efab2162f523 | 3 | #include "mbed.h" |
muellerhubert | 0:efab2162f523 | 4 | #include "ShiftReg.h" |
muellerhubert | 0:efab2162f523 | 5 | |
muellerhubert | 0:efab2162f523 | 6 | AnalogIn LM35(A4); |
muellerhubert | 0:efab2162f523 | 7 | int tempC; |
muellerhubert | 0:efab2162f523 | 8 | unsigned short sensorValue; |
muellerhubert | 0:efab2162f523 | 9 | //#define ANZEIGE_MASKE 0x00000FFF |
muellerhubert | 0:efab2162f523 | 10 | //PortOut siebenSegPort(PortC, ANZEIGE_MASKE); |
muellerhubert | 0:efab2162f523 | 11 | const unsigned int siebenSegWerte[] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09}; |
muellerhubert | 0:efab2162f523 | 12 | const unsigned int enableWerte[] = {0x10,0x20,0x040,0x80}; |
muellerhubert | 0:efab2162f523 | 13 | unsigned int ausgabeWerte[] = {0x03,0x03,0x03,0x03}; // 0 0 0 0 |
muellerhubert | 0:efab2162f523 | 14 | unsigned int pos=0; |
muellerhubert | 0:efab2162f523 | 15 | |
muellerhubert | 0:efab2162f523 | 16 | ShiftReg HC595(D8, D4, D7); |
muellerhubert | 0:efab2162f523 | 17 | |
muellerhubert | 0:efab2162f523 | 18 | // ------------------------- ------------------------- |
muellerhubert | 0:efab2162f523 | 19 | // | D6 | D4 | D2 | D0 | GND | | D6 | D4 | D2 | D0 | GND | |
muellerhubert | 0:efab2162f523 | 20 | // |-------------------------| |-------------------------| |
muellerhubert | 0:efab2162f523 | 21 | // | D7 | D5 | D3 | D1 | VCC | | D7 | D5 | D3 | D1 | VCC | |
muellerhubert | 0:efab2162f523 | 22 | // ------------------------- ------------------------- |
muellerhubert | 0:efab2162f523 | 23 | // ------------------------- ------------------------- |
muellerhubert | 0:efab2162f523 | 24 | // | NC | NC | en2| en0| GND | | g | e | c | a | GND | |
muellerhubert | 0:efab2162f523 | 25 | // |-------------------------| |-------------------------| |
muellerhubert | 0:efab2162f523 | 26 | // | NC | NC | en3| en1| VCC | | dot| f | d | b | VCC | |
muellerhubert | 0:efab2162f523 | 27 | // ------------------------- ------------------------- |
muellerhubert | 0:efab2162f523 | 28 | |
muellerhubert | 0:efab2162f523 | 29 | void ausgabe(); |
muellerhubert | 0:efab2162f523 | 30 | void aufteilung(); |
muellerhubert | 0:efab2162f523 | 31 | |
muellerhubert | 0:efab2162f523 | 32 | |
muellerhubert | 0:efab2162f523 | 33 | int main() |
muellerhubert | 0:efab2162f523 | 34 | { |
muellerhubert | 0:efab2162f523 | 35 | HC595.ShiftByte(0x00, ShiftReg::LSBFirst); HC595.Latch(); wait(0.2);//Grundstellung |
muellerhubert | 0:efab2162f523 | 36 | while(1) { |
muellerhubert | 0:efab2162f523 | 37 | sensorValue=LM35.read_u16(); |
muellerhubert | 0:efab2162f523 | 38 | printf("measure = %i \n", sensorValue); |
muellerhubert | 0:efab2162f523 | 39 | ausgabe(); |
muellerhubert | 0:efab2162f523 | 40 | wait_ms(1); |
muellerhubert | 0:efab2162f523 | 41 | aufteilung(); |
muellerhubert | 0:efab2162f523 | 42 | } |
muellerhubert | 0:efab2162f523 | 43 | } |
muellerhubert | 0:efab2162f523 | 44 | void ausgabe() |
muellerhubert | 0:efab2162f523 | 45 | { |
muellerhubert | 0:efab2162f523 | 46 | HC595.ShiftByte(ausgabeWerte[pos],ShiftReg::LSBFirst); |
muellerhubert | 0:efab2162f523 | 47 | HC595.ShiftByte(enableWerte[pos],ShiftReg::LSBFirst); |
muellerhubert | 0:efab2162f523 | 48 | HC595.Latch(); |
muellerhubert | 0:efab2162f523 | 49 | |
muellerhubert | 0:efab2162f523 | 50 | pos++; |
muellerhubert | 0:efab2162f523 | 51 | pos=pos%4; |
muellerhubert | 0:efab2162f523 | 52 | } |
muellerhubert | 0:efab2162f523 | 53 | void aufteilung() |
muellerhubert | 0:efab2162f523 | 54 | { |
muellerhubert | 0:efab2162f523 | 55 | tempC=(sensorValue*2000/65536); //hier sollte eigentlich 3300/65536 stehen, dann ist aber der Anzeigewert zu hoch |
muellerhubert | 0:efab2162f523 | 56 | //Azeigewert 222 entspricht 22,2 Grad |
muellerhubert | 0:efab2162f523 | 57 | ausgabeWerte[0]=siebenSegWerte[tempC%10]; // Einer |
muellerhubert | 0:efab2162f523 | 58 | ausgabeWerte[1]=siebenSegWerte[tempC%100/10]; //Zehner |
muellerhubert | 0:efab2162f523 | 59 | ausgabeWerte[2]=siebenSegWerte[tempC%1000/100]; // Hunderter |
muellerhubert | 0:efab2162f523 | 60 | ausgabeWerte[3]=siebenSegWerte[tempC/1000]; // Tausender |
muellerhubert | 0:efab2162f523 | 61 | |
muellerhubert | 0:efab2162f523 | 62 | } |