* Steps to set to MASTER:
* Set PIO11 HIGH with a 10K resistor in between.
* Power on, module comes into AT Command Response Status
* Open HyperTerminal or other serial tool, set the baud rate 38400, 8 data bits, 1 stop bit, no parity bit, no Flow
Control
* Via serial port, send characters "AT + ROLE = 1 r n",if successful, return "OK r n", where r n is carriage return.
* Set PIO11 LOW, re-power, then in Master state, automatically search for slave module and connect.
переменный резистор 1 кОм
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: переменный резистор 1 кОм
Я думаю, что реализуемо. Там даже в описании товара написано:
Re: переменный резистор 1 кОм
Это только часть задания!Mr.Kubikus писал(а):Классное ТЗ!
А целиком это как-то так: Система управления микроклиматом в теплице. Один блок на меге 2560 с экраном 2004 для сбора данных и несколько управляющих блоков на нано. Мега собирает данные, обрабатывает и раздает команды, а нано исполняет и контролирует исполнение. Такая структура выбрана для того, чтоб не тормозился процесс сбора данных.
К меге подключены: датчики температуры(воздух, почва, вода в емкости, отопление), датчик влажности(воздух, почва), датчик уровня в емкости(поплавки), датчик освещенности, аварийный датчик утечки метана. Один нано будет управлять котлом и фрамугами, к нему будут подключены: датчик положения фрамуги, аварийные конечники, датчик пламени. Другой нано будет управлять системой досветки и системой затенения.
Еще рассматриваю вариант автоматического приготовления смеси для гидропоники...
Вот набросок скетча для нано(управление фрамугой):
Код: Выделить всё
//команда а проходит с другого контроллера
//"а" вычисляется по принципу:
//если t<25с, а=0
//если t>25с, а=1
//если t>26с, а=2
//если t>27с, а=3
//если а=0 - 0% - 100
//если а=1 - 33% - 200
//если а=2 - 66% - 300
//если а=3 - 100% - 400
int a, b, x = 0;//а-команда управления, b-метка положения, х-положение
int op = 13; //пин открывания фрамуги
int cl = 12; //пин закрывания фрамуги
void setup()
{
x = analogRead(0); //считываем положение фрамуги
if (x<100) b=0; //определяем положение и присваиваем b
if ((x<200) & (x>100)) b=1;
if ((x<300) & (x>200)) b=2;
if (x>300) b=3;
}
void loop()
{
if ((a=0) & (b>0)) { //если команда а=0 и положение b>0
while (x>100) {digitalWrite(cl,HIGH);} //даем команду на закр. пока х>100
digitalWrite(cl,LOW); b = 0; //отключаем привод и присваиваем b=0
}
if ((a=1) & (b<1)) { //если команда а=1 и положение b<1
while (x<200) {digitalWrite(op,HIGH);} //даем команду на откр. пока х<200
digitalWrite(op,LOW); b = 1; //отключаем привод и присваиваем b=1
}
if ((a=1) & (b>1)) { //если команда а=1 и положение b>1
while (x>200) {digitalWrite(cl,HIGH);} //даем команду на закр. пока х>200
digitalWrite(cl,LOW); b = 1; //отключаем привод и присваиваем b=1
}
if ((a=2) & (b<2)) { //если команда а=2 и положение b<2
while (x<300) {digitalWrite(op,HIGH);} //даем команду на откр. пока х<300
digitalWrite(op,LOW); b = 2; //отключаем привод и присваиваем b=2
}
if ((a=2) & (b>2)) { //если команда а=1 и положение b>2
while (x>300) {digitalWrite(cl,HIGH);} //даем команду на закр. пока х>300
digitalWrite(cl,LOW); b = 2; //отключаем привод и присваиваем b=2
}
if ((a=3) & (b<3)) { //если команда а=3 и положение b<3
while (x<400) {digitalWrite(op,HIGH);} //даем команду на откр. пока х<400
digitalWrite(op,LOW); b = 3; //отключаем привод и присваиваем b=3
}
}
Re: переменный резистор 1 кОм
Там написано на буржуйском языке, а я на нем не балакаю... Без Вашей помощи тут никак!Mr.Kubikus писал(а):Я думаю, что реализуемо. Там даже в описании товара написано:* Steps to set to MASTER:
* Set PIO11 HIGH with a 10K resistor in between.
* Power on, module comes into AT Command Response Status
* Open HyperTerminal or other serial tool, set the baud rate 38400, 8 data bits, 1 stop bit, no parity bit, no Flow
Control
* Via serial port, send characters "AT + ROLE = 1 r n",if successful, return "OK r n", where r n is carriage return.
* Set PIO11 LOW, re-power, then in Master state, automatically search for slave module and connect.
Да, кстати, модуль у меня на 38400 не заработал, долго мучился, пока не решил попробовать на 9600, и все заработало нормально!
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: переменный резистор 1 кОм
Серьезная задача. Целая распределенная система.
Прерывания подключаются функцией attachInterrupt().
attachInterrupt(interrupt, function, mode), где:
interrupt: номер прерывания(int)
function: функция, которая будет вызываться когда произойдет прерывание. Эту функцию надо объявить без параметров и она не должна возвращать результат. Еще её называют обработчиком прерывания - interrupt service routine.
mode: параметр указывает - по какому событию генерировать прерывание. Есть четыре варианта:
Прерывания подключаются функцией attachInterrupt().
attachInterrupt(interrupt, function, mode), где:
interrupt: номер прерывания(int)
function: функция, которая будет вызываться когда произойдет прерывание. Эту функцию надо объявить без параметров и она не должна возвращать результат. Еще её называют обработчиком прерывания - interrupt service routine.
mode: параметр указывает - по какому событию генерировать прерывание. Есть четыре варианта:
- LOW прерывание генерируется когда вход находится в состоянии LOW.
CHANGE прерывание генерируется когда состояние на входе изменяется с LOW на HIGH или наоборот.
RISING прерывание генерируется когда состояние на входе изменяется с LOW на HIGH.
FALLING прерывание генерируется когда состояние на входе изменяется с HIGH на LOW.
Код: Выделить всё
int pin = 13;
volatile int state = LOW;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);
}
void loop()
{
digitalWrite(pin, state);
}
void blink()
{
state = !state;
}
Re: переменный резистор 1 кОм
С общением двух ардуин по блютуз пока повременим. Пока нужно пообщаться по порту. Соединить надо мегу2560(serial1) и нано(serial0).
Если я правильно понял необходимо соединить RX(mega pin19)-> TX(nano pin1) и TX(mega pin18)->RX(nano pin0).
На какое расстояние можно разнести ардуины при таком соединении?
Если я правильно понял необходимо соединить RX(mega pin19)-> TX(nano pin1) и TX(mega pin18)->RX(nano pin0).
На какое расстояние можно разнести ардуины при таком соединении?
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: переменный резистор 1 кОм
Расстояние зависит от окружающих условий и наличия источников ЭМ помех. Думаю 3-5 метров будет работать. На большие расстояния надо использовать дифференциальную линию связи - витую пару и драйверы RS485. Например, Плата с драйвером RS-485.