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
Bau an verschiedene Stellen serielle Ausgaben ein die alle anders sind. Ggf gibt es an einer Stelle einen reset. Gruß JackFrost
Wenn Setup scheinbar in einer Schleife immer wieder aufgerufen wird, erfolgt kurz davor immer ein Reset. Entweder Watchdog oder in die Irre geleiteter Interrupt.
Bastian W. schrieb: > Bau an verschiedene Stellen serielle Ausgaben ein die alle anders > sind. > Ggf gibt es an einer Stelle einen reset. > > Gruß JackFrost Danke für die schnellen Antworten, hab den Fehler eingegränzt: sobald der erste Befehl der Loop, also if (radio.ReceiveComplete()) { } aufgerufen wird, scheint der Controller zu Resetten. Ich habe den Inhalt der IF-Anweisung auskommentiert, es steht also nur noch dieser Befehl und eine serielle Ausgabe am Ende des Programms in der Loop. Letztere wird erwatrungsgemäß nicht ausgegeben. Kann das an einer defekten Bibliothek für den RFM12b Funksender liegen? Ich habe diese zwar schon erfolglos neu aufgespielt, aber dann suche ich mir die Bibliothek aus anderen Quellen. Gruß Daniel
Wingthor schrieb: > Kann das an einer defekten Bibliothek für den RFM12b Funksender liegen? Schau einfach mal in die Doku zu der Lib. Vielleicht muß man sie noch an den ATtiny84 anpasssen. Das Arduino-Zeugs ist doch oft für den ATmega328 geschrieben.
Peter D. schrieb: > Wingthor schrieb: >> Kann das an einer defekten Bibliothek für den RFM12b Funksender liegen? > > Schau einfach mal in die Doku zu der Lib. Vielleicht muß man sie noch an > den ATtiny84 anpasssen. > Das Arduino-Zeugs ist doch oft für den ATmega328 geschrieben. Hab ich schon überprüft, das ist schon eine angepasste Bibliothek. Ich hab nochmal nachgeschaut, bei anderen Leuten, die mit der Bibliothek gearbeitet haben, gab es diese Probleme scheinbar nicht.
hm..... klingt als würde in loop() irgend eine Funktion einen Kurzschluss verursachen, der den Prozessor resettet ???
die läuft eigentlich einwandfrei.Es gibt aber mehrere Quellen davon. Ist ja eigentlich alles von Nathan. Kann Dir meines gern mal schicken.
Wingthor schrieb: > obald das Hauptprogramm wieder aktiviert wird, läuft das Setup wieder > als Schleife. Habe zum Testen eine UART-Ausgabe ins Setup eingebaut. > Hier mein Programm: Du solltest nicht Dein nennen, was nicht DEIN ist ! https://raspberry.tips/wp-content/uploads/2014/11/Receiver_PI.ino
P.S. Weißt du noch, wo du die Bibliotheken für das oben verlinkte Projekt her hast? Genau mit diesem Quellcode entsteht bei mir der Fehler...
So, läuft jetzt alles, wie es soll. Der Fehler lag scheinbar im Boardmanager für Die ATtiny-Controller. Ich habe diesen Manager: http://drazzy.com/package_drazzy.com_index.json installiert, jetzt funktionieren Sender und Empfänger!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.