Hallo an alle,
wie aus dem Titel zu erkennen ist habe ich Probleme mit dem Serial.available.
/*
* See documentation at https://nRF24.github.io/RF24
* See License information at root directory of this library
* Author: Brendan Doherty (2bndy5)
*/
/**
* A simple example of sending data from 1 nRF24L01 transceiver to another.
*
* This example was written to be used on 2 devices acting as "nodes".
* Use the Serial Monitor to change each node's behavior.
*/
#include <SPI.h>
#include "printf.h"
#include "RF24.h"
#define ACK 9
#define Send 12
#define Read 13
int Steuerzeichen = 0;
// instantiate an object for the nRF24L01 transceiver
RF24 radio(9, 10); // using pin 7 for the CE pin, and pin 8 for the CSN pin
// Let these addresses be used for the pair
uint8_t address[][6] = { "1Node", "2Node" };
// It is very helpful to think of an address as a path instead of as
// an identifying device destination
// to use different addresses on a pair of radios, we need a variable to
// uniquely identify which address this radio will use to transmit
bool radioNumber = 1; // 0 uses address[0] to transmit, 1 uses address[1] to transmit
// Used to control whether this node is sending or receiving
bool role = true; // true = TX role, false = RX role
// For this example, we'll be using a payload containing
// a single float number that will be incremented
// on every successful transmission
float payload = NULL;
void setup() {
Serial.begin(115200);
while (!Serial) {
// some boards need to wait to ensure access to serial over USB
}
// initialize the transceiver on the SPI bus
if (!radio.begin()) {
// Serial.println(F("radio hardware is not responding!!"));
while (1) {} // hold in infinite loop
}
// print example's introductory prompt
// Serial.println(F("RF24/examples/GettingStarted"));
// To set the radioNumber via the Serial monitor on startup
// Serial.println(F("Which radio is this? Enter '0' or '1'. Defaults to '0'"));
// Serial.print(F("radioNumber = "));
// Serial.println((int)radioNumber);
// role variable is hardcoded to RX behavior, inform the user of this
// Serial.println(F("*** PRESS 'T' to begin transmitting to the other node"));
// Set the PA Level low to try preventing power supply related problems
// because these examples are likely run with nodes in close proximity to
// each other.
radio.setPALevel(RF24_PA_LOW); // RF24_PA_MAX is default.
// save on transmission time by setting the radio to only transmit the
// number of bytes we need to transmit a float
radio.setPayloadSize(sizeof(payload)); // float datatype occupies 4 bytes
// set the TX address of the RX node into the TX pipe
radio.openWritingPipe(address[radioNumber]); // always uses pipe 0
// set the RX address of the TX node into a RX pipe
radio.openReadingPipe(1, address[!radioNumber]); // using pipe 1
// additional setup specific to the node's role
if (role) {
radio.stopListening(); // put radio in TX mode
} else {
radio.startListening(); // put radio in RX mode
}
// For debugging info
// printf_begin(); // needed only once for printing details
// radio.printDetails(); // (smaller) function that prints raw register values
// radio.printPrettyDetails(); // (larger) function that prints human readable data
} // setup
void loop() {
if (Serial.available() > 0) { // If anything comes in Serial (USB),
Steuerzeichen = Serial.parseInt();
}
if (Steuerzeichen == Send) {
radio.stopListening();
Steuerzeichen = 0;
Serial.println(ACK);
while (Serial.available() == 0) {
payload = Serial.parseInt();
Serial.println(payload);
}
// This device is a TX node
/* unsigned long start_timer = micros(); // start the timer
bool report = radio.write(&payload, sizeof(float)); // transmit & save the report
unsigned long end_timer = micros(); // end the timer
if (report) {
Serial.print(F("Transmission successful! ")); // payload was delivered
Serial.print(F("Time to transmit = "));
Serial.print(end_timer - start_timer); // print the timer result
Serial.print(F(" us. Sent: "));
Serial.println(payload); // print payload sent
payload += 0.01; // increment float payload
} else {
Serial.println(F("Transmission failed or timed out")); // payload was not delivered
}
*/
// to make this example readable in the serial monitor
Serial.println("loop");
delay(100); // slow transmissions down by 1 second
}
}
und zwar in der void loop(), lese ich als erstes ein Zeichen ein (Steuerzeichen) und wenn dieses Steuerzeichen einen bestimmten Wert hat dann soll das Program auf ein weiteres Zeichen warten (das soll im späteren Verlauf dann per NRF24L01 versendet werden). Das Lesen des Steuerzeichens funktioniert auch problemlos. Die Abfrage in der while loop bleibt dann jedoch stur auf 0 obwohl aber Eingaben eingelesen werden. Das bedeutet das Program betritt die while loop und bleibt dann endlos darin gefangen da sich der Wert von Serial.available nicht mehr ändert obwohl die Variable payload sich ändert wenn was eingegeben wird. (ich hoffe das war verständlich). Wieso erkennt das Serial.available in der while loop abfrage nicht das ein Zeichen gelesen wurde?
Übersehe ich hier was und stelle mich nur doof an?
Vielen Dank schon mal im Vorraus,
LG Hansbeder