Hallo zusammen,
es funktioniert immer nur das zuletzt Initialisierte, sprich in diesem Bsp. unten Funktioniert nur die Kommunikation mit dem nRF24L01+ und das Display zeigt nichts an.
Wenn ich das tausche, also erst nRF24L01+ und dann das TFT Display Initialisiere funktioniert das Display und meine Kommunikation mit dem nRF24L01+ nicht mehr.
Habe schon versucht die jeweiligen CS Pins manuell auf HIGH/LOW zu setzen um den SPI Bus freizugeben, jedoch ohne Erfolg.
Kann der Fehler vielleicht daran liegen, dass das Display und der nRF24L01+ unterschiedliche SPI Bus Geschwindigkeiten haben? Wenn ja, wie kann ich die gleichsetzen?
Verwende folgende Libraries:
TFT Display, von Henning Karlsen:
http://www.rinkydinkelectronics.com/library.php?id=51
nRF24L01+:
#include <UTFT.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
extern uint8_t franklingothic_normal[]; // 16x16
UTFT myGLCD(TFT01_22SP, 11, 13, 10, 8, 9); // (controller, SDI(MOSI), SCK, CS, RESET, D/C)
RF24 myRadio (6, 7); // CE = 6, CSN = 7
struct myKeller {
float temp;
float hum;
float pres;
float errorAnz;
};
myKeller keller;
bool newData = true;
float testA = 5.0;
const uint64_t pipes[6] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL };
void setup() {
Serial.begin(9600);
pinMode(6, OUTPUT);
digitalWrite(6, HIGH);
//pinMode(7, OUTPUT); // nRF24L01+ CSN Pin
//pinMode(10, OUTPUT); // TFT Display CS Pin
myGLCD.InitLCD(PORTRAIT);
myGLCD.clrScr();
myGLCD.setBackColor(VGA_BLACK);
myGLCD.setColor(VGA_SILVER);
myGLCD.setFont(franklingothic_normal);
myRadio.begin();
myRadio.setChannel(108);
myRadio.setPALevel(RF24_PA_MAX);
myRadio.setDataRate(RF24_250KBPS);
myRadio.openReadingPipe(1, pipes[1]);
myRadio.startListening();
/*
myGLCD.InitLCD(PORTRAIT);
myGLCD.clrScr();
myGLCD.setBackColor(VGA_BLACK);
myGLCD.setColor(VGA_SILVER);
myGLCD.setFont(franklingothic_normal);
*/
}
void loop() {
//digitalWrite(10, HIGH); // Zum Deaktivieren / TFT Display CS Pin
//digitalWrite(7, LOW); // Zum Aktivieren / nRF24L01+ CSN Pin
getData();
//digitalWrite(7, HIGH); // Zum Deaktivieren / nRF24L01+ CSN Pin
//digitalWrite(10, LOW); // Zum Aktivieren / TFT Display CS Pin
showData();
}
void getData() {
byte pipeNum;
if (myRadio.available(&pipeNum)) {
if (pipeNum == 1) {
while (myRadio.available()) {
myRadio.read(&keller, sizeof(keller));
}
}
switch (pipeNum) {
case 1:
myGLCD.print("Temp.: ", 50, 50);
myGLCD.printNumF(keller.temp, 1, 165, 50);
Serial.print("Ort: ");
Serial.print(pipeNum);
Serial.print(" Temp.: ");
Serial.print(keller.temp, 1);
Serial.print(" Hum.: ");
Serial.print(keller.hum, 0);
Serial.print(" Pres.: ");
Serial.print(keller.pres, 0);
Serial.print(" Err.: ");
Serial.println(keller.errorAnz, 0);
Serial.println("");
newData = true;
testA += 0.1;
break;
default:
break;
}
}
}
void showData() {
if (newData) {
//digitalWrite(7, HIGH); // Zum Deaktivieren / nRF24L01+ CSN Pin
//digitalWrite(10, LOW); // Zum Aktivieren / TFT Display CS Pin
myGLCD.print("test", 50, 100);
myGLCD.printNumF(testA, 1, 50, 150);
myGLCD.printNumI(testA, 50, 200);
//digitalWrite(10, HIGH); // Zum Deaktivieren / TFT Display CS Pin
//digitalWrite(7, LOW); // Zum Aktivieren / nRF24L01+ CSN Pin
newData = false;
}
}