Данные сенсора как "выключатель"
- Войдите на сайт для отправки комментариев
Втр, 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 точка с запятой должна быть перед фигурной скобкой, а не после.
Спасибо Большое! Не заметил банальных ошибок. Все работает отлично.