testing app for DS1307 RTC and 1-wire driver for DS8B20
Dependencies: DS1307 OneWire mbed
main.cpp@0:711e5c134396, 2014-04-28 (annotated)
- Committer:
- alpov
- Date:
- Mon Apr 28 07:34:00 2014 +0000
- Revision:
- 0:711e5c134396
testing app for DS1307 RTC and 1-wire driver for DS18B20
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alpov | 0:711e5c134396 | 1 | #include "mbed.h" |
alpov | 0:711e5c134396 | 2 | #include "DS1307.h" |
alpov | 0:711e5c134396 | 3 | #include "1wire.h" |
alpov | 0:711e5c134396 | 4 | |
alpov | 0:711e5c134396 | 5 | DS1307 rtc(PTE0, PTE1); |
alpov | 0:711e5c134396 | 6 | OneWire ow(A4, A2, A3); |
alpov | 0:711e5c134396 | 7 | |
alpov | 0:711e5c134396 | 8 | Serial pc(USBTX, USBRX, "pc"); |
alpov | 0:711e5c134396 | 9 | |
alpov | 0:711e5c134396 | 10 | |
alpov | 0:711e5c134396 | 11 | int main() |
alpov | 0:711e5c134396 | 12 | { |
alpov | 0:711e5c134396 | 13 | Timer t; |
alpov | 0:711e5c134396 | 14 | char c; |
alpov | 0:711e5c134396 | 15 | |
alpov | 0:711e5c134396 | 16 | pc.printf("\n\n\n\n*************************************\n"); |
alpov | 0:711e5c134396 | 17 | pc.printf("* r - reads the clock\n"); |
alpov | 0:711e5c134396 | 18 | pc.printf("* w - write the clock\n"); |
alpov | 0:711e5c134396 | 19 | pc.printf("* c - convert temperatures\n"); |
alpov | 0:711e5c134396 | 20 | pc.printf("* t - search 1wire and list read temperatures\n"); |
alpov | 0:711e5c134396 | 21 | pc.printf("*************************************\n\n"); |
alpov | 0:711e5c134396 | 22 | |
alpov | 0:711e5c134396 | 23 | while (1) |
alpov | 0:711e5c134396 | 24 | { |
alpov | 0:711e5c134396 | 25 | c = pc.getc(); |
alpov | 0:711e5c134396 | 26 | if (c == 'r') { |
alpov | 0:711e5c134396 | 27 | // perform read |
alpov | 0:711e5c134396 | 28 | t.reset(); |
alpov | 0:711e5c134396 | 29 | t.start(); |
alpov | 0:711e5c134396 | 30 | time_t m_time = rtc.now(); |
alpov | 0:711e5c134396 | 31 | t.stop(); |
alpov | 0:711e5c134396 | 32 | |
alpov | 0:711e5c134396 | 33 | struct tm *now; |
alpov | 0:711e5c134396 | 34 | now = localtime(&m_time); |
alpov | 0:711e5c134396 | 35 | |
alpov | 0:711e5c134396 | 36 | pc.printf("Current time is %lu, %02d:%02d:%02d, %d.%d.%04d\n", |
alpov | 0:711e5c134396 | 37 | m_time, |
alpov | 0:711e5c134396 | 38 | now->tm_hour, now->tm_min, now->tm_sec, |
alpov | 0:711e5c134396 | 39 | now->tm_mday, now->tm_mon+1, now->tm_year+1900 |
alpov | 0:711e5c134396 | 40 | ); |
alpov | 0:711e5c134396 | 41 | pc.printf("Internal datetime format is %s\n", asctime(now)); |
alpov | 0:711e5c134396 | 42 | pc.printf("Read complete, elapsed %uus\n", t.read_us()); |
alpov | 0:711e5c134396 | 43 | |
alpov | 0:711e5c134396 | 44 | } |
alpov | 0:711e5c134396 | 45 | else if (c == 'w') { |
alpov | 0:711e5c134396 | 46 | // perform write |
alpov | 0:711e5c134396 | 47 | int date, month, year, hours, minutes, seconds; |
alpov | 0:711e5c134396 | 48 | pc.printf("Enter the date (date 1..31)\n"); pc.scanf("%d", &date); |
alpov | 0:711e5c134396 | 49 | pc.printf("Enter the date (month 1..12)\n"); pc.scanf("%d", &month); |
alpov | 0:711e5c134396 | 50 | pc.printf("Enter the date (year >2000)\n"); pc.scanf("%d", &year); |
alpov | 0:711e5c134396 | 51 | pc.printf("Enter the time (hours 0..23)\n"); pc.scanf("%d", &hours); |
alpov | 0:711e5c134396 | 52 | pc.printf("Enter the time (minutes 0..59)\n"); pc.scanf("%d", &minutes); |
alpov | 0:711e5c134396 | 53 | pc.printf("Enter the time (seconds 0..59)\n"); pc.scanf("%d", &seconds); |
alpov | 0:711e5c134396 | 54 | |
alpov | 0:711e5c134396 | 55 | struct tm now = {seconds, minutes, hours, date, month-1, year-1900}; |
alpov | 0:711e5c134396 | 56 | time_t m_time = mktime(&now); |
alpov | 0:711e5c134396 | 57 | |
alpov | 0:711e5c134396 | 58 | t.reset(); |
alpov | 0:711e5c134396 | 59 | t.start(); |
alpov | 0:711e5c134396 | 60 | bool b = rtc.set_time(m_time); |
alpov | 0:711e5c134396 | 61 | t.stop(); |
alpov | 0:711e5c134396 | 62 | |
alpov | 0:711e5c134396 | 63 | pc.printf("Write complete (UNIX %lu, result %d), elapsed %uus\n", m_time, b, t.read_us()); |
alpov | 0:711e5c134396 | 64 | } |
alpov | 0:711e5c134396 | 65 | else if (c == 'c') { |
alpov | 0:711e5c134396 | 66 | ow.ConvertAll(true); |
alpov | 0:711e5c134396 | 67 | pc.printf("Convert done\n"); |
alpov | 0:711e5c134396 | 68 | } |
alpov | 0:711e5c134396 | 69 | else if (c == 't') { |
alpov | 0:711e5c134396 | 70 | int result, temp; |
alpov | 0:711e5c134396 | 71 | uint8_t rom[8]; |
alpov | 0:711e5c134396 | 72 | |
alpov | 0:711e5c134396 | 73 | memset(rom, 0, sizeof(rom)); |
alpov | 0:711e5c134396 | 74 | result = ow.First(rom); |
alpov | 0:711e5c134396 | 75 | while (result == OW_FOUND) { |
alpov | 0:711e5c134396 | 76 | for (int i = 0; i < 8; i++) pc.printf("%.2X", rom[i]); |
alpov | 0:711e5c134396 | 77 | |
alpov | 0:711e5c134396 | 78 | t.reset(); |
alpov | 0:711e5c134396 | 79 | t.start(); |
alpov | 0:711e5c134396 | 80 | int b = ow.ReadTemperature(rom, &temp); |
alpov | 0:711e5c134396 | 81 | t.stop(); |
alpov | 0:711e5c134396 | 82 | if (b) pc.printf(": read failed, code 0x%.4x, elapsed %uus\n", b, t.read_us()); |
alpov | 0:711e5c134396 | 83 | else pc.printf(": read ok, temperature %.2f'C, elapsed %uus\n", temp / 100., t.read_us()); |
alpov | 0:711e5c134396 | 84 | |
alpov | 0:711e5c134396 | 85 | result = ow.Next(rom); |
alpov | 0:711e5c134396 | 86 | } |
alpov | 0:711e5c134396 | 87 | pc.printf("Done\n"); |
alpov | 0:711e5c134396 | 88 | } |
alpov | 0:711e5c134396 | 89 | else { |
alpov | 0:711e5c134396 | 90 | pc.printf("Syntax error\n"); |
alpov | 0:711e5c134396 | 91 | } |
alpov | 0:711e5c134396 | 92 | pc.printf("\n"); |
alpov | 0:711e5c134396 | 93 | } |
alpov | 0:711e5c134396 | 94 | } |