Всем привет! Делаем с ребенком простые р/у машинки. На текущем этапе научились управлять моторами, сервами и т. д. Собираем строительную технику: бульдозер, экскаватор, грузовик... Но хочется,чтобы все машинки управлялись от одного пульта, по очереди. Задача такая: Управляем одной машинкой, на ней горит светодиод. Потом нажимаем кнопку на пульте, светодиод зажигается на второй машинке, управляем ею. На первой машинке светодиод тухнет. Потом третья машинка, и так по кругу. И тут мои познания зашли в тупик. Два часа поиска ничего не дали... или не там искал. Подскажите, к какую сторону рыть для решения моей задачи. Или задача изначально тупиковая, и нужен другой подход? Вот код передатчика, украденный где-то на просторах. Все банально: ардуино нано, джойстик, NRF24L01 Спойлер: код передатчика Код (C++): #include <SPI.h> #include "RF24.h" RF24 radio(9,10); const uint64_t pipe = 0xE8E8F0F0E1LL; int msg[1]; int potpin_1 = A0; int val_1; int potpin_2 = A1; int val_2; void setup(void){ radio.begin(); radio.openWritingPipe(pipe); } void loop() { val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1); val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1); } Код приемника уже модифицировал под себя. Наверное, не самый оптимальный, но работает. Это трехколесная машинка с двумя ведущими. Спойлер: код приемника Код (C++): #include <SPI.h> #include "RF24.h" RF24 radio(9,10); const uint64_t pipe = 0xE8E8F0F0E1LL; int msg[1]; int x; // повороты int y; // скорость int l_wheel; int r_wheel; int data; const int in1 = 3; // direction pin 1 const int in2 = 4; // direction pin 2 const int ena = 5; // PWM pin to change speed const int in3 = 7; // direction pin 1 const int in4 = 8; // direction pin 2 const int enb = 6; // PWM pin to change speed void setup() { pinMode(in1, OUTPUT); // connection to L298n pinMode(in2, OUTPUT); // connection to L298n pinMode(ena, OUTPUT); // connection to L298n pinMode(in3, OUTPUT); // connection to L298n pinMode(in4, OUTPUT); // connection to L298n pinMode(enb, OUTPUT); // connection to L298n delay(50); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if (radio.available())radio.read(msg, 1); if (msg[0] <=127) y = map(msg[0], 0, 127, 255, -255); if (msg[0] >127) { x = msg[0]-128; x = map(x, 0, 127, -255, 255); } r_wheel = x + y; r_wheel = constrain(r_wheel, -255, 255); l_wheel = x - y; l_wheel = constrain(l_wheel, -255, 255); if (r_wheel < 20 && r_wheel > (-20) && l_wheel < 20 && l_wheel > (-20)) { analogWrite(ena, 0); analogWrite(enb, 0); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } if (r_wheel > 19) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(ena, r_wheel); } if (l_wheel > 19) { digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, l_wheel); } if (r_wheel < (-19)) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ena, abs(r_wheel)); } if (l_wheel < (-19)) { digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enb, abs(l_wheel)); } }
заводите переменную и меняете её по нажатию кнопки передатчик отправляет значение переменной. все приёмники ловят, но отдупляются только если значение вашей переменной соответствует их номеру прописанному в коде.
vvr, спасибо. Еще несколько уточняющих вопросов. К сожалению, не могу поэкспериментировать, сели аккумуляторы, все заглючило, и я окончательно запутался. ) 1. Правильно ли я понял, что передатчик и все приемники должны содержать одинаковые значения pipe в строках сетапа? radio.openReadingPipe(1,pipe); и radio.openWritingPipe(pipe); 2. Можно ли поместить radio.openReadingPipe(1,pipe); в тело функции loop, и менять значение pipe в ходе выполнения программы? Или это тупиковый и неправильный путь? 3. В 95% найденных мною примеров работы nrf24l01 в тексте программы присутствует строка: #include<nRF24L01.h> // Подключаем файл настроек из библиотеки RF24 но иногда этот файл не подключают. Что дает этот файл? ======================= rkit, разумеется, копипастой. Я только учусь, и конечно же, это не мой код. ) Читал. Как эти две строки помогут переключаться между приемниками?
Так и учитесь. Читайте документацию. Разбирайте, что код делает, вместо того, чтобы передирать не думая.
1. да 2. не в те дебри лезете))) 3. если код написан с применением библиотеки nRF24L01 то без #include<nRF24L01.h> он просто не скомпилируется. если код написали вообще без библиотеки то и инклуды не нужны
vvr, еще раз спасибо.) Действительно, в <nRF24L01.h> лишь набор констант, я их не использовал, поэтому и работает без него.