Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.12.2012, 01:17   #21
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Могу дать пример на PHP без либы

PHP код:
<?php

$filename 
"/dev/ttyATH0";      //UART порт роутера
$fp fopen($filename"w+");  //открыть порт

if ($fp) { echo 'Порт открыт!'; } else { echo  'Не удалось открыть порт';  } 

fwrite($fp$_POST['send_m']);  //полать в порт строку

if(fread($fp,1))
{
 
$bufer fread($fp,1);   //прочитать из порта 1 байт filesize($filename)
 
print $bufer;  //показать что пришло 
}

//$n = readfile ($filename); 
//echo "<br>".$n; 
fclose($fp); //закрыть порт
  
?>
Из HTML страницы скрипту посылается строка POST запросом
Admin вне форума   Ответить с цитированием
Старый 06.12.2012, 11:14   #22
d00m
Senior Member
 
Регистрация: 06.11.2012
Сообщений: 153
Вес репутации: 0
d00m is an unknown quantity at this point
По умолчанию

спасибо, а кнопочки добавляются на Jscript ?
d00m вне форума   Ответить с цитированием
Старый 06.12.2012, 11:21   #23
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Можно и html

PHP код:
<form method="post" action="tst.php"
<
input type="submit" value="1" name="send_m"
</
form

<
form method="post" action="tst.php"
<
input type="submit" value="0" name="send_m"
</
form

Код для Arduino
PHP код:
#define ledPin 13  
void setup()  
{   
  
Serial.begin(57600);   
  
pinMode(ledPinOUTPUT);       
}  

