передача данных по nrf24l01+ из serialport
- Войдите на сайт для отправки комментариев
Нужна помощь ! Прошу не пинать я только начинаю это хобби поэтому много не знаю и не понимаю. Прошу Вас поправить код!
Хочу собрать следующую конструкцию: PROCESSING берёт некую информацию из виртуального midi порта и отправляет её в serialport
//Import libraries
import processing.serial.*;
import promidi.*;
Serial myPort;
MidiIO midiIO;
//Message to be sent
int message=0;
void setup() {
myPort = new Serial(this, "COM4", 9600);
midiIO = MidiIO.getInstance(this);
//Line that prints I/O devices in console
midiIO.printDevices();
//Receive input from Virtual MIDI Ports
midiIO.openInput(0,0);
}
void draw() {}
void noteOn(Note note, int deviceNum, int midiChan){
int vel = note.getVelocity();
int pitch = note.getPitch();
if(vel>0){ // If velocity > 0 set message value to note's pitch
if(pitch==60){ message=1; } else
if(pitch==62){ message=2; } else
if(pitch==64){ message=3; } else
if(pitch==65){ message=4; } else
if(pitch==67){ message=5; } else message=0;
} else { message=0;}
//Send message to Arduino
myPort.write(message);
}
arduino с радио модулем NRF24I01+ на борту подключенная к ПК слушает serialport получает данные { message=1; }{ message=2; }{ message=3; }.... и отправляет их следующей arduino с такой же конструцией. Она получает данные и выполняет определённое действие (вкл/выкл LED).
Теперь вопрос если не использовать радиомодуль а работать непосредственно напрямую через serialport всё отлично работатет "PROCESSING ---->>> ARDUINO " (код arduino):
// Data received from the serial port
int val;
//LEDs are connected to the following pins
int pins[] = {2,3,4,5,6};
void setup() {
for(int i=0; i<5; i++){
pinMode(pins[i], OUTPUT); // Set pins as OUTPUTs
}
Serial.begin(9600); // Start serial communication at 9600 bps
}
void loop() {
if (Serial.available()) { // If data is available to read,
val = Serial.read(); // read it and store it in val
// Turn on LEDs, depending on pitches received
if (val == 1) { digitalWrite(pins[0],HIGH); } else
if (val == 2) { digitalWrite(pins[1],HIGH); } else
if (val == 3) { digitalWrite(pins[2],HIGH); } else
if (val == 4) { digitalWrite(pins[3],HIGH); } else
if (val == 5) { digitalWrite(pins[4],HIGH); } else
if (val==0) { resetLEDs(); }
}
}
//Function that turns all the LEDs off
void resetLEDs(){
for(int i=0; i<5; i++){
digitalWrite(pins[i],LOW);
}
}
Тперь цепляю NRF24I01+ получаю следующую конструкцию "PROCESSING-->>ARDUINOпередаёт---->>ARDUINOпринимает" код processing оставляю тот же код ARDUINOперед:
#include <SPI.h>
#include "RF24.h"
RF24 radio(9, 10);
const uint64_t pipe= {
0xF0F0F0F000LL};// адреса каналов приема и передачи
void setup(){
Serial.begin(9600);
radio.begin();
radio.setDataRate(RF24_250KBPS); // Скорость передачи
radio.setChannel(100); // Номер канала от 0 до 127
radio.setRetries(15,15); // Кол-во попыток и время между попытками
radio.openWritingPipe(pipe); // Открываем канал передачи
radio.startListening(); // Начинаем слушать эфир
}
void loop(){
if(Serial.available()){
char data[32] = "";
byte i = 0;
while(Serial.available()){
data[i] = Serial.read(); //получаем данные из сериал.
i++;
delay(2);
}
data[i] = 0;
radio.stopListening();
radio.write(&data, 32); //и отправляем их в Arduino №2
radio.startListening();
}
}
код ARDUINOприемнка:
#include <SPI.h>
#include "RF24.h"
RF24 radio(9, 10);
//пины куда подключены светодиоды
int pins[] = {1,2,3,4,5,6,7,8};
const uint64_t pipe = {
0xF0F0F0F000LL};// адреса каналов приема и передачи
void setup(){
for(int i=0; i<8; i++){
pinMode(pins[i], OUTPUT); // Set pins as OUTPUTs
}
radio.begin();
radio.setDataRate(RF24_250KBPS); // Скорость передачи
radio.setChannel(100); // Номер канала от 0 до 127
radio.setRetries(15,15); // Кол-во попыток и время между попытками
radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
radio.startListening(); // Начинаем слушать эфир
}
void loop(){
if(radio.available()){
char data[32] = "";
radio.read(&data, 32); //принимает пакет с Arduino №1
//Если пришла цифра 1 включаем светодиод
if (data[0] == '1') { digitalWrite(pins[0],HIGH); } else
if (data[0] == '2') { digitalWrite(pins[1],HIGH); } else
if (data[0] == '3') { digitalWrite(pins[2],HIGH); } else
if (data[0] == '4') { digitalWrite(pins[3],HIGH); } else
if (data[0] == '5') { digitalWrite(pins[4],HIGH); } else
if (data[0] == '6') { digitalWrite(pins[5],HIGH); } else
if (data[0] == '7') { digitalWrite(pins[6],HIGH); } else
if (data[0] == '8') { digitalWrite(pins[7],HIGH); } else
if (data[0] == '0') { resetLEDs(); }
}
}
void resetLEDs(){
for(int i=0; i<8; i++){
digitalWrite(pins[i],LOW);
}
}
Запускаю и на приёмнике тишина. Работает только когда данные передаешь сам через 
Подскажите где ошибка в чем не прав ???? по возможности исправить код !
В коде приемника нет даже инициализации последовательного порта...
Для чего он там нужен приёмник работает и берет все данные по nrf