EMIR - Ekvitermní mikroprocesorová regulace https://code.google.com/p/emir/ https://code.google.com/p/emir/wiki/DesignV3

Dependencies:   ConfigFile DS1307 OneWire SDFileSystem USBDeviceLite mbed-rtos mbed

Committer:
alpov
Date:
Mon Apr 28 07:42:48 2014 +0000
Revision:
0:36595c2797dc
Child:
2:0e0131d51df5
initial testing version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alpov 0:36595c2797dc 1 #include "mbed.h"
alpov 0:36595c2797dc 2 #include "SDFileSystem.h"
alpov 0:36595c2797dc 3 #include "USBSerial.h"
alpov 0:36595c2797dc 4 #include "DS1307.h"
alpov 0:36595c2797dc 5 #include "1wire.h"
alpov 0:36595c2797dc 6 #include "mbed_debug.h"
alpov 0:36595c2797dc 7
alpov 0:36595c2797dc 8 Serial pc(MBED_UARTUSB);
alpov 0:36595c2797dc 9
alpov 0:36595c2797dc 10 SDFileSystem sd(MBED_SPI0, "sd");
alpov 0:36595c2797dc 11
alpov 0:36595c2797dc 12 //USBSerial usb(0x1f00, 0x2012, 0x0001/*, false*/);
alpov 0:36595c2797dc 13
alpov 0:36595c2797dc 14 DS1307 rtc(I2C_SDA, I2C_SCL);
alpov 0:36595c2797dc 15
alpov 0:36595c2797dc 16 OneWire ow(A4, A2, A3);
alpov 0:36595c2797dc 17
alpov 0:36595c2797dc 18 DigitalOut ledR(LED_RED, 1);
alpov 0:36595c2797dc 19 DigitalOut ledG(LED_GREEN, 1);
alpov 0:36595c2797dc 20 //DigitalOut ledB(LED_BLUE, 1);
alpov 0:36595c2797dc 21
alpov 0:36595c2797dc 22 DigitalOut OUT1(D2, 0);
alpov 0:36595c2797dc 23 DigitalOut OUT2(D3, 0);
alpov 0:36595c2797dc 24 DigitalOut OUT3(D4, 0);
alpov 0:36595c2797dc 25 DigitalOut OUT4(D5, 0);
alpov 0:36595c2797dc 26
alpov 0:36595c2797dc 27 DigitalIn IN1(D8, PullUp);
alpov 0:36595c2797dc 28 DigitalIn IN2(D9, PullUp);
alpov 0:36595c2797dc 29
alpov 0:36595c2797dc 30
alpov 0:36595c2797dc 31 int main(void)
alpov 0:36595c2797dc 32 {
alpov 0:36595c2797dc 33 Timer t;
alpov 0:36595c2797dc 34 char c;
alpov 0:36595c2797dc 35
alpov 0:36595c2797dc 36 pc.printf("Hello World!\n");
alpov 0:36595c2797dc 37
alpov 0:36595c2797dc 38 FILE *fp = fopen("/sd/sdtest2.txt", "w");
alpov 0:36595c2797dc 39 if (fp == NULL) {
alpov 0:36595c2797dc 40 pc.printf("Could not open file for write\n");
alpov 0:36595c2797dc 41 } else {
alpov 0:36595c2797dc 42 pc.printf("Writing... ");
alpov 0:36595c2797dc 43 fprintf(fp, "Hello fun SD Card World!\nOK!\n");
alpov 0:36595c2797dc 44 pc.printf("closing... ");
alpov 0:36595c2797dc 45 fclose(fp);
alpov 0:36595c2797dc 46 }
alpov 0:36595c2797dc 47 pc.printf("done\n");
alpov 0:36595c2797dc 48
alpov 0:36595c2797dc 49 OUT1 = 1;
alpov 0:36595c2797dc 50 OUT2 = 1;
alpov 0:36595c2797dc 51 OUT3 = 1;
alpov 0:36595c2797dc 52 OUT4 = 1;
alpov 0:36595c2797dc 53 wait(1.0);
alpov 0:36595c2797dc 54 OUT1 = 0;
alpov 0:36595c2797dc 55 OUT2 = 0;
alpov 0:36595c2797dc 56 OUT3 = 0;
alpov 0:36595c2797dc 57 OUT4 = 0;
alpov 0:36595c2797dc 58
alpov 0:36595c2797dc 59 pc.printf("\n\n\n\n*************************************\n");
alpov 0:36595c2797dc 60 pc.printf("* r - reads the clock\n");
alpov 0:36595c2797dc 61 pc.printf("* w - write the clock\n");
alpov 0:36595c2797dc 62 pc.printf("* c - convert temperatures\n");
alpov 0:36595c2797dc 63 pc.printf("* t - search 1wire and list read temperatures\n");
alpov 0:36595c2797dc 64 pc.printf("*************************************\n\n");
alpov 0:36595c2797dc 65
alpov 0:36595c2797dc 66 while (1)
alpov 0:36595c2797dc 67 {
alpov 0:36595c2797dc 68 // ledR = usb.configured();
alpov 0:36595c2797dc 69
alpov 0:36595c2797dc 70 ledG = 0;
alpov 0:36595c2797dc 71 wait(0.2);
alpov 0:36595c2797dc 72 ledG = 1;
alpov 0:36595c2797dc 73 wait(0.2);
alpov 0:36595c2797dc 74 /*
alpov 0:36595c2797dc 75 if (usb.configured())
alpov 0:36595c2797dc 76 usb.printf("blik!\n");
alpov 0:36595c2797dc 77 */
alpov 0:36595c2797dc 78
alpov 0:36595c2797dc 79 if (!pc.readable()) continue;
alpov 0:36595c2797dc 80 c = pc.getc();
alpov 0:36595c2797dc 81 if (c == 'r') {
alpov 0:36595c2797dc 82 // perform read
alpov 0:36595c2797dc 83 t.reset();
alpov 0:36595c2797dc 84 t.start();
alpov 0:36595c2797dc 85 time_t m_time = rtc.now();
alpov 0:36595c2797dc 86 t.stop();
alpov 0:36595c2797dc 87
alpov 0:36595c2797dc 88 struct tm *now;
alpov 0:36595c2797dc 89 now = localtime(&m_time);
alpov 0:36595c2797dc 90
alpov 0:36595c2797dc 91 pc.printf("Current time is %lu, %02d:%02d:%02d, %d.%d.%04d\n",
alpov 0:36595c2797dc 92 m_time,
alpov 0:36595c2797dc 93 now->tm_hour, now->tm_min, now->tm_sec,
alpov 0:36595c2797dc 94 now->tm_mday, now->tm_mon+1, now->tm_year+1900
alpov 0:36595c2797dc 95 );
alpov 0:36595c2797dc 96 pc.printf("Internal datetime format is %s\n", asctime(now));
alpov 0:36595c2797dc 97 pc.printf("Read complete, elapsed %uus\n", t.read_us());
alpov 0:36595c2797dc 98
alpov 0:36595c2797dc 99 }
alpov 0:36595c2797dc 100 else if (c == 'w') {
alpov 0:36595c2797dc 101 // perform write
alpov 0:36595c2797dc 102 int date, month, year, hours, minutes, seconds;
alpov 0:36595c2797dc 103 pc.printf("Enter the date (date 1..31)\n"); pc.scanf("%d", &date);
alpov 0:36595c2797dc 104 pc.printf("Enter the date (month 1..12)\n"); pc.scanf("%d", &month);
alpov 0:36595c2797dc 105 pc.printf("Enter the date (year >2000)\n"); pc.scanf("%d", &year);
alpov 0:36595c2797dc 106 pc.printf("Enter the time (hours 0..23)\n"); pc.scanf("%d", &hours);
alpov 0:36595c2797dc 107 pc.printf("Enter the time (minutes 0..59)\n"); pc.scanf("%d", &minutes);
alpov 0:36595c2797dc 108 pc.printf("Enter the time (seconds 0..59)\n"); pc.scanf("%d", &seconds);
alpov 0:36595c2797dc 109
alpov 0:36595c2797dc 110 struct tm now = {seconds, minutes, hours, date, month-1, year-1900};
alpov 0:36595c2797dc 111 time_t m_time = mktime(&now);
alpov 0:36595c2797dc 112
alpov 0:36595c2797dc 113 t.reset();
alpov 0:36595c2797dc 114 t.start();
alpov 0:36595c2797dc 115 bool b = rtc.set_time(m_time);
alpov 0:36595c2797dc 116 t.stop();
alpov 0:36595c2797dc 117
alpov 0:36595c2797dc 118 pc.printf("Write complete (UNIX %lu, result %d), elapsed %uus\n", m_time, b, t.read_us());
alpov 0:36595c2797dc 119 }
alpov 0:36595c2797dc 120 else if (c == 'c') {
alpov 0:36595c2797dc 121 ow.ConvertAll(true);
alpov 0:36595c2797dc 122 pc.printf("Convert done\n");
alpov 0:36595c2797dc 123 }
alpov 0:36595c2797dc 124 else if (c == 't') {
alpov 0:36595c2797dc 125 int result, temp;
alpov 0:36595c2797dc 126 uint8_t rom[8];
alpov 0:36595c2797dc 127
alpov 0:36595c2797dc 128 memset(rom, 0, sizeof(rom));
alpov 0:36595c2797dc 129 result = ow.First(rom);
alpov 0:36595c2797dc 130 while (result == OW_FOUND) {
alpov 0:36595c2797dc 131 for (int i = 0; i < 8; i++) pc.printf("%.2X", rom[i]);
alpov 0:36595c2797dc 132
alpov 0:36595c2797dc 133 t.reset();
alpov 0:36595c2797dc 134 t.start();
alpov 0:36595c2797dc 135 int b = ow.ReadTemperature(rom, &temp);
alpov 0:36595c2797dc 136 t.stop();
alpov 0:36595c2797dc 137 if (b) pc.printf(": read failed, code 0x%.4x, elapsed %uus\n", b, t.read_us());
alpov 0:36595c2797dc 138 else pc.printf(": read ok, temperature %.2f'C, elapsed %uus\n", temp / 100., t.read_us());
alpov 0:36595c2797dc 139
alpov 0:36595c2797dc 140 result = ow.Next(rom);
alpov 0:36595c2797dc 141 }
alpov 0:36595c2797dc 142 pc.printf("Done\n");
alpov 0:36595c2797dc 143 }
alpov 0:36595c2797dc 144 else {
alpov 0:36595c2797dc 145 pc.printf("Syntax error\n");
alpov 0:36595c2797dc 146 }
alpov 0:36595c2797dc 147 pc.printf("\n");
alpov 0:36595c2797dc 148 }
alpov 0:36595c2797dc 149
alpov 0:36595c2797dc 150 }
alpov 0:36595c2797dc 151