Нужна помощь ! Это последнее место, куда могу обратиться за помощью, везде
отказали! Хочу собрать следующую конструкцию: 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==61){ message=2; } else
if(pitch==62){ message=3; } else
if(pitch==63){ message=4; } else
if(pitch==64){ message=5; } else
if(pitch==65){ message=6; } else
if(pitch==66){ message=7; } else
if(pitch==67){ message=8; } 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[] = {1,2,3,4,5,6,7,8};
void setup() {{
pinMode(pins[1], OUTPUT); // Set pins as OUTPUTs
pinMode(pins[2], OUTPUT); // Set pins as OUTPUTs
pinMode(pins[3], OUTPUT); // Set pins as OUTPUTs
pinMode(pins[4], OUTPUT); // Set pins as OUTPUTs
pinMode(pins[5], OUTPUT); // Set pins as OUTPUTs
pinMode(pins[6], OUTPUT); // Set pins as OUTPUTs
pinMode(pins[7], OUTPUT); // Set pins as OUTPUTs
pinMode(pins[8], 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[1],HIGH); } else
if (val == 2) { digitalWrite(pins[2],HIGH); } else
if (val == 3) { digitalWrite(pins[3],HIGH); } else
if (val == 4) { digitalWrite(pins[4],HIGH); } else
if (val == 5) { digitalWrite(pins[5],HIGH); } else
if (val == 6) { digitalWrite(pins[6],HIGH); } else
if (val == 7) { digitalWrite(pins[7],HIGH); } else
if (val == 8) { digitalWrite(pins[8],HIGH); } else
if (val==0) { resetLEDs(); }
}
}
//Function that turns all the LEDs off
void resetLEDs(){{
digitalWrite(pins[1],LOW);
digitalWrite(pins[2],LOW);
digitalWrite(pins[3],LOW);
digitalWrite(pins[4],LOW);
digitalWrite(pins[5],LOW);
digitalWrite(pins[6],LOW);
digitalWrite(pins[7],LOW);
digitalWrite(pins[8],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);
}
}
Запускаю, и на приёмнике тишина. Работает только когда данные передаешь сам через Помогите исправить код !