arduino, servo, монитор порта, php
- Войдите на сайт для отправки комментариев
Сб, 25/08/2012 - 18:16
Проект хотелось бы через php управлять сервоприводами
скрипт ПХП
<?
$fp =fopen("com3", "w");
fwrite($fp, chr(1));
fclose($fp);
?>
скетч
#include <Servo.h>
Servo myservo1; // 1 сервопривод
Servo myservo2; // 2 сервопривод
int resultInt; // переменная которая будет приходить из вне
int x; // переменная котороя будет хранить положения 1 сервопривода
int y; // переменная котороя будет хранить положения 2 сервопривода
void setup(){
myservo1.attach(9);
myservo2.attach(10);
Serial.begin(9600);
}
void loop() {
if (Serial.available()>0) {
resultInt = serReadInt();
Serial.println(resultInt);
x=myservo1.read();
y=myservo2.read();
}
switch (resultInt) {
case 1: myservo1.write(x+=20); break;
case 2: myservo1.write(x-=20); break;
case 49: myservo2.write(y+=20); break;
case 50: myservo2.write(y-=20); break;
}
delay(1000);
}
int serReadInt()
{
int i, serAva;
char inputBytes [7]; // массив для хранения байтов
char * inputBytesPtr = &inputBytes[0]; // указатель на первый элемент массива
if (Serial.available()>0) // проверяем есть ли данные
{
delay(7);//чутка ждем, чтобы все данные прошли
serAva = Serial.available(); // получаем количество доступных байт
for (i=0; i<serAva; i++) // загружаем байты в массив
inputBytes[i] = Serial.read();
inputBytes[i] = '\0'; // дописываем NULL в конец массива
return atoi(inputBytesPtr); // Вызываем atoi функцию, стандартная функция С
}
else
return -1; // Возвращаем -1, если ничего не получили
}
Через монитор порта когда отправляешь данные приводы крутятся как надо, но через php не хотят...
Подскажи те добрые люди что делать?
Извиняюсь скинул код без проверки, есть ошибка
вот рабочий
#include <Servo.h> Servo myservo1; // 1 сервопривод Servo myservo2; // 2 сервопривод int resultInt; // переменная которая будет приходить из вне int x; // переменная котороя будет хранить положения 1 сервопривода int y; // переменная котороя будет хранить положения 2 сервопривода void setup(){ myservo1.attach(9); myservo2.attach(10); Serial.begin(9600); } void loop() { if (Serial.available()>0) { resultInt = serReadInt(); Serial.println(resultInt); x=myservo1.read(); y=myservo2.read(); switch (resultInt) { case 1: myservo1.write(x+=20); break; case 2: myservo1.write(x-=20); break; case 49: myservo2.write(y+=20); break; case 50: myservo2.write(y-=20); break; } delay(1000); }} int serReadInt() { int i, serAva; char inputBytes [7]; // массив для хранения байтов char * inputBytesPtr = &inputBytes[0]; // указатель на первый элемент массива if (Serial.available()>0) // проверяем есть ли данные { delay(7);//чутка ждем, чтобы все данные прошли serAva = Serial.available(); // получаем количество доступных байт for (i=0; i<serAva; i++) // загружаем байты в массив inputBytes[i] = Serial.read(); inputBytes[i] = '\0'; // дописываем NULL в конец массива return atoi(inputBytesPtr); // Вызываем atoi функцию, стандартная функция С } else return -1; // Возвращаем -1, если ничего не получили }Извиняюсь еще раз, разобрался только нужна не большая подсказка...
4 файла php каждый посылает цифру от 1 до 4
<? $fp =fopen("com3", "w"); fwrite($fp, 1); fclose($fp); ?> <? $fp =fopen("com3", "w"); fwrite($fp, 2); fclose($fp); ?> <? $fp =fopen("com3", "w"); fwrite($fp, 3); fclose($fp); ?> <? $fp =fopen("com3", "w"); fwrite($fp, 4); fclose($fp); ?>Arduino ловит их и обрабатывает
1, 2 - вперед назад первый сервопривод
2, 3 - вперед назад второй сервопривод
#include <Servo.h> Servo myservo1; // 1 сервопривод Servo myservo2; // 2 сервопривод int resultInt; // переменная которая будет хранить команду из PHP int x; // переменная котороя будет хранить положения 1 сервопривода int y; // переменная котороя будет хранить положения 2 сервопривода int z; void setup(){ myservo1.attach(9); myservo2.attach(10); Serial.begin(9600); } void loop() { if (Serial.available()>0) { delay(7); resultInt = serReadInt(); Serial.println(resultInt); z=char(resultInt); Serial.println(resultInt); x=myservo1.read(); y=myservo2.read(); switch (resultInt) { case 1: myservo1.write(x+=20); break; case 2: myservo1.write(x-=20); break; case 3: myservo2.write(y+=20); break; case 4: myservo2.write(y-=20); break; } delay(1000); }} int serReadInt() { int i, serAva; char inputBytes [7]; // массив для хранения байтов char * inputBytesPtr = &inputBytes[0]; // указатель на первый элемент массива if (Serial.available()>0) // проверяем есть ли данные { delay(7);//чутка ждем, чтобы все данные прошли serAva = Serial.available(); // получаем количество доступных байт for (i=0; i<serAva; i++) // загружаем байты в массив inputBytes[i] = Serial.read(); inputBytes[i] = '\0'; // дописываем NULL в конец массива return atoi(inputBytesPtr); // Вызываем atoi функцию, стандартная функция С } else return -1; // Возвращаем -1, если ничего не получили }Все работает но, в коде есть не нужные строчки которые ни как не трогают логику, если их убрать сервы не двигаются((
почему так ?
Вот эти строчки не нужны так же как и описанная переменная Z
Serial.println(resultInt); z=char(resultInt); Serial.println(resultInt);