printer
Dependencies: HCSR04 USBDevice mbed-src mbed mbed
Fork of Serial_HelloWorld_Mbed by
DS1Wire.cpp@1:a66cf68ec8ca, 2014-04-14 (annotated)
- Committer:
- redplam
- Date:
- Mon Apr 14 14:38:46 2014 +0000
- Revision:
- 1:a66cf68ec8ca
printer
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
redplam | 1:a66cf68ec8ca | 1 | #include "DS1Wire.h" |
redplam | 1:a66cf68ec8ca | 2 | #include "mbed.h" |
redplam | 1:a66cf68ec8ca | 3 | #include <stdint.h> |
redplam | 1:a66cf68ec8ca | 4 | |
redplam | 1:a66cf68ec8ca | 5 | // Timing delay for 1-wire serial standard option |
redplam | 1:a66cf68ec8ca | 6 | enum DELAY { A = 6, B = 64, C = 60, D = 10, E = 9, F = 55, G = 0, H = 480, I = 70, J = 410 }; |
redplam | 1:a66cf68ec8ca | 7 | |
redplam | 1:a66cf68ec8ca | 8 | |
redplam | 1:a66cf68ec8ca | 9 | int Reset(DigitalInOut& pin) { |
redplam | 1:a66cf68ec8ca | 10 | pin.output(); |
redplam | 1:a66cf68ec8ca | 11 | pin = 0; // drive bus low |
redplam | 1:a66cf68ec8ca | 12 | wait_us(H); |
redplam | 1:a66cf68ec8ca | 13 | pin.input(); // release bus |
redplam | 1:a66cf68ec8ca | 14 | wait_us(I); |
redplam | 1:a66cf68ec8ca | 15 | uint32_t result = pin; // read bus value |
redplam | 1:a66cf68ec8ca | 16 | wait_us(J); |
redplam | 1:a66cf68ec8ca | 17 | return result; |
redplam | 1:a66cf68ec8ca | 18 | } |
redplam | 1:a66cf68ec8ca | 19 | |
redplam | 1:a66cf68ec8ca | 20 | void WriteBit(DigitalInOut& pin, uint32_t bit) { |
redplam | 1:a66cf68ec8ca | 21 | pin.output(); |
redplam | 1:a66cf68ec8ca | 22 | if (bit) { |
redplam | 1:a66cf68ec8ca | 23 | pin = 0; // drive bus low |
redplam | 1:a66cf68ec8ca | 24 | wait_us(A); // delay A |
redplam | 1:a66cf68ec8ca | 25 | pin.input(); // release bus |
redplam | 1:a66cf68ec8ca | 26 | wait_us(B); // delay B |
redplam | 1:a66cf68ec8ca | 27 | } else { |
redplam | 1:a66cf68ec8ca | 28 | pin = 0; // drive bus low |
redplam | 1:a66cf68ec8ca | 29 | wait_us(C); // delay C |
redplam | 1:a66cf68ec8ca | 30 | pin.input(); // release bus |
redplam | 1:a66cf68ec8ca | 31 | wait_us(D); // delay D |
redplam | 1:a66cf68ec8ca | 32 | } |
redplam | 1:a66cf68ec8ca | 33 | } |
redplam | 1:a66cf68ec8ca | 34 | |
redplam | 1:a66cf68ec8ca | 35 | uint32_t ReadBit(DigitalInOut& pin) { |
redplam | 1:a66cf68ec8ca | 36 | uint32_t bit_value; |
redplam | 1:a66cf68ec8ca | 37 | pin.output(); |
redplam | 1:a66cf68ec8ca | 38 | pin = 0; // drive bus low |
redplam | 1:a66cf68ec8ca | 39 | wait_us(A); // delay A |
redplam | 1:a66cf68ec8ca | 40 | pin.input(); // release bus |
redplam | 1:a66cf68ec8ca | 41 | wait_us(E); // delay E |
redplam | 1:a66cf68ec8ca | 42 | bit_value = pin; // master sample bus |
redplam | 1:a66cf68ec8ca | 43 | wait_us(F); |
redplam | 1:a66cf68ec8ca | 44 | return bit_value; |
redplam | 1:a66cf68ec8ca | 45 | } |
redplam | 1:a66cf68ec8ca | 46 | |
redplam | 1:a66cf68ec8ca | 47 | void WriteByte(DigitalInOut& pin, uint32_t byte) { |
redplam | 1:a66cf68ec8ca | 48 | for (uint32_t bit = 0; bit < 8; ++bit) { |
redplam | 1:a66cf68ec8ca | 49 | WriteBit(pin, byte & 0x01); // lsb to msb |
redplam | 1:a66cf68ec8ca | 50 | byte >>= 1; // right shift by 1-bit |
redplam | 1:a66cf68ec8ca | 51 | } |
redplam | 1:a66cf68ec8ca | 52 | } |
redplam | 1:a66cf68ec8ca | 53 | |
redplam | 1:a66cf68ec8ca | 54 | uint32_t ReadByte(DigitalInOut& pin) { |
redplam | 1:a66cf68ec8ca | 55 | uint32_t byte = 0; |
redplam | 1:a66cf68ec8ca | 56 | for (uint32_t bit = 0; bit < 8; ++bit) { |
redplam | 1:a66cf68ec8ca | 57 | byte |= (ReadBit(pin) << bit); // Reads lsb to msb |
redplam | 1:a66cf68ec8ca | 58 | } |
redplam | 1:a66cf68ec8ca | 59 | return byte; |
redplam | 1:a66cf68ec8ca | 60 | } |