Franz Pucher / HIM0Board

You are viewing an older revision! See the latest version

Klassendesign LM75B

Inhalt

Aufgabe Implementieren Sie zum UML-Diagramm bzw. LM75B.h Header Datei die Klasse und testen Sie in einem main() Ihre Implementierung.

Die folgende Überführung aus der strukturierten Programmierung in C in ein Klassendesign der objektorientierten Programmierung in C++ wurde mit dem Programm StarUML vorgenommen, wobei zwei Unzulänglichkeiten aufgetreten sind: void vor dem Konstruktor und der Aufruf des Konstruktors in der CPP-datei der Klasse I2C wurd nicht richtig abgebildet (LM75B::LM75B(PinName sda, PinName scl) : i2c(sda, scl)).

Die folgende Abbildung zeigt das Klassendiagramm in UML (Unified Modeling Language), wobei die I2C Klasse nur der Vollständigkeit halber hinzugefügt wurde, da sie in der MBED-Bibliothek enthalten ist:

/media/uploads/fpucher/lm75b_uml.jpg

//
//  Generated by StarUML(tm) C++ Add-In
//
//  @ Project : Untitled
//  @ File Name : LM75B.h
//  @ Date : 11.03.2016
//  @ Author : pe
//

#if !defined(_LM75B_H)
#define _LM75B_H


class LM75B {
public:
	void LM75B();
	void LM75B(PinName sda, PinName scl);
	float read();
protected:
	I2C i2c;
};

#endif  //_LM75B_H

Adaptierte Header-Datei:

#ifndef LM75B_H
#define LM75B_H

//  LM75B I2C Adresse
#define    LM75B_ADDR 0x90

//  LM75B Register
#define    LM75B_Conf        0x01
#define    LM75B_Temp        0x00

class LM75B
{
public:
  LM75B(PinName sda, PinName scl);  // I2C Pins übergeben p28, p27
  ~LM75B();
  float read(); 
  
private:
  I2C i2c;
};
#endif

Aus Star-UML generierte CPP-Datei der LM75B Klasse:

//
//  Generated by StarUML(tm) C++ Add-In
//
//  @ Project : Untitled
//  @ File Name : LM75B.cpp
//  @ Date : 11.03.2016
//  @ Author : pe
//

#include "LM75B.h"

void LM75B::LM75B() {
}

void LM75B::LM75B(PinName sda, PinName scl) : i2c(sda, scl)  // fehlt im aus StarUML generiertem Code
{
}

float LM75B::read() {
}

CPP-Implementierung der LM75B Klasse:

// https://developer.mbed.org/cookbook/LM75B-Temperature-Sensor
#include "LM75B.h"

LM75B::LM75B(PinName sda, PinName scl) : i2c(sda, scl)
{
   char cmd[2];
   cmd[0]    = LM75B_Conf;
   cmd[1]    = 0x0;   
   i2c.write( LM75B_ADDR, cmd, 2);
}

LM75B::~LM75B()
{
}

float LM75B::read()
{
    char cmd[2];
    cmd[0] = LM75B_Temp;
   
    i2c.write(LM75B_ADDR, cmd, 1); 	// Send command string
    i2c.read(LM75B_ADDR, cmd, 2); 		// Send command string    
    return (float((cmd[0]<<8)|cmd[1]) / 256.0);
}

All wikipages