Mir ist auch klar, dass es unnötig ist die Buttons als int zu übertragen, aber die Bitwise-Operatoren gehen schon ein wenig tiefer und ich habe es vermieden im ersten Projekt soweit zu gehen.
Es ist seltsam. Ich habe jetzt deinen Code übernommen und bloß die CE CSN Pins geändert und die Muxansteuerung im Tx-Code hinzugefügt.
mehr als
Buttons and Pots RX
kommt nicht vom Rx.
Dann habe ich nochmal den test-for-loop in meinem funktionierendem Testsketch mit dem eigentlichen Mux-lese-loop ersetzt, und jetzt werden die Potis wieder korrekt gelesen und übertragen. Die Buttons allerdings nicht. Die werden als 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 gelesen und übertragen, wobei es
0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 sein sollte. Die Übertragung beider Werte in die Variablen funktioniert also, aber aus irgendeinem Grund funktioniert das Füllen von ButtonVal[] nicht.
Ich bin dann auf Fehlersuche gegangen und habe Zeile für Zeile auskommentiert woran es liegen könnte. Sobald radio.begin aufgerufen wird, werden die Buttons nicht mehr korrekt gelesen/ausgegeben. Verschiebe ich den pinMode-Block vom Anfang ans Ende des setups, wird das Button Array korrekt ausgegeben, das Poti Array nicht und keins von beiden wird übertragen. Sobald radio.begin auskommentiert ist, werden beide Arrays korrekt gelesen und ausgegeben.
Es ist wie verhext. Ich probiere jetzt die Lösung mit den seperaten Pipes, vielleicht ändert das ja was. Es ist mir ein absolutes Rätsel, warum die Ansteuerung des MUX solche Folgen hat. Die hat ja im Prinzip überhaupt nichts mit dem Funk zu tun.
Tx:
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
RF24 radio(7,8); //CE, CSN
const byte address[6] = "00001";
int ButtonVal[15] = {1,2,3,4,0,0,0,0,0,0,0,0,0,0,0};
int PotiVal[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int PotiValAlt[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //Alt=old
int PotiValPreMap[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int PotiValMap[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
byte bitA = 0; //MUX control bits
byte bitB = 0;
byte bitC = 0;
byte bitD = 0;
int count = 0; // General Counter
void setup() {
pinMode(10, INPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.enableDynamicPayloads();
radio.stopListening();
}
void loop(){
for(count = 0; count <= 14; count ++){
bitA = bitRead(count,0);
bitB = bitRead(count,1);
bitC = bitRead(count,2);
bitD = bitRead(count,3);
digitalWrite(2, bitA);
digitalWrite(3, bitB);
digitalWrite(4, bitC);
digitalWrite(5, bitD); //^ Zum durchschalten der Muxeingänge
//Button & Poti Werte sichern:
ButtonVal[count] = digitalRead(10); // Sichert jeweiligen Buttonwert in [count(0-14)] des Arrays.
if(count<= 13){
PotiValPreMap[count] = analogRead(A0); //Potis werden nur von 0-13 gesichert.
PotiValMap[count] = map(PotiValPreMap[count],0,1023,0,127);
PotiVal[count] = 0.4*PotiVal[count]+0.6*PotiValMap[count];
}
}
Serial.print(ButtonVal[0]);
Serial.print(" ");
Serial.print(ButtonVal[1]);
Serial.print(" ");
Serial.print(ButtonVal[2]);
Serial.print(" ");
Serial.print(ButtonVal[3]);
Serial.print(" ");
Serial.print(ButtonVal[4]);
Serial.print(" ");
Serial.print(ButtonVal[5]);
Serial.print(" ");
Serial.print(ButtonVal[6]);
Serial.print(" ");
Serial.print(ButtonVal[7]);
Serial.print(" ");
Serial.print(ButtonVal[8]);
Serial.print(" ");
Serial.print(ButtonVal[9]);
Serial.print(" ");
Serial.print(ButtonVal[10]);
Serial.print(" ");
Serial.print(ButtonVal[11]);
Serial.print(" ");
Serial.print(ButtonVal[12]);
Serial.print(" ");
Serial.print(ButtonVal[13]);
Serial.print("\t");
Serial.print(PotiVal[0]);
Serial.print(" ");
Serial.print(PotiVal[1]);
Serial.print(" ");
Serial.print(PotiVal[2]);
Serial.print(" ");
Serial.print(PotiVal[3]);
Serial.print(" ");
Serial.print(PotiVal[4]);
Serial.print(" ");
Serial.print(PotiVal[5]);
Serial.print(" ");
Serial.print(PotiVal[6]);
Serial.print(" ");
Serial.print(PotiVal[7]);
Serial.print(" ");
Serial.print(PotiVal[8]);
Serial.print(" ");
Serial.print(PotiVal[9]);
Serial.print(" ");
Serial.print(PotiVal[10]);
Serial.print(" ");
Serial.print(PotiVal[11]);
Serial.print(" ");
Serial.print(PotiVal[12]);
Serial.print(" ");
Serial.print(PotiVal[13]);
Serial.println(" ");
radio.write(&ButtonVal, sizeof(ButtonVal));
radio.write(&PotiVal, sizeof(PotiVal));
}
Rx:
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
RF24 radio(7,8); //CE, CSN
const byte address[6] = "00001";
int modValA = 0; // Neck Switch
int modValB = 0; // LFO Switch
int modValC = 0; // FX Switch
int ButtonVal[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int ButtonValAlt[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int PotiVal[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int PotiValAlt[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int count = 0;
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.enableDynamicPayloads();
radio.startListening();
}
void loop(){
if(radio.available()){
if(radio.getDynamicPayloadSize() == sizeof(ButtonVal)){
radio.read(&ButtonVal, sizeof(ButtonVal));
}
if(radio.getDynamicPayloadSize() == sizeof(PotiVal)){
radio.read(&PotiVal, sizeof(PotiVal));
}
}
Serial.print(ButtonVal[0]);
Serial.print(" ");
Serial.print(ButtonVal[1]);
Serial.print(" ");
Serial.print(ButtonVal[2]);
Serial.print(" ");
Serial.print(ButtonVal[3]);
Serial.print(" ");
Serial.print(ButtonVal[4]);
Serial.print(" ");
Serial.print(ButtonVal[5]);
Serial.print(" ");
Serial.print(ButtonVal[6]);
Serial.print(" ");
Serial.print(ButtonVal[7]);
Serial.print(" ");
Serial.print(ButtonVal[8]);
Serial.print(" ");
Serial.print(ButtonVal[9]);
Serial.print(" ");
Serial.print(ButtonVal[10]);
Serial.print(" ");
Serial.print(ButtonVal[11]);
Serial.print(" ");
Serial.print(ButtonVal[12]);
Serial.print(" ");
Serial.print(ButtonVal[13]);
Serial.print("\t");
Serial.print(PotiVal[0]);
Serial.print(" ");
Serial.print(PotiVal[1]);
Serial.print(" ");
Serial.print(PotiVal[2]);
Serial.print(" ");
Serial.print(PotiVal[3]);
Serial.print(" ");
Serial.print(PotiVal[4]);
Serial.print(" ");
Serial.print(PotiVal[5]);
Serial.print(" ");
Serial.print(PotiVal[6]);
Serial.print(" ");
Serial.print(PotiVal[7]);
Serial.print(" ");
Serial.print(PotiVal[8]);
Serial.print(" ");
Serial.print(PotiVal[9]);
Serial.print(" ");
Serial.print(PotiVal[10]);
Serial.print(" ");
Serial.print(PotiVal[11]);
Serial.print(" ");
Serial.print(PotiVal[12]);
Serial.print(" ");
Serial.print(PotiVal[13]);
Serial.println(" ");
}
Ich habe deine von mir modifizierte Version angehängt. Wie gesagt, ich habe prinzipiell nichts geändert, dass die Funktion stören könnte, außer bitRead(count,x) und digitalWrite(x, bitY) hinzugefügt.
WhandallTx.txt (2.24 KB)
WhandallRx.txt (1.26 KB)