Надо чтобы серва поворачивалась при хлопке, и чтобы поворачивалась в другую сторону при повторном хлопке. А у меня она просто крутится в разные стороны #include <Servo.h> Servo v; int servopin = 9; int mic =5; boolean run = false; void setup() { Serial.begin(9600); v.attach(servopin); } void loop() { Serial.println(analogRead(mic)); delay(1000); int val = analogRead(mic); if ((val >= 100) && run == false) { v.write(180); run = !run; delay(1000); } if ((val >=2) && run == true) { v.write(o); run = !run; delay(1000); }
И правильно делает, что крутится. У вас же условия поворота влево и вправо одновременно выполняются, первый if создает все условия для срабатывания второго.
Логику работы нужно исправлять. Ну представьте себя микроконтроллером и попытайтесь выполнить эту программу пошагово, сразу увидите неладное Ну, смотрите: изначально run==false int val = analogRead(mic); допустим мы прочитали val >= 100, тогда вот этот кусок сработает if ((val >= 100) && run == false) { v.write(180); run = !run; delay(1000); } после него будет run==true и серва повернута в одну сторону и тут же сработает второй кусок, т.к. первый поменял run и оставил val как есть if ((val >=2) && run == true) { v.write(o); run = !run; delay(1000); } и серва тут же повернется в обратную сторону.
На самом деле, вы хотели сделать что-о подобное: Код (Text): #include <Servo.h> Servo v; int servopin = 9; int mic =5; boolean run = false; void setup() { Serial.begin(9600); v.attach(servopin); } void loop() { int val = analogRead(mic); Serial.println(val); if (val >= 100) { run = !run; delay(1000); if (run) { v.write(180); } else { v.write(0); } } delay(100); }
А как понять эту кнструкцию? Получается что если val>= 0, сначало run cтанет true, потом выполнится первое действие. А при повторении цикла run станет false и все равно будет выполнятся первое дейтвие? Объясните пожалуйти нубу) if (val >= 100) { run = !run; delay(1000); if (run) { v.write(180); } else { v.write(0); }
Из вашего исходника я понял, что переменная run содержит состояние "вкл"-"выкл". Если это не так, прошу прокомментировать предназначение этой переменной.
Спасибо! я сделал: Код (Text): #include <Servo.h> Servo v; int servopin = 9; int mic =5; boolean run = 0; void setup() { Serial.begin(9600); v.attach(servopin); } void loop() { int val = analogRead(mic); Serial.println(val); delay(10); if (val>=200) switch (run) { case 0: v.write(180); run=!run; break; delay(1000); case 1: v.write(0); run=!run; delay(100); break; } } Еще один вопрос)) Можно ли как стабилизировать микрофон, а то после врашение сарва, значение микрофона подымается?
Код (Text): Можно ли как стабилизировать микрофон, а то после врашение сарва, значение микрофона подымается? Дык значение микрофона и должно подниматься, ведь серва-то жужжит - издаёт звук!