Не работает скетч.
- Войдите на сайт для отправки комментариев
Ср, 26/07/2017 - 11:37
Это скетч для радиоаппаратуры для р/у на ардуино.
Проблема такова: элерон не отклоняется, а все остальное работает.Аналоговый вход работает, и серва элерона тоже.
Скетч передатчика:
#include <Servo.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
long an0;
long an1;
long an2;
long an3;
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
RF24 radio(8, 10); // CE, CSN
byte data[3];
void setup() {
pinMode(A0, INPUT);
pinMode(A6, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)
// скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
// RF24_250KBPS на nRF24L01 (без +) неработает.
// меньше скорость, выше чувствительность приемника.
radio.setDataRate(RF24_1MBPS);
// мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
radio.setPALevel(RF24_PA_HIGH);
radio.openWritingPipe(pipe); // открываем трубу на передачу.
}
void loop() {
an0 = analogRead(A2);
an0 = constrain(an0, 140, 712);
an1 = analogRead(A3);
an1 = constrain(an1, 133, 685);
an2 = analogRead(A0);
an2 = constrain(an2, 55, 916);
an3 = analogRead(A6);
an3 = constrain(an3, 200, 798);
data[0] = map(an0, 140, 712, 0, 180);
data[1] = map(an3, 200, 798, 0, 180);
data[2] = map(an2, 55, 916, 0, 180);
data[3] = map(an1, 70, 902, 0, 180);
radio.write( &data, sizeof(data) ); // передаем сигнал
}
скетч приемника:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
unsigned long time;
RF24 radio(4, 10); // CE, CSN
byte data[3];
Servo motor;
Servo eleron;
Servo visota;
Servo povorot;
void setup() {
motor.attach(9, 800, 2200);
povorot.attach(6);
eleron.attach(3);
visota.attach(5);
radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)
// скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
// RF24_250KBPS на nRF24L01 (без +) неработает.
// меньше скорость, выше чувствительность приемника.
radio.setDataRate(RF24_1MBPS);
// мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
radio.setPALevel(RF24_PA_HIGH);
radio.openReadingPipe(1, pipe); // открываем первую трубу с индитификатором "pipe"
radio.startListening(); // включаем приемник, начинаем слушать трубу
}
// radio.stopListening(); // останавливает приём (нужно перед началом передачи)
void loop() {
if ( radio.available()) { // слушаем эфир со всех труб
radio.read( &data, sizeof(data) ); // чиатем входящий сигнал
time = millis();
}
if (millis() - time > 1000) {
data[0] = 0;
data[1] = 0;
data[2] = 0;
data[3] = 0;
}
motor.write(data[0]);
eleron.write(data[1]);
visota.write(data[2]);
povorot.write(data[3]);
}
Опечатка?
Если 3 - это номер пина, то на другой цеплять пробовали?
Передатчик, строка 64
Приёмник, строки 54 и 63
Выход за границы массива.
Исправьте, а там посмотрим.
Короче, добавил ещё один канал для вида ,так как заметил, что последний канал не работает, и все заработало
Короче, добавил ещё один канал для вида ,так как заметил, что последний канал не работает, и все заработало
Ну для какого ещё вида! Вам даже строки указали, где у Вас ошибка. Объявлен массив из трёх элементов, а обращаетесь к четвёртому!
Ну для какого ещё вида!
А он добавил ещё один канал, кторым не пользуется и выход за границы перестал проявляться, самым старшим-то каналом не пользуются :)))))
Короче, добавил ещё один канал для вида ,так как заметил, что последний канал не работает, и все заработало
Ну для какого ещё вида! Вам даже строки указали, где у Вас ошибка. Объявлен массив из трёх элементов, а обращаетесь к четвёртому!
Спасибо Вам огромное!!