2 функции в 1 скетче, происходит конфликт

tnk
Offline
Зарегистрирован: 14.07.2022

ДОБРЫЙ ДЕНЬ! 

Естественно новичек, ничего не понимаю в программировании, но методом тыка - получается, но не все.

описание: сервопривод 90, ir приемник, микрофон. (hw 484)

Нужно; сделано:

1. Поворачивать серво-привод на 90 градусов, по команде с пульта. скетч нашел, работает как надо.

#include <Servo.h>
#include <IRremote.h>
Servo tnk;

unsigned long Value1 = 0xFF02FD;
unsigned long Value2 = 0xFFA857;

int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
	irrecv.enableIRIn(); // включить приемник

	tnk.attach(10); // серво подключён на цифровой вход 10 (pin 10)
}
void loop() {
	if (irrecv.decode(&results)) {
		irrecv.resume();
	}
	if(results.value == Value1) tnk.write(160); //крутим серву например (0 градусов)

	if(results.value == Value2) tnk.write(90);
}

2. Решил усложнить, чтобы работало еще от увеличения звука, то есть есть пищалка при ее звуке серва выполняет 1-ю команду.  -- Отдельный скет также работает на ура.

#include <Servo.h>
Servo servo;
int threshold = 700;
int volume;

void setup() 
{ 
Serial.begin(9600); // For debugging
pinMode(A0, INPUT); // вход
pinMode(10, OUTPUT);// выход
servo.attach (10); // моторчик из порта 10

}

void loop() 
{
volume = analogRead(A0);
Serial.println(volume);
//delay(1000);

if(volume>=threshold){
servo.write (160); // если звук громкий то поворот на 90 градусов
delay ( 100); 
} 
else{
servo.write (90) ; // если нет звука то находится в нуле
delay ( 1000);
}
}


Решил объединить две команды в одну. То есть, чтобы серво привод работал одинаково и при команде с пульта, или самостоятельно при появлении звука. 

но без знания программирования

у меня получается, что при нажатии на пульт сервопривод начинает постоянно срабатывать без остановки.

вот код. 

#include <Servo.h>
#include <IRremote.h>
Servo servo;
int threshold = 700;
int volume;

Servo tnk;

unsigned long Value1 = 0xFF02FD;
unsigned long Value2 = 0xFFA857;

int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() 

 { 
Serial.begin(9600); // For debugging
pinMode(A0, INPUT); // вход
pinMode(10, OUTPUT);// выход
servo.attach (10); // моторчик из порта 10


	irrecv.enableIRIn(); // включить приемник

	tnk.attach(10); // серво подключён на цифровой вход 10 (pin 10)
}
   


void loop() 
{
volume = analogRead(A0);
Serial.println(volume);
//delay(1000);

if(volume>=threshold){
servo.write (160); // если звук громкий то поворот на 160 градусов
delay ( 100); 
} 
else{
servo.write (90) ; // если нет звука то находится в нуле
delay ( 1000);
}
 {
	if (irrecv.decode(&results)) {
		irrecv.resume();
	}
	if(results.value == Value1) tnk.write(160); //крутим серву например (0 градусов)

	if(results.value == Value2) tnk.write(90);
}
}
//===========================

Что делать и куда копать не понимаю, поэтому обращаюсь к широкой публике. заранее спасибо!

 

tnk
Offline
Зарегистрирован: 14.07.2022

Что делать и куда копать не понимаю, поэтому обращаюсь к широкой публике. заранее спасибо!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

У тебя в одном скетче объект «сервопривода» называется Servo, в другом tnk. А должно быть одно имя, объявленное вначале скетча.

tnk
Offline
Зарегистрирован: 14.07.2022

Спасибо, Да, пробовал так и так, вот исправил, сейчас работает вроде кое-как, через раз, думаю все в задержках.

заменил еще направление вращения  у микрофона, 

вот как то так 



#include <Servo.h>
#include <IRremote.h>
Servo tnk;
int threshold = 700;
int volume;

unsigned long Value1 = 0xFF02FD;
unsigned long Value2 = 0xFFA857;

int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() 
 { 
irrecv.enableIRIn(); // включить приемник
tnk.attach (10); // моторчик из порта 10

pinMode(A0, INPUT); // вход
pinMode(10, OUTPUT);// выход
Serial.begin(9600); // For debugging

tnk.attach(10); // серво подключён на цифровой вход 10 (pin 10)
}

void loop() 
{
volume = analogRead(A0);
Serial.println(volume);
//delay(1000);

if(volume>=threshold){
tnk.write (90); // если звук громкий то поворот на 160 градусов
delay ( 10); 
} 
else{
tnk.write (160) ; // если нет звука то находится в нуле
delay (50);
}
 {
  if (irrecv.decode(&results)) {
    irrecv.resume();
  }
  if(results.value == Value1) tnk.write(160); //крутим серву например (0 градусов)

  if(results.value == Value2) tnk.write(90);
  delay(500);
}
}
//===========================

 

 

tnk
Offline
Зарегистрирован: 14.07.2022

Время показало: В случае, если микрофон подключен,  то  работает только одна кнопка на пульте, серво поворачивает и  сразу возвращается в исходное положение. 

 Eсли я отключаю микрофон то сервопривод занимает противоположное состояние,  первая кнопка работать перестает, начинает работать от другой копки пульта, и серво крутит в другую сторону.

SLKH
Offline
Зарегистрирован: 17.08.2015

tnk пишет:

Время показало: В случае, если микрофон подключен,  то  работает только одна кнопка на пульте, серво поворачивает и  сразу возвращается в исходное положение. 

 Eсли я отключаю микрофон то сервопривод занимает противоположное состояние,  первая кнопка работать перестает, начинает работать от другой копки пульта, и серво крутит в другую сторону.

1. Микрофон слышит тарахтенье сервы?

2. Комментарии к поворотам не напутаны?

3. Напиши по-русски, что ты хочешь от устройства. У тебя 3 варианта кнопок и 2 варианта микрофона - как схема должна реагировать на сочетания? 

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Скобки 40, 48, как бы лишние, кто знает, как компилятор воспримет...

tnk
Offline
Зарегистрирован: 14.07.2022

Сорри. Комментарии  в скетче не изменял, так что на них обращать внимания не надо.

SLKH
Offline
Зарегистрирован: 17.08.2015

tnk пишет:

Сорри. Комментарии  в скетче не изменял, так что на них обращать внимания не надо.

https://www.youtube.com/watch?v=l8y5BJvRaFc