суббота, 10 января 2009 г.

Arduino для отладки программ.

Пишу программу на С# которая снимает показания с терморегуляторов "Поликон", рисует график зависимости температуры от времени и записывает данные в файл.
Терморегуляторы по rs-485 объединены в сеть и через интерфейсный преобразователь usb t--> rs-485 подкльченый к компютеру.
Компьютер видит все это дело как обычный Com порт, правда в данном случае он виртуальный. Что бы получить данные с прибора нужно просто послать на com порт сообщение определенного вида и затем считать с com порта поступившее сообщение.прибора
И ввиду того что у меня дома нет ни сети из терморегуляторов , ни даже хотя бы одного терморегулятора. А необходимость в отладки программы при ее написании имеется. Я запрограммировал arduino как эмулятор работы всех терморегуляторов объединненых в сеть. С Arduino тоже можно общаться просто посылая сообщения на сom порт и поэтому в программе ни чего менять ненадо.

Вот код программы Arduino:

#include stdio.h
int incomingByte = 0,
incomingByte1= 0,
newrandom = 0;
char ascii[9];

void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps

}

void loop() {

// send data only when you receive data:

if (Serial.available() == 5) {
// read the incoming byte:
incomingByte = Serial.read();

if (incomingByte == '&'){
incomingByte = Serial.read();
incomingByte1 = Serial.read();
newrandom = random(100,999);
sprintf(ascii,">%c%c+%i\n", incomingByte, incomingByte1, newrandom) ;
Serial.print(ascii);
}
}
}


Ничего тут сложного нет. Arduino просто читает данные с com порта обрабатывет и посылает на com порт ответ необходимого вида.

И в результате что получается. С компьютера мы посылаем сообщение вида:

&051\n

где & - код начала сообщения
05 - это адрес терморегулятора,
1 - код комманды
\n - код конца сообщения, возврат каретки.

А в ответ компьютер ждет сообщение вида:

>05+-36,2\n

где > - код начала сообщения
05 - адрес терморегулятора
+ - код начала строки с данными,
-36,2 - данны по температуре.
\n - код окончания, возврат каретки.

Че делает arduino. Проверяет первый символ в сообщении, если все ОК читает два следуущих символа адреса и посылает ответ нужного вида. Содержащем в себе адрес, который был в полученном сообщении, и произвольное значение температуры в диапозоне от 100 до 999 градусов. Сразу скажу что получить большое разнообразие чисел с помощью функции random(100,999) мне неудалось, но для отладки программы её было достаточно.

Вот пример посылки команды через консоль.


Вот график из моей программы, как пример ее работы с ардуино :
Тут так сказать эмулируется опрос программой двух терморегуляторов.

Комментариев нет:

Отправить комментарий