Final firmware for ConnectorBox TPH 1.0 (NXP LPC1768).

Dependencies:   USBDevice mbed

TSCZ ConnectorBox (Czech only)

/media/uploads/Neolker/total.png

Funkce

  • 40x kanálů propojených s měřicími kartami Fluke 2638A
    • 18x 4-vodičové RTD
    • 2x 4-vodičové snímače tlaku s externím napájením
    • 20x rozpoznání 1-wire ID čipů (DS2401+, DS24B33+, ...)
  • 2x UART rozhraní pro komunikaci s Rotronic HC2-S snímači (teplota, rel. vlhkost)
  • USB Serial komunikace s PC (921600 Baud)
  • USB_LED - signalizační ovladatelná LED
  • LEMO konektory

Seznam příkazů

PříkazPopis funkcePočet příchozích BajtůDoba odezvy (maximální)
aPřečte všechny ID a ROT568 B1154 ms
dLadění ROT_01 (RAW Data)183 nebo 284 B433 ms
hZobrazí tento HELP507 B507 ms
iPřečte všechna ID500 B591 ms
pPeriodické čtení všech ROT102 B až variabilní599 ms až variabilní
rPřečte všechny ROT68 B566 ms
sSignalizace pomocí USB_LED14 B14 ms
tTest ID_01 a ROT_0159 B313 ms
vZobrazí verzi firmware252 B252 ms

Pozn.: Nezáleží na velikosti písmene, tedy "a" provede to samé jako "A"

Naprogramování MCU

Potřebný SW a HW

  • Naimportovaný tento projekt
  • Pro převod souboru z .BIN na .HEX program Hexplorer
  • Pro naprogramování MCU program Flash Magic
  • Univerzální převodník USB <-> Serial UART - PRG 1.0 /media/uploads/Neolker/prg_top.png /media/uploads/Neolker/prg_bot.png
  • Propojovací kablíky
  • USB kabel pro napájení ConnectorBox

Postup programování

  1. V mbed compilátoru zkompilujte projekt pro platformu mbed LPC1768
  2. Stáhnutou binárku TSCZ_ConnectorBox_LPC1768_2-0.bin otevřete v Hexploreru
  3. V Hexploreru potom vyexportujte HEX soubor ve formátu Intel Hex: /media/uploads/Neolker/flash_1.png
  4. Připojte USB kabel ke ConnectorBoxu kvůli napájení
  5. Propojte Univerzální převodník PRG 1.0 a programovací piny ConnectorBoxu (TX<->RX, RX<->TX a GND<->GND) /media/uploads/Neolker/prog.png
  6. Připojte PRG 1.0 k PC a zjistěte si přes Správce zařízení příslušné číslo COM portu (v tomto případě COM 8)
  7. Na ConnectorBox DPS stiskněte nejprve ISP tlačítko, následně stiskněte RESET tlačítko a uvolněte je v obraceném pořadí, tzn. nejprve uvolnit RESET a poté ISP -> MCU tímto přejde do "flashovacího" módu
  8. HEX soubor TSCZ_ConnectorBox_LPC1768_2-0.hex nahrajte pomocí Flash Magic s tímto nastavením /media/uploads/Neolker/flash_2.png
  9. Průběh programování můžete sledovat dole ve statusové liště Flash Magic
  10. Zhruba po 5 minutách by mělo být hotovo se zeleným výpisem Finished ve statusové liště viz předchozí bod
  11. Nyní odpojte Univerzální převodník PRG 1.0
  12. A resetujte ConnectorBox stisknutím tlačítka RESET, nebo odpojte a připojte USB kabel ConnectorBoxu
  13. Gratuluji, v MCU nyní běží nový firmware

