Данные сенсора как "выключатель"
- Войдите на сайт для отправки комментариев
Втр, 05/05/2015 - 12:21
Добрый день.
Пытаюсь написать код, чтобы при достижении определенного диапазона значений сенсора серва принимала определенное значение, а после повторного достижения этого диапазона вставала в ноль, но после 1 срабатывания серва встает в ноль и не двигается. В чем может быть дело?
#include <Servo.h>
Servo myservo;
int valnew; // переменная для приема данных
int val = 0; // переменная для отправки на серв
int act = 0; // переменная для отправки положения серв. 0- нулевое положение. 1- 90 градусов
int actnew = 0; // переменная для приема положения серв
void setup()
{
}
void loop()
{
valnew = analogRead(0)>>7; // считываем
if (valnew != val) //если значение сенсора изменилось
{
myservo.attach(5); //включаем серв
val = valnew; //записываем новое значение управляющего сигнала
act = actnew; //записываем новое значение положения серв
Serial.println(val, DEC); // для себя проверить
if (act = 0) { // проверяем положение серва
if (val > 4){
myservo.write(90); //
actnew = 1; // записываем, что серва подвинута
delay(500); // ждем чтобы серв мог докрутить
myservo.detach();} //отключаем чтобы не дрожал
}
else if (act = 1) { // если серв подвинут
if (val > 4){
myservo.write(0); //
actnew = 0; // записываем, что серва в нуле
delay(500); // ждем чтобы серв мог докрутить
myservo.detach()}; //отключаем чтобы не дрожал
}
delay(1000); //считывание с сенсора раз в секунду
}
}
У Вас в некоторых условиях if вместо сравнения (==) стоит присваивание(=).
Строка 23: if (act = 0) поменять на if (act == 0)
Строка 30: else if (act = 1) поменять на else if (act == 1)
Также в строке 35 точка с запятой должна быть перед фигурной скобкой, а не после.
Спасибо Большое! Не заметил банальных ошибок. Все работает отлично.