Gast
#4848808
Hallo
ich habe folgendes Problem:
Ich will einen Funksensor mittels einem RaspberryPi auslesen.
Das Programm, welches ich auf den Empfänger aufspiele, Funktioniert
nicht richtig. der Programmteil "void Setup" läuft als Schleife durch,
normalerweise sollte dieser Teil doch nur einmal durlaufen werden, oder?
Wenn ich den Programminhalt aus "void Loop" auskommentiere und durch
eine einfache, zyklische UART-Ausgabe (mySerial.println("TEST");)
ersetze, wird das Setup nur einmal durchlaufen und die Loop arbeitet,
wie sie soll.
Sobald das Hauptprogramm wieder aktiviert wird, läuft das Setup wieder
als Schleife. Habe zum Testen eine UART-Ausgabe ins Setup eingebaut.
Hier mein Programm:
#include <RFM12B.h>
#include <avr/sleep.h>
#include <SoftwareSerial.h>
#define NODEID 22 //network ID used for this unit
#define NETWORKID 210 //the network ID we are on
#define ACK_TIME 2000 // # of ms to wait for an ack
#define SERIAL_BAUD 9600
#define rxPin 7
#define txPin 3
#define LEDpin 8
/*
+-\/-+
VCC 1| |14 GND
(D0) PB0 2| |13 AREF (D10)
(D1) PB1 3| |12 PA1 (D9)
RESET 4| |11 PA2 (D8)
INT0 PWM (D2) PB2 5| |10 PA3 (D7)
PWM (D3) PA7 6| |9 PA4 (D6)
PWM (D4) PA6 7| |8 PA5 (D5) PWM
+----+
*/
// Initialise UART
SoftwareSerial mySerial(rxPin, txPin);
// Need an instance of the Radio Module
RFM12B radio;
static void activityLED (byte mode) {
pinMode(LEDpin, OUTPUT);
digitalWrite(LEDpin, mode);
}
// blink led
static void blink (byte pin, byte n = 3) {
pinMode(pin, OUTPUT);
for (byte i = 0; i < 2 * n; ++i) {
delay(100);
digitalWrite(pin, !digitalRead(pin));
}
}
// init Setup
void setup() {
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
mySerial.begin(SERIAL_BAUD);
mySerial.println("SETUP"); //Ausgabe auf UART beim Starten
radio.Initialize(NODEID, RF12_868MHZ, NETWORKID);
#ifdef KEY
radio.Encrypt((byte*)KEY); //comment this out to disable
encryption
#endif
if (LEDpin) {
activityLED(1); // LED on
delay(1000);
activityLED(0); // LED off
}
}
// Loop
void loop() {
if (radio.ReceiveComplete()) {
if (radio.CRCPass()) {
//node ID of TX, extracted from RF datapacket. Not transmitted as
part of structure
mySerial.print(radio.GetSender(), DEC);
mySerial.print(" ");
int i;
for (byte i = 0; i < *radio.DataLen; i++) //can also use
radio.GetDataLen() if you don't like pointers
mySerial.print((char) radio.Data[i]);
if (LEDpin) {
blink(LEDpin, 2);
}
if (radio.ACKRequested()) {
radio.SendACK();
}
} else {
mySerial.print("BAD-CRC");
if (LEDpin) {
activityLED(1); // LED on
delay(1000);
activityLED(0); // LED off
}
}
mySerial.println();
}
mySerial.println("TEST"); //UART-Ausgabe zum Prüfen der Loop
}
Danke schonmal
Viele Grüße, Daniel