Instalace

  1. Stáhnout USB-Serial driver: TSCZ_ConnectorBox_Driver.inf
  2. Připojit ConnectorBox USB kabelem k PC. Po připojení by se mělo zobrazit toto: /media/uploads/Neolker/install_1.png
  3. Ve Správci zařízení pravým tlačítkem na CDC DEVICE vybrat Aktualizovat software ovladače... /media/uploads/Neolker/install_2.png
  4. Dále zvolte Vyhledat ovladač v počítači a najděte umístění driveru z kroku č. 1.
  5. Driver je nepodepsaný, tedy jen potvrďte bezpečnostní hlášku pro pokračovaní instalace volbou Přesto nainstalovat...
  6. Po úspěšné instalaci bude ve Správci zařízení nové zařízení pod sekcí Porty s názvem TSCZ ConnectorBox /media/uploads/Neolker/install_3.png
  7. Číslo portu (v tomto případě COM20) si poznamenejte pro další použití

Použití

Terminál

  • Funkčnost můžete ověřit v oblíbeném terminálu PuTTY s tímto nastavením: /media/uploads/Neolker/use_1.png
  • Příklad výpisu v terminálu po vyzkoušení příkazů (w - neznámý příkaz, h - help, v - verze): /media/uploads/Neolker/use_2.png
  • Každý řádek výpisu je ukončený novým řádkem dle standardu MS Windows: CR+LF, "\r\n", 0x0D0A

LabVIEW

  • Díky jednoduché komunikaci po virtuální seriové lince, pomocí příkazů a odpovědí, není problém komunikovat s ConnectorBoxem pomocí VISA driveru v jakékoliv verzi LabVIEW od National Instruments.
  • Pozor u funkcí VISA Read a VISA Write, Windows ovladač Usbser.sys obsahuje chybu, že při asynchronním módu komunikace nastává náhodně po nějaké době BSOD aneb "modrá smrt", která vám dokáže velmi znepříjemnit den, protože po následujícím nutném tvrdém restartu přijdete o veškerou rozdělanou práci. Řešení jsou k dispozici dvě:
    1. Hotfix záplata přímo od Microsoftu je ke stažení zde KB2964073 (pouze pro Windows 7).
    2. Daleko lepší je přepnout obě funkce VISA Read a VISA Write v LabVIEW vždy na Synchronní mód: /media/uploads/Neolker/labview_bsod.png
