Ардуино + USB + Win. Вопрос от новичка.

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение dmw » Пт дек 20, 2013 12:37 pm

PAV писал(а):Как в ардуине считать строку, разбить ее на части и использовать для управления. Пишу сам, н оесли кто уже сделал, поделитесь.
выполнить команду 1 или 0 получается, как сделать чтобы строку типа pin11 status1 ардуинка выполняла?
Присоединюсь к вопросу.
Дуина получает в строковую переменную команду:

Код: Выделить всё

String incoming = "GET /?N=99&D=6&v=1";
Как парсировать команду чтоб из неё в результате присвоились значения переменным:

Код: Выделить всё

uint16_t N=99;
byte D=6;
byte v=1;
PAV
Сообщения: 969
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 71 раз
Поблагодарили: 95 раз

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение PAV » Пт дек 20, 2013 12:48 pm

Пока так выкрутился.
Диммер светодиода

Код: Выделить всё

const int DeemPin1 = 5;
const int DeemPin2 = 6;
const int DeemPin3 = 7;

void setup() {
  // initialize serial:
  Serial.begin(9600);
  // make the pins outputs:
  pinMode(DeemPin1, OUTPUT); 
   pinMode(DeemPin2, OUTPUT); 
    pinMode(DeemPin3, OUTPUT); 
  }

void loop() {
  // if there's any serial available, read it:
  while (Serial.available() > 0) {

    // look for the next valid integer in the incoming serial stream:
    int pin = Serial.parseInt(); 
    // do it again:
    int stat = Serial.parseInt(); 


    // look for the newline. That's the end of your
    // sentence:
    if (Serial.read() == '\n') {
  
      analogWrite(pin, stat);

    }
  }
}
PAV
Сообщения: 969
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 71 раз
Поблагодарили: 95 раз

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение PAV » Пт дек 20, 2013 2:20 pm

Подскажите КАК в Мажордом отправить в COM3, а лучше в arduino_gw строку вида "5 50" с окончанием строки, т.е. чтобы код выше смог эти данные считать?

А также подскажите, как в COM3 отправить значение BRIGHTNESS через arduino_gw?

UPD.
Через COM port отправил
Вписывать в код кнопки (формат - "пин значение")

Код: Выделить всё

if ($params['VALUE']) {
exec("mode com3: BAUD=9600 PARITY=N data=8 stop=1 xon=off");
$fp =fopen("COM3", "w'");
$somecontent = "5 250\n";
fwrite($fp, $somecontent);
fclose($fp);


} else {
exec("mode com3: BAUD=9600 PARITY=N data=8 stop=1 xon=off");
$fp =fopen("COM3", "w");
$somecontent = "5 0\n";
fwrite($fp, $somecontent);
fclose($fp); 
}
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение sergejey » Пт дек 20, 2013 5:27 pm

С окончанием строки передать не получится в arduino_gw.
За то можно в том коде изменить '\n' на ';' и передавать как "5 50;" -- т.е. разделителем команды будет ; а не \n

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение dmw » Пт дек 20, 2013 11:14 pm

Разобрался сам, во первых каким либо образом, в частностях по разному, но нужно прийти к переменной типа String (важно с большой буквы).
Например так:

Код: Выделить всё

String txtMsg = "";
void setup() {
  Serial.begin(9600);
}
void loop() {
  while (Serial.available() > 0) {
    char inChar = Serial.read();
    txtMsg += inChar;
}
Далее с txtMsg можно делать что угодно: http://arduino.cc/en/Reference/StringObject
В частности:
indexOf() - ищет строку в строке
substring() - возвращает подстроку
и т.д. на сколько хватит фантазии
PAV
Сообщения: 969
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 71 раз
Поблагодарили: 95 раз

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение PAV » Вс дек 22, 2013 12:00 pm

sergejey писал(а):С окончанием строки передать не получится в arduino_gw.
За то можно в том коде изменить '\n' на ';' и передавать как "5 50;" -- т.е. разделителем команды будет ; а не \n
Как отправить 5 значение brightness ;?
PAV
Сообщения: 969
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 71 раз
Поблагодарили: 95 раз

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение PAV » Пн дек 23, 2013 2:57 pm

Как в Мажордоме склеить разные значения?

$a = "Пришло";
$b = "человек";
$c = 100;

как сделать, чтобы $d = Пришло 100 человек ???????
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение ErmolenkoM » Пн дек 23, 2013 3:02 pm

PAV писал(а):Как в Мажордоме склеить разные значения?
не в MajorDoMo, а в PHP

первая ссылка гугл на запрос "конкатинация PHP"
http://php.net/manual/ru/language.operators.string.php

Если всерьез программировать под МЖД, то PHP надо почитать. Учебник подойдет любой.
aka msh555
Cubian на Cubietruck, Connect
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение dmw » Пн дек 23, 2013 4:07 pm

PAV писал(а):Как в Мажордоме склеить разные значения?

$a = "Пришло";
$b = "человек";
$c = 100;

как сделать, чтобы $d = Пришло 100 человек ???????

Код: Выделить всё

$d = $a." ".$c." ".$b." ???????";
PAV
Сообщения: 969
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 71 раз
Поблагодарили: 95 раз

Re: Ардуино + USB + Win. Вопрос от новичка.

Сообщение PAV » Пн дек 23, 2013 5:22 pm

Спасибо дошло. Команда получилась такая (dimmerHall.refresh)-
$value=$this->getProperty("brightness");
safe_exec('"C:/_majordomo/apps/arduino_gw/arduino_gw.exe" 5 '.$this->getProperty("brightness").';');

Но теперь почему-то глючит arduino_gw, пока запущен - не работат Мажордом. Как выключаю - все ОК ;)
Разбираюсь, чтобы попробовать
Ответить