void loop()  
{  
  if (
Serial.available() > 0)  
  {  
    
byte inByte Serial.read();  
    switch (
inByte)  
    {  
        case 
49:  
        
digitalWrite(ledPinHIGH);  
        
Serial.println("ON!");  
        break;  
        
        case 
48:  
        
digitalWrite(ledPinLOW); 
        
Serial.println("OFF");  
        break;  
    }          
  }  

Admin вне форума   Ответить с цитированием
Старый 08.12.2012, 01:59   #24
d00m
Senior Member
 
Регистрация: 06.11.2012
Сообщений: 153
Вес репутации: 0
d00m is an unknown quantity at this point
По умолчанию

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

Цитата:
...............

void setup()
{
h_servo.attach(9);
v_servo.attach(10);
Serial.begin(115200);
Serial.println("ver 0.15");
.......
так вот, если в эту строчку добавить символ y (а именно на него у меня реагирует один серв и выводится слово Yes !)

Serial.println("y ver 0.15");

то после
инита
# stty -F /dev/ttyACM0 raw speed 115200 -crtscts -hupcl

и открытия порта
# cat /dev/ttyACM0

оно не только прочитает то что было в порту - то есть строчку эту, но и ВЫПОЛНИТ команду и серв отработает:
root@OpenWrt:~# cat /dev/ttyACM0
y ver 0.15
Yes!


почему так ? что ему говорит что нужно прочитанные символы из порта обратно загнать в порт ?
если там будет серия символов-команд, то оно их выполнит по очереди, уже проверял..
d00m вне форума   Ответить с цитированием
Старый 08.12.2012, 11:45   #25
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Я привел сырой пример обмена данными
Для посылки команды нужно индетефицировать устройства как минимум по трем символам
Или обмен данными по протоколу
Admin вне форума   Ответить с цитированием
Старый 08.12.2012, 12:13   #26
d00m
Senior Member
 
Регистрация: 06.11.2012
Сообщений: 153
Вес репутации: 0
d00m is an unknown quantity at this point
По умолчанию

ну это для совсем крутых )
мне непонятно почему при чтении ИЗ порта происходит запись этих данных В этот же порт ? или как это еще можно объяснить..
d00m вне форума   Ответить с цитированием
Старый 09.12.2012, 01:00   #27
d00m
Senior Member
 
Регистрация: 06.11.2012
Сообщений: 153
Вес репутации: 0
d00m is an unknown quantity at this point
По умолчанию

обнаружил еще одну проблему - arduino самостоятельно устанавливает положение сервов при запуске.

оказалось, что при открытии порта, чтобы передать ей команду, она зачемто выставляет на обоих сервах 93 градуса..
тестовый скетч:
Цитата:
#include <Servo.h>
Servo h_servo, v_servo;
String readString;
char c;
int ang,pos;
int hr, vr;

void setup()
{
h_servo.attach(9);
v_servo.attach(10);
Serial.begin(115200);


}

void loop() {
while (Serial.available()) {
c = Serial.read(); //gets one byte from serial buffer
switch (c) {

case 't': //////////////////////////////////////////////////////////////////
Serial.print("ttYes! "); Serial.println(ang);

hr = h_servo.read();
Serial.print("hr1 "); Serial.println(hr);
vr = v_servo.read();
Serial.print("vr1 "); Serial.println(vr);

v_servo.write(60);
delay(500);
h_servo.write(20);
delay(500);
h_servo.write(50);
readString = "";
ang = 0;
c = '0';
delay(1000);
break;

}
readString += c; //makes the string readString

delay(2); //slow looping to allow buffer to fill with next character
ang = readString.toInt(); //convert readString into a number
}
}
команды даю ему в screen (чтобы избежать проблемы авторесета - так порт остается открытым)

# screen /dev/ttyACM0 115200

и после нажатия кнопки t получаю такой вывод
ttYes! 0
hr1 93
vr1 93

ну а последующие нажатия t приводят к ожидаемому:

ttYes! 0
hr1 50
vr1 60
ttYes! 0
hr1 50
vr1 60


почему он вначале центрирует сервы ? как это отключить ?

UPD:
даже если открыть порт по другому:
tail -f /dev/ttyACM0
или
cat /dev/ttyACM0

я вижу что сервы устанавливаются в свои центральные значения - камера, что установлена на них направляется на одну точку..

Последний раз редактировалось d00m; 09.12.2012 в 01:38.
d00m вне форума   Ответить с цитированием
Старый 09.12.2012, 01:32   #28
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

А что делает h_servo.read(); и vr = v_servo.read();
Я так понимаю эти функции считывают из буфера последния значения положения сервомоторов
Так вот у тебя сначала считываются значения которые установлены по умолчанию, а только потом записываются новые значения
И только на втором цикле уже считываются новые значения и т.д.
Admin вне форума   Ответить с цитированием
Старый 09.12.2012, 01:34   #29
d00m
Senior Member
 
Регистрация: 06.11.2012
Сообщений: 153
Вес репутации: 0
d00m is an unknown quantity at this point
По умолчанию

http://arduino.cc/en/Reference/ServoRead

присваивают переменным последние значения положения сервов.
d00m вне форума   Ответить с цитированием
Старый 09.12.2012, 01:39   #30
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Присваивают h_servo.write(); и w_servo.write(50);
Читай предыдущее сообщение

попробуй вот так
PHP код:
#include <Servo.h>
 
Servo h_servov_servo;
 
String readString;
 
char c;
 
int ang,pos;
 
int hrvr;

 
void setup()
 {
 
h_servo.attach(9);
 
v_servo.attach(10);
 
Serial.begin(115200);
 
v_servo.write(60);
 
h_servo.write(20);

 }

 
void loop() {
 while (
Serial.available()) {
 
Serial.read(); //gets one byte from serial buffer
 
switch (c) {

 case 
't'//////////////////////////////////////////////////////////////////


 
v_servo.write(60);
 
delay(500);
 
h_servo.write(20);
 
delay(500); 
 
h_servo.write(50);
 
readString "";
 
ang 0;
 
'0';


 
Serial.print("ttYes! "); Serial.println(ang);
 
hr h_servo.read();
 
Serial.print("hr1 "); Serial.println(hr);
 
vr v_servo.read();
 
Serial.print("vr1 "); Serial.println(vr);

 
delay(1000);
 break;

 }
 
readString += c//makes the string readString

 
delay(2); //slow looping to allow buffer to fill with next character
 
ang readString.toInt(); //convert readString into a number
 
}
 } 
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 05:01. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика