Hallo alle zusammen,
habe es mit eurer Hilfe geschaft und es soweit hinbekommen das es funktioniert. Nun möcht ich die Befehle per Funk übertragen und zurückgesendet bekommen wieviele Schritte nach jeder Sensor Betätigung noch übrig sind. Das Senden zur Scheibe funktioniert, nur bekomme ich keine restlichen Schritte zurückgesendet.
Der Sendecode ist nur ein Beispiel um es zu testen.
Sender:
#include <SPI.h>
#include "RF24.h"
byte data[1];
byte data_e[1];
//const uint64_t pipe = 0xF0F0F0F0A1LL;
const byte addresses[][6] = {"00001", "00002"};
RF24 radio(8, 9);
const int ledpin = 6; // the number of the LED pin
void setup()
{
Serial.begin(9600);
pinMode(ledpin, OUTPUT);
pinMode(0, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
radio.begin();
//radio.openWritingPipe(pipe);
radio.openWritingPipe(addresses[0]); // 00002
radio.openReadingPipe(1, addresses[1]); // 00001
}
void loop()
{
if (digitalRead(0) == HIGH ||
digitalRead(7) == HIGH ||
digitalRead(2) == HIGH ||
digitalRead(3) == HIGH ||
digitalRead(4) == HIGH ||
digitalRead(5) == HIGH)
{
data[0] = 0;
while (radio.available())
{
Serial.println("Data there");
radio.read(data_e, 1);
Serial.println(data_e[0]);
}
if (digitalRead(0) == LOW)
{
data[0] = 1;
digitalWrite(LED_BUILTIN, HIGH);
}
if (digitalRead(7) == LOW)
{
data[0] = 2;
digitalWrite(LED_BUILTIN, HIGH);
}
if (digitalRead(2) == LOW)
{
data[0] = 3;
digitalWrite(LED_BUILTIN, HIGH);
}
if (digitalRead(3) == LOW)
{
data[0] = 4;
digitalWrite(LED_BUILTIN, HIGH);
}
if (digitalRead(4) == LOW)
{
data[0] = 254;
digitalWrite(LED_BUILTIN, HIGH);
}
if (digitalRead(5) == LOW)
{
data[0] = 255;
digitalWrite(LED_BUILTIN, HIGH);
}
if (data [0] != 0) {
radio.stopListening();
radio.write(data, 1);
digitalWrite(LED_BUILTIN, LOW);
Serial.println(data[0]);
radio.startListening();
}
}
}
Empfänger (Bühne):
#include <SPI.h>
#include "RF24.h"
int data[1];
boolean var = true;
const byte addresses[][6] = {"00001", "00002"};
//const uint64_t pipe = 0xF0F0F0F0A1LL;
RF24 radio (8, 9);
byte rever_start = false;
const byte hal = 3;
byte schritte = 0; // Schritte die deer Motor (Hallsensor betätigt) zurücklegen muss
int sensor = LOW;
unsigned long startZeit; // Abfrage begin Sensor an Bühne
unsigned long interval = 2000; // Zeitabstand nachdem ein Zustand des Sensors erkannt wird
unsigned long vergangeneZeit = 0; // Speichervariable um die Vergangene Zeit zu speichern
/*int pin_motor_links = A1; // Richtungspin an H-Brücke für Links
int pin_motor_rechts = A2; // Richtungspin an H-Brücke für Rechts
*/
// Statusvariablen
bool nullStellung = false; // Speichervariable ob Referenzfahrt erfolgt ist
bool ergebnis = false; // Berechnung der Schritte und Richtung beendet/gestartet
bool start = false; // Schritte Zaehlen beendet/gestartet
void setup() {
radio.begin();
//radio.openReadingPipe(1, pipe);
radio.openWritingPipe(addresses[1]); // 00001
radio.openReadingPipe(1, addresses[0]); // 00002
radio.startListening();
pinMode(hal, INPUT);
Serial.begin(9600);
//delay (2000);
}
void loop() {
referenzFahrt();
encoder_lesen();
schritteZaehlen();
}
void referenzFahrt() {
while (radio.available())
{
Serial.println("Data there");
radio.read(data, 1);
Serial.println(data[0]);
}
// Reverenzfahrt
if ((data[0] == 255) && (rever_start == false) && (nullStellung == false)) {
rever_start = true;
Serial.println("Reverenzfahrt gestartet");
// digitalWrite (pin_motor_rechts, HIGH);
// digitalWrite (pin_motor_links, LOW);
}
else if ((data[0] == 254) && (rever_start == true)) {
nullStellung = true;
rever_start = false;
Serial.println("Reverenzfahrt beendet");
Serial.println (" ");
// digitalWrite (pin_motor_rechts, LOW);
// digitalWrite (pin_motor_links, LOW);
}
}
void encoder_lesen () {
if ((data[0] <= 48) && (data[0] > 0) && (nullStellung == true) && (ergebnis == false)) {
//rechtsrum data[0] Schritte
schritte = data[0];
ergebnis = true;
// Motor
Serial.println (schritte);
Serial.print (" Schritte nach Rechts");
Serial.println (" ");
}
else if ((data[0] >=100) && (data[0] <= 149) && (nullStellung == true) && (ergebnis == false)) {
//linksrum data[0] - 100 Schritte
schritte = data[0] - 100;
ergebnis = true;
// Motor
Serial.println (schritte);
Serial.print (" Schritte nach links");
Serial.println (" ");
}
}
void schritteZaehlen () {
sensor = digitalRead (hal);
startZeit = millis();
if ((schritte != 0) && (ergebnis == true)) {
start = true;
if ((startZeit - vergangeneZeit >= interval) && (sensor == LOW) && (start == true)) {
vergangeneZeit = startZeit;
schritte--;
Serial.println("Drehung start");
Serial.println("Restl. Pos.");
Serial.println(schritte);
radio.stopListening();
radio.write (schritte, 3);
radio.startListening();
}
}
else if ((schritte == 0) && (start == true)) {
start = false;
ergebnis = false;
data[0] = 0;
Serial.println("Ziel");
Serial.println("Drehung");
Serial.println("beendet");
Serial.print("daten");
Serial.println(schritte);
radio.stopListening();
radio.write (schritte, 1);
radio.startListening();
delay(2000);
Serial.println(ergebnis);
}
}
Warum bekomme ich von der Bühne nichts zurück?
P.S. Ich weis nicht ob ich einen neuen Fred aufmachen soll?
Gruß Acki