Пытаюсь приладить код сирены в код приемника.
Код приемника:
Код сирены:
ОШИБКА:
libraries\Servo\avr\Servo.cpp.o (symbol from plugin): In function `ServoCount':
(.text+0x0): multiple definition of `__vector_11'
sketch\new-RX_Priyoum6_6.ino.cpp.o (symbol from plugin).text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino Nano.
Сказали, что серво и сирена на одном таймере. Проверил: закомментил все строки с сервой - так и есть.
Теперь задачка: как изменить таймер сирене (или серве)?
Код приемника:
C++:
///////// подключение сервы на D3 //////////
///////// мотор 1 - D2 D5 //////////
///////// мотор 2 - D4 D6 //////////
#include <SPI.h> // Подключаем библиотеку для работы с SPI-интерфейсом
#include "nRF24L01.h" // Подключаем файл конфигурации из библиотеки RF24
#include "RF24.h" // Подключаем библиотеку для работа для работы с модулем NRF24L01
#include "GyverMotor.h"
#include <Servo.h>
GMotor motor0(DRIVER2WIRE, 2, 5, HIGH); //IN1 -> PIN2, IN2 -> PIN3
GMotor motor1(DRIVER2WIRE, 4, 6, HIGH); //IN3 -> PIN4, IN4 -> PIN5
Servo myservo;
byte servo = 3; // сервопривод на 3 цифровом
RF24 radio(9, 10); // CE, CSN модуль nrf24l01 + pa + lna на пинах RF24 radio(9,10); Для Уно/нано. RF24 radio(9,53); для Меги.
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
int recieved_data[15]; //Для nrf24
void setup() {
/////////////// СЮДА ВСТАВЛЯЮ НАСТРОЙКИ СИРЕНЫ И МИГАЛКИ ///////////////
Serial.begin(9600); //открываем порт для связи с ПК
myservo.attach(servo);
// Пины D5 и D6 - 31.4 кГц
TCCR0B = 0b00000001; // x1
TCCR0A = 0b00000001; // phase correct
motor0.setSmoothSpeed(20); // установка скорости изменения скорости (ускорения) мотора
motor0.setMode(AUTO);
motor1.setSmoothSpeed(20); // установка скорости изменения скорости (ускорения) мотора
motor1.setMode(AUTO);
Serial.begin(9600); //открываем порт для связи с ПК
radio.begin(); //активировать модуль
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток) сигнал постабильние
radio.enableAckPayload();//разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32);//размер пакета, в байтах
radio.openReadingPipe(1, address[0]);//хотим слушать трубу 0
radio.setChannel(0x71);//выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_MAX);
radio.setDataRate (RF24_250KBPS);
radio.startListening(); //начинаем слушать эфир, мы приёмный модуль
}
void loop() {
NRF24L01();
myservo.write(recieved_data[2]); // повернуть серво на угол 0..180
setMotorL298();
}
void NRF24L01() {
if (radio.available() > 0) {
radio.read(&recieved_data, sizeof(recieved_data));
}
}
void setMotorL298() {
if (recieved_data[0] > 5 || recieved_data[0] < -5) {
motor0.smoothTick(recieved_data[0]);
} else {
recieved_data[0] = 0;
motor0.smoothTick(recieved_data[0]);
}
if (recieved_data[1] > 5 || recieved_data[1] < -5) {
motor1.smoothTick(recieved_data[1]);
} else {
recieved_data[1] = 0;
motor1.smoothTick(recieved_data[1]);
}
}
/////////////// СЮДА ВСТАВЛЯЮ КОД СИРЕНЫ И МИГАЛКИ ///////////////
C++:
void setup() {
//настройка сирены
pinMode(7,OUTPUT); // speaker на 7 ноге
tone(7,300); // цифровой пин, с какой частоты начинать гудеть
//настройка мигалки
TCCR1A=0; // Если закомментить, мигают по 1 разу
OCR1A=624;// 40ms
TCCR1B=(1<<WGM12)|(1<<CS12)|(1<<CS10); //div 1024 CTC mode
TIMSK1=1<<OCIE1A;
pinMode(A1,OUTPUT);// светодиод на A1 ноге
pinMode(A2,OUTPUT); // светодиод на A2 ноге
}
void loop() { }
ISR (TIMER1_COMPA_vect) {
static byte n=1;
static byte spik=40;
static boolean count_direct=false;
if (n<=6) PORTC^=(1<<1);//6 тиков моргать светодиодом на A1 ноге
if (n>=18&&n<=23) PORTC^=(1<<2);//6 тиков моргать светодиодом на A2 ноге
n==35? n=1:n++;
if (count_direct==false){
spik==60? count_direct=true : spik++; // 50-150 - скорость завывания сирены
}
if (count_direct==true){
spik==40? count_direct=false : spik--;
}
OCR2A=spik;
}
libraries\Servo\avr\Servo.cpp.o (symbol from plugin): In function `ServoCount':
(.text+0x0): multiple definition of `__vector_11'
sketch\new-RX_Priyoum6_6.ino.cpp.o (symbol from plugin).text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino Nano.
Сказали, что серво и сирена на одном таймере. Проверил: закомментил все строки с сервой - так и есть.
Теперь задачка: как изменить таймер сирене (или серве)?