Committer:
Neolker
Date:
Mon Sep 26 15:21:45 2016 +0000
Revision:
2:35291967fdfb
Parent:
1:40a75dc71d03
Child:
3:c65a372fa382
FIXED: Version number, missing Blink() after GetHelp(), some corrections in GetHelp()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Neolker 0:43fd4f873193 1 /*
Neolker 0:43fd4f873193 2 * -------------------------------
Neolker 2:35291967fdfb 3 * ConnectorBoxFW 2.0 (2016-09-26)
Neolker 0:43fd4f873193 4 * -------------------------------
Neolker 0:43fd4f873193 5 * Firmware for ConnectorBox TPH 1.0 (NXP LPC1768).
Neolker 0:43fd4f873193 6 *
Neolker 0:43fd4f873193 7 * Copyright (c) 2016, Martin Wolker (neolker@gmail.com)
Neolker 0:43fd4f873193 8 * All rights reserved.
Neolker 0:43fd4f873193 9 *
Neolker 0:43fd4f873193 10 * Redistribution and use in source and binary forms, with or without
Neolker 0:43fd4f873193 11 * modification, are permitted provided that the following conditions are met:
Neolker 0:43fd4f873193 12 * - Redistributions of source code must retain the above copyright
Neolker 0:43fd4f873193 13 * notice, this list of conditions and the following disclaimer.
Neolker 0:43fd4f873193 14 * - Redistributions in binary form must reproduce the above copyright
Neolker 0:43fd4f873193 15 * notice, this list of conditions and the following disclaimer in the
Neolker 0:43fd4f873193 16 * documentation and/or other materials provided with the distribution.
Neolker 0:43fd4f873193 17 * - Neither the name of Martin Wolker nor the
Neolker 0:43fd4f873193 18 * names of its contributors may be used to endorse or promote products
Neolker 0:43fd4f873193 19 * derived from this software without specific prior written permission.
Neolker 0:43fd4f873193 20 *
Neolker 0:43fd4f873193 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
Neolker 0:43fd4f873193 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Neolker 0:43fd4f873193 23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Neolker 0:43fd4f873193 24 * DISCLAIMED. IN NO EVENT SHALL MARTIN WOLKER BE LIABLE FOR ANY
Neolker 0:43fd4f873193 25 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
Neolker 0:43fd4f873193 26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Neolker 0:43fd4f873193 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
Neolker 0:43fd4f873193 28 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Neolker 0:43fd4f873193 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Neolker 0:43fd4f873193 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Neolker 0:43fd4f873193 31 */
Neolker 0:43fd4f873193 32
Neolker 0:43fd4f873193 33 #include "mbed.h"
Neolker 0:43fd4f873193 34 #include "USBSerial.h"
Neolker 0:43fd4f873193 35
Neolker 0:43fd4f873193 36 #define ROT_SPEED 19200
Neolker 0:43fd4f873193 37 #define ROT_TIMEOUT 250
Neolker 0:43fd4f873193 38 #define ROT_INTERVAL 350
Neolker 0:43fd4f873193 39 #define TEMPERATURE_START 29
Neolker 0:43fd4f873193 40 #define TEMPERATURE_END 35
Neolker 0:43fd4f873193 41 #define HUMIDITY_START 12
Neolker 0:43fd4f873193 42 #define HUMIDITY_END 18
Neolker 0:43fd4f873193 43 #define SERIAL_START 77
Neolker 0:43fd4f873193 44 #define SERIAL_END 85
Neolker 0:43fd4f873193 45 #define LED_DELAY 100
Neolker 0:43fd4f873193 46
Neolker 0:43fd4f873193 47 USBSerial PC;
Neolker 0:43fd4f873193 48 Serial ROT_01(p28, p27);
Neolker 0:43fd4f873193 49 Serial ROT_02(p9, p10);
Neolker 0:43fd4f873193 50 DigitalInOut ID_01(p11);
Neolker 0:43fd4f873193 51 DigitalInOut ID_02(p12);
Neolker 0:43fd4f873193 52 DigitalInOut ID_03(p13);
Neolker 0:43fd4f873193 53 DigitalInOut ID_04(p14);
Neolker 0:43fd4f873193 54 DigitalInOut ID_05(p21);
Neolker 0:43fd4f873193 55 DigitalInOut ID_06(p22);
Neolker 0:43fd4f873193 56 DigitalInOut ID_07(p25);
Neolker 0:43fd4f873193 57 DigitalInOut ID_08(p26);
Neolker 0:43fd4f873193 58 DigitalInOut ID_09(p5);
Neolker 0:43fd4f873193 59 DigitalInOut ID_10(p6);
Neolker 0:43fd4f873193 60 DigitalInOut ID_11(p7);
Neolker 0:43fd4f873193 61 DigitalInOut ID_12(p8);
Neolker 0:43fd4f873193 62 DigitalInOut ID_13(p29);
Neolker 0:43fd4f873193 63 DigitalInOut ID_14(p30);
Neolker 0:43fd4f873193 64 DigitalInOut ID_15(p18);
Neolker 0:43fd4f873193 65 DigitalInOut ID_16(p17);
Neolker 0:43fd4f873193 66 DigitalInOut ID_17(p16);
Neolker 0:43fd4f873193 67 DigitalInOut ID_18(p15);
Neolker 0:43fd4f873193 68 DigitalInOut ID_19(p20);
Neolker 0:43fd4f873193 69 DigitalInOut ID_20(p19);
Neolker 0:43fd4f873193 70 DigitalOut LED(LED1);
Neolker 0:43fd4f873193 71
Neolker 0:43fd4f873193 72 enum DELAY {A = 6, B = 64, C = 60, D = 10, E = 9, F = 55, G = 0, H = 480, I = 70, J = 410};
Neolker 0:43fd4f873193 73
Neolker 0:43fd4f873193 74 void GetHelp()
Neolker 0:43fd4f873193 75 {
Neolker 2:35291967fdfb 76 PC.printf("+-----------------------------------+\r\n");
Neolker 0:43fd4f873193 77 PC.printf("| HELP - List of commands |\r\n");
Neolker 2:35291967fdfb 78 PC.printf("+-----------------------------------+\r\n");
Neolker 2:35291967fdfb 79 PC.printf("| a -> Read all IDs and all ROTs |\r\n");
Neolker 1:40a75dc71d03 80 PC.printf("| d -> Debug of ROT_01 (RAW DATA) |\r\n");
Neolker 0:43fd4f873193 81 PC.printf("| h -> Get this HELP |\r\n");
Neolker 2:35291967fdfb 82 PC.printf("| i -> Read all IDs |\r\n");
Neolker 2:35291967fdfb 83 PC.printf("| p -> Periodic reading of all ROTs |\r\n");
Neolker 2:35291967fdfb 84 PC.printf("| r -> Read all ROTs |\r\n");
Neolker 2:35291967fdfb 85 PC.printf("| s -> Signalization by USB_LED |\r\n");
Neolker 0:43fd4f873193 86 PC.printf("| t -> Test of ID_01 and ROT_01 |\r\n");
Neolker 0:43fd4f873193 87 PC.printf("| v -> Get version of firmware |\r\n");
Neolker 2:35291967fdfb 88 PC.printf("+-----------------------------------+\r\n");
Neolker 0:43fd4f873193 89 }
Neolker 0:43fd4f873193 90
Neolker 0:43fd4f873193 91 void Blink(int info)
Neolker 0:43fd4f873193 92 {
Neolker 0:43fd4f873193 93 if (info) PC.printf("LED blinking\r\n");
Neolker 0:43fd4f873193 94 for (int i = 0; i < 2; i++) {
Neolker 0:43fd4f873193 95 LED = 1;
Neolker 0:43fd4f873193 96 wait_ms(LED_DELAY);
Neolker 0:43fd4f873193 97 LED = 0;
Neolker 0:43fd4f873193 98 wait_ms(LED_DELAY);
Neolker 0:43fd4f873193 99 }
Neolker 0:43fd4f873193 100 }
Neolker 0:43fd4f873193 101
Neolker 0:43fd4f873193 102 int Reset(DigitalInOut& pin)
Neolker 0:43fd4f873193 103 {
Neolker 0:43fd4f873193 104 pin.output();
Neolker 0:43fd4f873193 105 pin = 0;
Neolker 0:43fd4f873193 106 wait_us(H);
Neolker 0:43fd4f873193 107 pin.input();
Neolker 0:43fd4f873193 108 wait_us(I);
Neolker 0:43fd4f873193 109 uint32_t result = pin;
Neolker 0:43fd4f873193 110 wait_us(J);
Neolker 0:43fd4f873193 111 return result;
Neolker 0:43fd4f873193 112 }
Neolker 0:43fd4f873193 113
Neolker 0:43fd4f873193 114 void WriteBit(DigitalInOut& pin, uint32_t bit)
Neolker 0:43fd4f873193 115 {
Neolker 0:43fd4f873193 116 pin.output();
Neolker 0:43fd4f873193 117 if (bit) {
Neolker 0:43fd4f873193 118 pin = 0;
Neolker 0:43fd4f873193 119 wait_us(A);
Neolker 0:43fd4f873193 120 pin.input();
Neolker 0:43fd4f873193 121 wait_us(B);
Neolker 0:43fd4f873193 122 } else {
Neolker 0:43fd4f873193 123 pin = 0;
Neolker 0:43fd4f873193 124 wait_us(C);
Neolker 0:43fd4f873193 125 pin.input();
Neolker 0:43fd4f873193 126 wait_us(D);
Neolker 0:43fd4f873193 127 }
Neolker 0:43fd4f873193 128 }
Neolker 0:43fd4f873193 129
Neolker 0:43fd4f873193 130 uint32_t ReadBit(DigitalInOut& pin)
Neolker 0:43fd4f873193 131 {
Neolker 0:43fd4f873193 132 uint32_t bit_value;
Neolker 0:43fd4f873193 133 pin.output();
Neolker 0:43fd4f873193 134 pin = 0;
Neolker 0:43fd4f873193 135 wait_us(A);
Neolker 0:43fd4f873193 136 pin.input();
Neolker 0:43fd4f873193 137 wait_us(E);
Neolker 0:43fd4f873193 138 bit_value = pin;
Neolker 0:43fd4f873193 139 wait_us(F);
Neolker 0:43fd4f873193 140 return bit_value;
Neolker 0:43fd4f873193 141 }
Neolker 0:43fd4f873193 142
Neolker 0:43fd4f873193 143 void WriteByte(DigitalInOut& pin, uint32_t byte)
Neolker 0:43fd4f873193 144 {
Neolker 0:43fd4f873193 145 for (uint32_t bit = 0; bit < 8; ++bit) {
Neolker 0:43fd4f873193 146 WriteBit(pin, byte & 0x01);
Neolker 0:43fd4f873193 147 byte >>= 1;
Neolker 0:43fd4f873193 148 }
Neolker 0:43fd4f873193 149 }
Neolker 0:43fd4f873193 150
Neolker 0:43fd4f873193 151 uint32_t ReadByte(DigitalInOut& pin)
Neolker 0:43fd4f873193 152 {
Neolker 0:43fd4f873193 153 uint32_t byte = 0;
Neolker 0:43fd4f873193 154 for (uint32_t bit = 0; bit < 8; ++bit) {
Neolker 0:43fd4f873193 155 byte |= (ReadBit(pin) << bit);
Neolker 0:43fd4f873193 156 }
Neolker 0:43fd4f873193 157 return byte;
Neolker 0:43fd4f873193 158 }
Neolker 0:43fd4f873193 159
Neolker 0:43fd4f873193 160 void GetID(DigitalInOut& pin, int number)
Neolker 0:43fd4f873193 161 {
Neolker 0:43fd4f873193 162 Reset(pin);
Neolker 0:43fd4f873193 163 WriteByte(pin, 0x33);
Neolker 0:43fd4f873193 164 int B8 = ReadByte(pin);
Neolker 0:43fd4f873193 165 int B7 = ReadByte(pin);
Neolker 0:43fd4f873193 166 int B6 = ReadByte(pin);
Neolker 0:43fd4f873193 167 int B5 = ReadByte(pin);
Neolker 0:43fd4f873193 168 int B4 = ReadByte(pin);
Neolker 0:43fd4f873193 169 int B3 = ReadByte(pin);
Neolker 0:43fd4f873193 170 int B2 = ReadByte(pin);
Neolker 0:43fd4f873193 171 int B1 = ReadByte(pin);
Neolker 0:43fd4f873193 172 PC.printf("ID_%02d: %02X%02X%02X%02X%02X%02X%02X%02X\r\n", number, B1, B2, B3, B4, B5, B6, B7, B8);
Neolker 0:43fd4f873193 173 }
Neolker 0:43fd4f873193 174
Neolker 0:43fd4f873193 175 void GetROT(Serial& port, int number, int debug)
Neolker 0:43fd4f873193 176 {
Neolker 0:43fd4f873193 177 Timer t;
Neolker 0:43fd4f873193 178 int position = 0;
Neolker 0:43fd4f873193 179 char symbol = '0';
Neolker 0:43fd4f873193 180 char buffer[255] = "";
Neolker 0:43fd4f873193 181 t.start();
Neolker 0:43fd4f873193 182 port.printf("{F99RDD-\r");
Neolker 0:43fd4f873193 183 while((symbol != '\r') && (t.read_ms() < ROT_TIMEOUT)) {
Neolker 0:43fd4f873193 184 if(port.readable()) {
Neolker 0:43fd4f873193 185 symbol = port.getc();
Neolker 0:43fd4f873193 186 buffer[position] = symbol;
Neolker 0:43fd4f873193 187 position++;
Neolker 0:43fd4f873193 188 }
Neolker 0:43fd4f873193 189 }
Neolker 0:43fd4f873193 190 t.stop();
Neolker 0:43fd4f873193 191 if (debug) {
Neolker 0:43fd4f873193 192 PC.printf("------DEBUG_START-------\r\n");
Neolker 0:43fd4f873193 193 PC.printf("Reading time is: %d ms\r\n", t.read_ms());
Neolker 0:43fd4f873193 194 PC.printf("Count of characters: %d\r\n", position);
Neolker 0:43fd4f873193 195 PC.printf("ROT_%02d (RAW DATA):\r\n", number);
Neolker 0:43fd4f873193 196 if (position == 0) {
Neolker 0:43fd4f873193 197 PC.printf("N/A\r\n");
Neolker 0:43fd4f873193 198 } else {
Neolker 0:43fd4f873193 199 for (int d = 0; d < 105; d++) {
Neolker 0:43fd4f873193 200 PC.printf("%c", buffer[d]);
Neolker 0:43fd4f873193 201 }
Neolker 0:43fd4f873193 202 PC.printf("\n");
Neolker 0:43fd4f873193 203 }
Neolker 0:43fd4f873193 204 PC.printf("ROT_%02d (PARSED DATA):\r\n", number);
Neolker 0:43fd4f873193 205 }
Neolker 0:43fd4f873193 206 t.reset();
Neolker 0:43fd4f873193 207 if ((position != 105) || (buffer[16] == '-')) {
Neolker 0:43fd4f873193 208 PC.printf("ROT_%02d: 0,00; 0,00; 00000000\r\n", number);
Neolker 0:43fd4f873193 209 } else {
Neolker 0:43fd4f873193 210 PC.printf("ROT_%02d: ", number);
Neolker 0:43fd4f873193 211 for (int i = TEMPERATURE_START; i < TEMPERATURE_END; i++) {
Neolker 0:43fd4f873193 212 if (buffer[i] == '.') {
Neolker 0:43fd4f873193 213 PC.printf(",");
Neolker 0:43fd4f873193 214 } else {
Neolker 0:43fd4f873193 215 PC.printf("%c", buffer[i]);
Neolker 0:43fd4f873193 216 }
Neolker 0:43fd4f873193 217 }
Neolker 0:43fd4f873193 218 PC.printf("; ");
Neolker 0:43fd4f873193 219 for (int j = HUMIDITY_START; j < HUMIDITY_END; j++) {
Neolker 0:43fd4f873193 220 if (buffer[j] == '.') {
Neolker 0:43fd4f873193 221 PC.printf(",");
Neolker 0:43fd4f873193 222 } else {
Neolker 0:43fd4f873193 223 PC.printf("%c", buffer[j]);
Neolker 0:43fd4f873193 224 }
Neolker 0:43fd4f873193 225 }
Neolker 0:43fd4f873193 226 PC.printf("; ");
Neolker 0:43fd4f873193 227 for (int k = SERIAL_START; k < SERIAL_END; k++) {
Neolker 0:43fd4f873193 228 PC.printf("%c", buffer[k]);
Neolker 0:43fd4f873193 229 }
Neolker 0:43fd4f873193 230 PC.printf("\r\n");
Neolker 0:43fd4f873193 231 }
Neolker 0:43fd4f873193 232 if (debug) PC.printf("-------DEBUG_END--------\r\n");
Neolker 0:43fd4f873193 233 }
Neolker 0:43fd4f873193 234
Neolker 0:43fd4f873193 235 void GetVersion()
Neolker 0:43fd4f873193 236 {
Neolker 2:35291967fdfb 237 PC.printf("+--------------------------------+\r\n");
Neolker 0:43fd4f873193 238 PC.printf("| ConnectorBox TPH 1.0 |\r\n");
Neolker 2:35291967fdfb 239 PC.printf("+--------------------------------+\r\n");
Neolker 2:35291967fdfb 240 PC.printf("| FW version: 2.0 (2016-09-26) |\r\n");
Neolker 0:43fd4f873193 241 PC.printf("| Author: Martin Wolker |\r\n");
Neolker 0:43fd4f873193 242 PC.printf("| Contact: neolker@gmail.com |\r\n");
Neolker 2:35291967fdfb 243 PC.printf("+--------------------------------+\r\n");
Neolker 0:43fd4f873193 244 }
Neolker 0:43fd4f873193 245
Neolker 0:43fd4f873193 246 int main(void)
Neolker 0:43fd4f873193 247 {
Neolker 0:43fd4f873193 248 ROT_01.baud(ROT_SPEED);
Neolker 0:43fd4f873193 249 ROT_02.baud(ROT_SPEED);
Neolker 0:43fd4f873193 250 int flag = 1;
Neolker 0:43fd4f873193 251 LED = 0;
Neolker 0:43fd4f873193 252 Blink(0);
Neolker 0:43fd4f873193 253 wait(1);
Neolker 0:43fd4f873193 254 while(1) {
Neolker 0:43fd4f873193 255 if (PC.readable()) {
Neolker 0:43fd4f873193 256 switch(PC.getc()) {
Neolker 0:43fd4f873193 257 case 'A':
Neolker 0:43fd4f873193 258 case 'a':
Neolker 0:43fd4f873193 259 GetID(ID_01, 1);
Neolker 0:43fd4f873193 260 GetID(ID_02, 2);
Neolker 0:43fd4f873193 261 GetID(ID_03, 3);
Neolker 0:43fd4f873193 262 GetID(ID_04, 4);
Neolker 0:43fd4f873193 263 GetID(ID_05, 5);
Neolker 0:43fd4f873193 264 GetID(ID_06, 6);
Neolker 0:43fd4f873193 265 GetID(ID_07, 7);
Neolker 0:43fd4f873193 266 GetID(ID_08, 8);
Neolker 0:43fd4f873193 267 GetID(ID_09, 9);
Neolker 0:43fd4f873193 268 GetID(ID_10, 10);
Neolker 0:43fd4f873193 269 GetID(ID_11, 11);
Neolker 0:43fd4f873193 270 GetID(ID_12, 12);
Neolker 0:43fd4f873193 271 GetID(ID_13, 13);
Neolker 0:43fd4f873193 272 GetID(ID_14, 14);
Neolker 0:43fd4f873193 273 GetID(ID_15, 15);
Neolker 0:43fd4f873193 274 GetID(ID_16, 16);
Neolker 0:43fd4f873193 275 GetID(ID_17, 17);
Neolker 0:43fd4f873193 276 GetID(ID_18, 18);
Neolker 0:43fd4f873193 277 GetID(ID_19, 19);
Neolker 0:43fd4f873193 278 GetID(ID_20, 20);
Neolker 0:43fd4f873193 279 GetROT(ROT_01, 1, 0);
Neolker 0:43fd4f873193 280 GetROT(ROT_02, 2, 0);
Neolker 0:43fd4f873193 281 Blink(0);
Neolker 0:43fd4f873193 282 break;
Neolker 0:43fd4f873193 283 case 'D':
Neolker 0:43fd4f873193 284 case 'd':
Neolker 0:43fd4f873193 285 GetROT(ROT_01, 1, 1);
Neolker 0:43fd4f873193 286 Blink(0);
Neolker 0:43fd4f873193 287 break;
Neolker 0:43fd4f873193 288 case 'H':
Neolker 0:43fd4f873193 289 case 'h':
Neolker 0:43fd4f873193 290 GetHelp();
Neolker 2:35291967fdfb 291 Blink(0);
Neolker 0:43fd4f873193 292 break;
Neolker 0:43fd4f873193 293 case 'I':
Neolker 0:43fd4f873193 294 case 'i':
Neolker 0:43fd4f873193 295 GetID(ID_01, 1);
Neolker 0:43fd4f873193 296 GetID(ID_02, 2);
Neolker 0:43fd4f873193 297 GetID(ID_03, 3);
Neolker 0:43fd4f873193 298 GetID(ID_04, 4);
Neolker 0:43fd4f873193 299 GetID(ID_05, 5);
Neolker 0:43fd4f873193 300 GetID(ID_06, 6);
Neolker 0:43fd4f873193 301 GetID(ID_07, 7);
Neolker 0:43fd4f873193 302 GetID(ID_08, 8);
Neolker 0:43fd4f873193 303 GetID(ID_09, 9);
Neolker 0:43fd4f873193 304 GetID(ID_10, 10);
Neolker 0:43fd4f873193 305 GetID(ID_11, 11);
Neolker 0:43fd4f873193 306 GetID(ID_12, 12);
Neolker 0:43fd4f873193 307 GetID(ID_13, 13);
Neolker 0:43fd4f873193 308 GetID(ID_14, 14);
Neolker 0:43fd4f873193 309 GetID(ID_15, 15);
Neolker 0:43fd4f873193 310 GetID(ID_16, 16);
Neolker 0:43fd4f873193 311 GetID(ID_17, 17);
Neolker 0:43fd4f873193 312 GetID(ID_18, 18);
Neolker 0:43fd4f873193 313 GetID(ID_19, 19);
Neolker 0:43fd4f873193 314 GetID(ID_20, 20);
Neolker 0:43fd4f873193 315 Blink(0);
Neolker 0:43fd4f873193 316 break;
Neolker 0:43fd4f873193 317 case 'P':
Neolker 0:43fd4f873193 318 case 'p':
Neolker 0:43fd4f873193 319 PC.printf("-------------START--------------\r\n");
Neolker 0:43fd4f873193 320 while(flag) {
Neolker 0:43fd4f873193 321 GetROT(ROT_01, 1, 0);
Neolker 0:43fd4f873193 322 GetROT(ROT_02, 2, 0);
Neolker 0:43fd4f873193 323 Blink(0);
Neolker 0:43fd4f873193 324 wait_ms(ROT_INTERVAL);
Neolker 0:43fd4f873193 325 if (PC.readable()) {
Neolker 0:43fd4f873193 326 PC.getc();
Neolker 0:43fd4f873193 327 PC.printf("--------------END---------------\r\n");
Neolker 0:43fd4f873193 328 flag = 0;
Neolker 0:43fd4f873193 329 }
Neolker 0:43fd4f873193 330 }
Neolker 0:43fd4f873193 331 flag = 1;
Neolker 0:43fd4f873193 332 break;
Neolker 0:43fd4f873193 333 case 'R':
Neolker 0:43fd4f873193 334 case 'r':
Neolker 0:43fd4f873193 335 GetROT(ROT_01, 1, 0);
Neolker 0:43fd4f873193 336 GetROT(ROT_02, 2, 0);
Neolker 0:43fd4f873193 337 Blink(0);
Neolker 0:43fd4f873193 338 break;
Neolker 0:43fd4f873193 339 case 'S':
Neolker 0:43fd4f873193 340 case 's':
Neolker 0:43fd4f873193 341 Blink(1);
Neolker 0:43fd4f873193 342 break;
Neolker 0:43fd4f873193 343 case 'T':
Neolker 0:43fd4f873193 344 case 't':
Neolker 0:43fd4f873193 345 GetID(ID_01, 1);
Neolker 0:43fd4f873193 346 GetROT(ROT_01, 1, 0);
Neolker 0:43fd4f873193 347 Blink(0);
Neolker 0:43fd4f873193 348 break;
Neolker 0:43fd4f873193 349 case 'V':
Neolker 0:43fd4f873193 350 case 'v':
Neolker 0:43fd4f873193 351 GetVersion();
Neolker 0:43fd4f873193 352 Blink(0);
Neolker 0:43fd4f873193 353 break;
Neolker 0:43fd4f873193 354 default:
Neolker 2:35291967fdfb 355 PC.printf("Unknown command, try \"h\" for HELP...\r\n");
Neolker 0:43fd4f873193 356 Blink(0);
Neolker 0:43fd4f873193 357 break;
Neolker 0:43fd4f873193 358 }
Neolker 0:43fd4f873193 359 }
Neolker 0:43fd4f873193 360 }
Neolker 0:43fd4f873193 361 }