Gewerblich-Technische Schule Offenburg
/
LM35functionshield
Temperaturmessung mit LM35 auf Multifunktionshield
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Thu Jul 14 2022 03:04:26 by 1.7.2