ОФФТОП...
Зашибись..."Многоуважаемый" Exoffcog сообщил,что для этого нам понадобится виагра из штатов...
Страницы 1
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум freeduino.ru → Сообщения от rxtstorm
Страницы 1
ОФФТОП...
Зашибись..."Многоуважаемый" Exoffcog сообщил,что для этого нам понадобится виагра из штатов...
Доброго времени суток.
Собственно вопрос заключается вот в чём: можно ли питать ардуино от адаптера и одновременно передавать данные по УСБ? Не повредит ли это плате и как это сделать?
Появилась мысль про CRC, как на 1-WIRE,но не знаю как реализовать...Может сталкивался кто?
Спасибо.Буду пробовать. :)
Вопросик модераторам.А может быть создать темку в шапке с ответами на такие вопросы?Ну типа расширенный FAQ.
Комрады,выручайте!Ну ни как не победить мне проблему...
Идея в следующем-отослать на плату через serial monitor команду,ну допустим test, а в ответ получить действие.Плата реагирует на отдельные символы типа t или s, а вот целиком на фразу чтобы реагировала как сделать?Хочу ей отсылать всякие команды типа test,start,stop.Кстати возможно команды будут посылаться Processingом...Есть у кого мысли?
Огромное спасибо!А можно поподробнее по элементной базе расписать?
Собственно на данный момент найдено:
1.кусок кода для определения адресов датчиков.
2.кусок кода для снятия температуры.
Вопрос: как заставить программу самостоятельно определять количество датчиков,присваивать им имена (например sensor1,sensor2...) и печатать в порт информацию о температуре каждого конкретного датчика?Ну и допустим если поступит запрос о состоянии датчика, например 3-го, то дать ответ только о его состоянии (температуре).
Очень хочется унифицировать программу.
Доброго дня товарищи.Суть вопроса такова:необходимо снимать показания с 2-х, 3-х и более датчиков температуры.В наличии имеются 4 шт. Dallas ds18b20.Кусок программы который обнаруживает датчики и их адреса есть (при практическом подключении 2-х датчиков их адреса опознались).Кусок программы который общается с датчиком подключенным через шину onewire при паразитном питании есть (ниже).
#include <OneWire.h>
//init the one wire interface on pin 10
OneWire ow(10);
//write here the address you receive from the other program
byte sensor[8] = {0x10, 0x1D, 0x30, 0xF9, 0x01, 0x08, 0x00, 0x51};
void setup(void) {
Serial.begin(9600);
}
void writeTimeToScratchpad(byte* address){
//reset the bus
ow.reset();
//select our sensor
ow.select(address);
//CONVERT T function call (44h) which puts the temperature into the
scratchpad
ow.write(0x44,1);
//sleep a second for the write to take place
delay(1000);
}
void readTimeFromScratchpad(byte* address, byte* data){
//reset the bus
ow.reset();
//select our sensor
ow.select(address);
//read the scratchpad (BEh)
ow.write(0xBE);
for (byte i=0;i<9;i++){
data[i] = ow.read();
}
}
float getTemperature(byte* address){
int tr;
byte data[12];
writeTimeToScratchpad(address);
readTimeFromScratchpad(address,data);
//put in temp all the 8 bits of LSB (least significant byte)
tr = data[0];
//check for negative temperature
if (data[1] > 0x80){
tr = !tr + 1; //two's complement adjustment
tr = tr * -1; //flip value negative.
}
//COUNT PER Celsius degree (10h)
int cpc = data[7];
//COUNT REMAIN (0Ch)
int cr = data[6];
//drop bit 0
tr = tr >> 1;
//calculate the temperature based on this formula :
//TEMPERATURE = TEMP READ - 0.25 + (COUNT PER Celsius Degree - COUNT REMAIN)
/ (COUNT PER Celsius Degree)
return tr - (float)0.25 + (cpc - cr)/(float)cpc;
}
//fahrenheit to celsius conversion
float f2c(float val){
float aux = val - 32;
return (aux * 5 / 9);
}
//celsius to fahrenheit conversion
float c2f(float val){
float aux = (val * 9 / 5);
return (aux + 32);
}
void loop(void) {
float temp;
float tmp2;
tmp2 = getTemperature(sensor);
temp = c2f(tmp2);
Serial.print("Temp = ");
Serial.print(temp);
Serial.print(" F or ");
Serial.print(tmp2);
Serial.println(" C");
//wait 30 seconds
delay(30000);
}Собственно прошу вас пояснить и прокомментировать строки программы (дабы понимать что тут написано) и как привязать еще один или более датчиков к этой программе.
СПАСИБО!!!!!
Сам же отвечаю на свой вопрос.Поборол ХВее и для всех выкладываю проги и описание.Может поможет кому...
Передача команд по XBEE.
Имеем:
1.Freeduino 2009 2 шт.
2.XBee 2 шт.
3.XBee shield 2 шт.
4.Кабель УСБ 1 шт.
5.Питание для Фридуины в виде 8 батареек АА.
6.Светодиоды разных цветов 2шт. + токоограничивающие резисторы к ним.
7.Провода.
Про настройку ХВЕЕ очень хорошо рассказано тут:
http://wiki.amperka.ru/%D0%B2%D0%B8%D0% … 0%B7%D1%8C
Там же много хороших уроков.
Логика такова-одна фридуина подключена к компу и читает значения из СОМ порта компа.Другая питается от батареек и обособлена от компа.Команды между Фридуинами передаются по ХВее.
Если ввести 1, то загорится светодиод 1 на удалённой (питающейся от батареек) плате.Если нажать 0 то загорится светодиод 2 на удалённой плате.Если ввести любой символ, отличный от 0 и 1, то оба светодиода моргнут 4 раза.
Программы.
Плата передатчик:
-----------------------------------------------------------------------------------------
void setup()
{
Serial.begin(9600);//Создаём подключение на скорости 9600
}
void loop()
{
while (Serial.available() == 0);//ждём сигнала с порта
int val = Serial.read();//создаем переменную типа int в которую
// пихаем полученное из порта значение
Serial.print(val,DEC); //пуляем переменную как десятичное
//число в порт
Serial.flush();//Очищает очередь данных.
}
------------------------------------------------------------------------------------------
Плата приёмник с диодами:
------------------------------------------------------------------------------------------
int warning = 7;// светодиод "аварийный" на порте 7
int normal = 5;// светодиод "нормальный" на порте 5
void setup()
{
Serial.begin(9600);//стартуем подключение на скоросте 9600
pinMode (warning, OUTPUT);// порт 7 как выход
pinMode (normal, OUTPUT);// порт 5 как выход
}
void loop ()
{
while (Serial.available() == 0);//ждём сигнала от первой дуины
int var = Serial.read() - '0';//читаем значение как простое число(десятичное)
if (var == 1)//если это 1 то...
{
digitalWrite(warning,HIGH); // ...зажигаем "аварийный" диод
digitalWrite(normal,LOW);// тушим "нормальный" диод
}
else if (var == 0) // если это 0 то...
{
digitalWrite(normal,HIGH);//...зажигаем "нормальный" диод
digitalWrite(warning,LOW);// тушим "аварийный" диод
}
else // ну а если ни то, ни другое, а что либо ещё (например 2)
{
digitalWrite(warning,HIGH);//зажигаем "аварийный" диод
digitalWrite(normal,HIGH);//зажигаем "нормальный" диод
delay(200);// пауза
digitalWrite(warning,LOW);//тушим "аварийный" диод
digitalWrite(normal,LOW);//тушим "нормальный" диод
delay(200);// пауза
digitalWrite(warning,HIGH);
digitalWrite(normal,HIGH);
delay(200);
digitalWrite(warning,LOW);
digitalWrite(normal,LOW);
delay(200);
digitalWrite(warning,HIGH);
digitalWrite(normal,HIGH);
delay(200);
digitalWrite(warning,LOW);
digitalWrite(normal,LOW);
delay(200);
digitalWrite(warning,HIGH);
digitalWrite(normal,HIGH);
delay(200);
digitalWrite(warning,LOW);
digitalWrite(normal,LOW);
delay(200);
Serial.flush();//Очищает очередь данных
}
}
Проги не оптимизировал.Может показаться по детски,но меня пока устраивает.
У меня всё хозяйство находится в одной коробке вместе с 230.Вопросы безопасности учтены.Нужен практический опыт применения.
Ещё раз спасибо всем ответившим.
Никто не сталкивался с вопросом измерения значения переменного напряжения в сетях 230 Вольт при помощи Фридуино? Если сталкивались,то поделитесь,пожалуйста,как реализовали.
Спасибо.
Спасибо Вам мил человек!Только сейчас дошли руки до платы.Буду пробовать!
Отзовитесь люди!!!!Так знает ли кто-нибудь как с шилдами работать и передавать данные с одной хвее на другую хвее!
Помогите пожалуйста,сам не могу разобраться!
Правильно ли я понимаю:
Заливаем в первую ардуину (передатчик данных) следующий скетч (помимо кода приёма данных от датчика температуры)
// Создаём объект XBee в начале скетча
XBee xbee = XBee();
// Даём команду XBee на передачу данных со скоростью 9600
xbee.begin(9600);
// Создаём массив для хранения данных которые хотим передать
uint8_t payload[] = { 'H', 'i' };
// сюда вставим код получения данных с датчика температуры в массив? ()
//Определяем адрес дистанционного модуля XBee (это SH + SL (что это означает?))
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x403e0f30);
// Создаём TX запрос (т.е. запрос на передачу)
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
// Send your request
//Отправляем запрос (имеется ввиду данные которые под которые создавали массив)
xbee.send(zbTx);
На принимающей стороне (вопрос вызывает только номер порта в ардуине на который принимается сигнал и нужно ли на принимающей стороне писать что либо для XBee модуля):
int outputPin = 13; //здесь храним номер контакта (какой контакт указать?)
int val; //здесь будет храниться принятый символ
//далее код программы для обработки полученного символа (мигание диода или вывод на экран и т.д. по необходимости)
Прошу не ругаться.Я новичёк и если честно, то запутался.
Доброго времени суток.Никак не могу разобраться и найти простые примеры реализации допустим простого датчика температуры с использованием передачи данных по Xbee.
Собственно есть две платы freeduino 2009 и 2 платы Xbee shield v5 с модулями Xbee pro. Датчик температуры я прицеплю к одной фридуине без проблем.Не могли бы Вы опубликовать пример кода для передачи данных от одной фридуины на другую?
Спасибо.
Страницы 1
Форум freeduino.ru → Сообщения от rxtstorm
Форум работает на PunBB, при поддержке Informer Technologies, Inc