printer

Dependencies:   HCSR04 USBDevice mbed-src mbed mbed

Fork of Serial_HelloWorld_Mbed by mbed official

Committer:
redplam
Date:
Mon Apr 14 14:38:46 2014 +0000
Revision:
1:a66cf68ec8ca
printer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
redplam 1:a66cf68ec8ca 1 #include "DS18B20.h"
redplam 1:a66cf68ec8ca 2 #include "DS1Wire.h"
redplam 1:a66cf68ec8ca 3 #include "mbed.h"
redplam 1:a66cf68ec8ca 4 #include <stdint.h>
redplam 1:a66cf68ec8ca 5
redplam 1:a66cf68ec8ca 6 // Device byte commands over 1-wire serial
redplam 1:a66cf68ec8ca 7 enum COMMANDS { READ_ROM = 0x33, CONVERT = 0x44, READ_SCRATCHPAD = 0xBE, SKIP_ROM = 0xCC };
redplam 1:a66cf68ec8ca 8
redplam 1:a66cf68ec8ca 9 // device onboard register layout
redplam 1:a66cf68ec8ca 10 typedef struct {
redplam 1:a66cf68ec8ca 11 uint8_t LSB;
redplam 1:a66cf68ec8ca 12 uint8_t MSB;
redplam 1:a66cf68ec8ca 13 uint8_t Th;
redplam 1:a66cf68ec8ca 14 uint8_t Tl;
redplam 1:a66cf68ec8ca 15 uint8_t config;
redplam 1:a66cf68ec8ca 16 uint8_t reserved0xFF;
redplam 1:a66cf68ec8ca 17 uint8_t reserved0xCH;
redplam 1:a66cf68ec8ca 18 uint8_t reserved0x10;
redplam 1:a66cf68ec8ca 19 uint8_t CRC;
redplam 1:a66cf68ec8ca 20 } ScratchPad_t;
redplam 1:a66cf68ec8ca 21
redplam 1:a66cf68ec8ca 22
redplam 1:a66cf68ec8ca 23 DigitalOut conversionInProgress(LED4); // conversion in progress
redplam 1:a66cf68ec8ca 24 DigitalOut resetFailure(LED1); // for error reporting
redplam 1:a66cf68ec8ca 25 extern DigitalInOut sensor; // sensor pin
redplam 1:a66cf68ec8ca 26
redplam 1:a66cf68ec8ca 27 static void inError() {
redplam 1:a66cf68ec8ca 28 while (1) {
redplam 1:a66cf68ec8ca 29 resetFailure = !resetFailure;
redplam 1:a66cf68ec8ca 30 wait(0.2);
redplam 1:a66cf68ec8ca 31 }
redplam 1:a66cf68ec8ca 32 }
redplam 1:a66cf68ec8ca 33
redplam 1:a66cf68ec8ca 34 void DoConversion() {
redplam 1:a66cf68ec8ca 35 if (Reset(sensor) != 0) {
redplam 1:a66cf68ec8ca 36 inError();
redplam 1:a66cf68ec8ca 37 } else {
redplam 1:a66cf68ec8ca 38 conversionInProgress = 1; // led on
redplam 1:a66cf68ec8ca 39 WriteByte(sensor, SKIP_ROM); // Skip ROM
redplam 1:a66cf68ec8ca 40 WriteByte(sensor, CONVERT); // Convert
redplam 1:a66cf68ec8ca 41 while (ReadBit(sensor) == 0) {
redplam 1:a66cf68ec8ca 42 // wait for conversion to complete
redplam 1:a66cf68ec8ca 43 }
redplam 1:a66cf68ec8ca 44 conversionInProgress = 0; // led off
redplam 1:a66cf68ec8ca 45 }
redplam 1:a66cf68ec8ca 46 }
redplam 1:a66cf68ec8ca 47
redplam 1:a66cf68ec8ca 48 uint32_t GetTemperature() {
redplam 1:a66cf68ec8ca 49 uint32_t result = 0;
redplam 1:a66cf68ec8ca 50 if (Reset(sensor) != 0) {
redplam 1:a66cf68ec8ca 51 inError();
redplam 1:a66cf68ec8ca 52 } else {
redplam 1:a66cf68ec8ca 53 ScratchPad_t scratchpad;
redplam 1:a66cf68ec8ca 54 WriteByte(sensor, SKIP_ROM); // Skip ROM
redplam 1:a66cf68ec8ca 55 WriteByte(sensor, READ_SCRATCHPAD); // Read Scrachpad
redplam 1:a66cf68ec8ca 56 scratchpad.LSB = ReadByte(sensor);
redplam 1:a66cf68ec8ca 57 scratchpad.MSB = ReadByte(sensor);
redplam 1:a66cf68ec8ca 58 Reset(sensor); // terminate read as we only want temperature
redplam 1:a66cf68ec8ca 59 result = ((scratchpad.MSB << 8) | scratchpad.LSB);
redplam 1:a66cf68ec8ca 60 }
redplam 1:a66cf68ec8ca 61 return result;
redplam 1:a66cf68ec8ca 62 }
redplam 1:a66cf68ec8ca 63
redplam 1:a66cf68ec8ca 64 ROM_Code_t ReadROM() {
redplam 1:a66cf68ec8ca 65 ROM_Code_t ROM_Code;
redplam 1:a66cf68ec8ca 66 if (Reset(sensor) != 0) {
redplam 1:a66cf68ec8ca 67 inError();
redplam 1:a66cf68ec8ca 68 } else {
redplam 1:a66cf68ec8ca 69
redplam 1:a66cf68ec8ca 70 WriteByte(sensor, READ_ROM); // Read ROM
redplam 1:a66cf68ec8ca 71 for (uint32_t i = 0; i < 8; ++i) {
redplam 1:a66cf68ec8ca 72 ROM_Code.rom[i] = ReadByte(sensor);
redplam 1:a66cf68ec8ca 73 }
redplam 1:a66cf68ec8ca 74 }
redplam 1:a66cf68ec8ca 75 return ROM_Code;
redplam 1:a66cf68ec8ca 76 }
redplam 1:a66cf68ec8ca 77
redplam 1:a66cf68ec8ca 78 // temperature is store as 7.4 fixed point format (assuming 12 bit conversion)
redplam 1:a66cf68ec8ca 79 void displayTemperature(Serial& s) {
redplam 1:a66cf68ec8ca 80 DoConversion();
redplam 1:a66cf68ec8ca 81 uint32_t temp = GetTemperature();
redplam 1:a66cf68ec8ca 82 float f = (temp & 0x0F) * 0.0625; // calculate .4 part
redplam 1:a66cf68ec8ca 83 f += (temp >> 4); // add 7.0 part to it
redplam 1:a66cf68ec8ca 84 s.printf("Temp is %2.1fC\n\r", f); // display in 2.1 format
redplam 1:a66cf68ec8ca 85 }
redplam 1:a66cf68ec8ca 86
redplam 1:a66cf68ec8ca 87 // temperature is store as 7.4 fixed point format (assuming 12 bit conversion)
redplam 1:a66cf68ec8ca 88 void showTemperature(float *f) {
redplam 1:a66cf68ec8ca 89 DoConversion();
redplam 1:a66cf68ec8ca 90 uint32_t temp = GetTemperature();
redplam 1:a66cf68ec8ca 91 *f = (temp & 0x0F) * 0.0625; // calculate .4 part
redplam 1:a66cf68ec8ca 92 *f += (temp >> 4); // add 7.0 part to it
redplam 1:a66cf68ec8ca 93 //return(f);
redplam 1:a66cf68ec8ca 94 //s.printf("Temp is %2.1fC\n\r", f); // display in 2.1 format
redplam 1:a66cf68ec8ca 95 }
redplam 1:a66cf68ec8ca 96