So habe mal wieder ein Bisschen was gemacht. Hab mal im Sender versucht das Programm für die Referenzfahrt zu programmieren. Aber leider empfängt die Bühne nichts...
Hier mal der Code vom Sender:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#include <SPI.h>
#include "RF24.h"
RF24 radio (A4, A5);
byte address[] [6] = {"pipe1", "pipe2"};
const byte sensor_referenz = 2; // Pin für Sensor Referenz aussen an der Grube (Nullstellung)
int status_sensor_referenz; // Speichervariable für Status von Sensor für Referenzfahrt
byte befehl [8];
// Statusvariablen
bool nullStellung = false; // Speichervariable ob Referenzfahrt erfolgt ist
bool referenzFahrt_b = true; // Speichervariable ob Referenzfahrt gestartet oder beendet wurde
void setup() {
pinMode(sensor_referenz, INPUT);
/Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1, address[0]);
radio.openWritingPipe(address[1]);
radio.setPALevel (RF24_PA_MAX);
radio.setDataRate (RF24_250KBPS);
radio.setChannel (110);
radio.startListening();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Drehscheiben-");
lcd.setCursor(0, 1);
lcd.print("steuerrung");
delay (2000);
}
void loop() {
// daten_empfangen();
referenzFahrt();
//encoder_lesen();
//schritte_berechnen();
//wenden();
//nothalt();
}
void referenzFahrt() {
//Serial.println(nullStellung);
//Serial.println(status_sensor_referenz);
//Serial.println(referenzFahrt);
status_sensor_referenz = digitalRead (sensor_referenz);
if ((nullStellung == false) && (status_sensor_referenz == HIGH) && (referenzFahrt_b == true)) {
referenzFahrt_b = false;
befehl[0] = 255;
radio.stopListening();
radio.write(&befehl[0], sizeof(byte));
radio.startListening();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Referenzfahrt");
lcd.setCursor(0, 1);
lcd.print("gestartet");
Serial.println(befehl[0]);
}
else if ((nullStellung == false) && (status_sensor_referenz == LOW)) {
referenzFahrt_b = true;
nullStellung = true;
befehl[0] = 254;
radio.stopListening();
radio.write(&befehl[0], sizeof(byte));
radio.startListening();
lcd.setCursor(0, 1);
lcd.print("beendet ");
Serial.println(befehl[0]);
}
}
und der Code von der Bühne:
#include <SPI.h>
#include "RF24.h"
unsigned long warteZeit;
int data[1];
boolean var = true;
//const byte addresses[][6] = {"00001", "00002"};
//const uint64_t pipe = 0xF0F0F0F0A1LL;
RF24 radio (8, 9);
byte address[] [6] = {"pipe1", "pipe2"}; // Adressen der beiden Pipes
byte rever_start = false;
const byte hal = 3;
byte schritte[1]; // 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(address[1]); // 00001
radio.openReadingPipe(1, address[0]); // 00002
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate (RF24_250KBPS);
radio.setChannel(110);
radio.startListening();
pinMode(hal, INPUT);
Serial.begin(9600);
//delay (2000);
}
void loop() {
referenzFahrt();
encoder_lesen();
schritteZaehlen();
}
void referenzFahrt() {
if (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[0] = data[0];
ergebnis = true;
// Motor
Serial.println (schritte[0]);
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[0] = data[0] - 100;
ergebnis = true;
// Motor
Serial.println (schritte[0]);
Serial.print (" Schritte nach links");
Serial.println (" ");
}
}
void schritteZaehlen () {
sensor = digitalRead (hal);
startZeit = millis();
if ((schritte[0] != 0) && (ergebnis == true)) {
start = true;
if ((startZeit - vergangeneZeit >= interval) && (sensor == LOW) && (start == true)) {
vergangeneZeit = startZeit;
schritte[0]--;
Serial.println("Drehung start");
Serial.println("Restl. Pos.");
Serial.println(schritte[0]);
radio.stopListening();
radio.write (&schritte, sizeof (schritte));
radio.startListening();
}
}
else if ((schritte[0] == 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[0]);
radio.stopListening();
radio.write (&schritte, sizeof (schritte));
radio.startListening();
//schritte[0]=0;
Serial.println(ergebnis);
}
}
Die Bühne empfängt nichts vom Sender. Kann mir jemand helfen woran es liegt?
Gruß Acki