суббота, 24 июля 2010 г.

Контроль турникета из PHP на Arduino

Задача проста как две копейки: оператор на сайте жмякает кнопку, сервопривод турникета открывается и через определенный интервал сам закрывается. Работа из пых-пыха осуществляется через костыль для нативной работы с последовательным портом - php_serial.class. Ознакомиться с ним более подробно вы сможете тут.

Скрипт PHP:
if (isset($_GET['send'])) {
$serial = new phpSerial;
$serial->deviceSet("COM1"); //номер COM-порта
$serial->confBaudRate(9600);
$serial->confCharacterLength(8);
$serial->confParity("none");
$serial->confStopBits(1);
$serial->confFlowControl("xon/xoff");
$serial->deviceOpen();
$serial->sendMessage(intval(1));
$serial->deviceClose();
}
Cкетч для буратины:
#include <Servo.h>
Servo servo;
int command;
int tmp=1;
 
void setup() { 
  Serial.begin(9600);
  Serial.setTimeout(5);

  servo.attach(9);
  servo.write(180); 
}

void loop()
{
  if (Serial.available() > 0) { // обработчик при наличии данных в буфере UART
      command = Serial.parseInt();
      Serial.print(command); // контроль себя
  }  

  // если предыдущее значение <> новому
  if (command!= tmp){          

     if (command==0) {
       servo.write(180); 
     } 

     if (command==1) {
      servo.write(90); 
      delay(2000);
      servo.write(180); 
     } 

     tmp = command; // запоминаем новое для последующего сравнения
  }
} 
p.s.: задержку через delay() лучше заменить отслеживанием прошедших тиков через millis() для исключения пропуска команд.

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.