Go Down

Topic: 433 MHZ Empfänger - kein Signal (Read 622 times) previous topic - next topic

unamx

Aug 10, 2018, 03:44 pm Last Edit: Aug 11, 2018, 02:27 pm by unamx
Hallo,
ich habe mich schon durch das Forum gelesen aber noch keine richtige ASntwort erhalten.  :(

Aufbau
Ein Arduino Nano sendet Daten an einen anderen Arduino Nano - beide Module sind per Pin2 (Interrupt 0) angeschlossen. Beim Senden mit Arduino 1 leuchtet die TX LED kurz auf, RX-LED bei Arduino 2 jedoch nicht. Arduino 2 gibt auch keine Daten per serieller Konsole aus. Versorgungsspannung an beiden Module n i.O.
verwendetes Modul:
FS1000A mit angelötetet Drahtantenne

Anbei der Code vom Sender:
Code: [Select]
#include <VirtualWire.h>
#include <VirtualWire_Config.h>


//define LED
int notenNr = 0;
int noten[] = { 440, 585};
int dauer[] = { 600, 600};

int errorcounter = 0;
unsigned long aktuell = 0;
unsigned long tonBeginn = 0;
unsigned long tonDauer = 0;

const int ledgreen = 12;
const int ledred = 11;
const int detectwire = 10;
const int buzz = 9; //buzzer to arduino pin 9
int val = 0;       // variable to store the read value
unsigned long currentmillis = 0;
unsigned long previousmillis1 = 0;
unsigned long previousmillis2 = 0;
unsigned long interval = 1000;    // Interval zwischen zwei Änderungen

int wireState = 0;         // current state of the button
int lastWireState = 0;     // previous state of the button


void setup() {
  Serial.begin(9600);
  // virtual wire
  vw_set_tx_pin(0); // pin
  vw_setup(8000); // bps
 
  //TX LED green
  pinMode(ledgreen, OUTPUT);
  pinMode(ledred, OUTPUT);
  pinMode(detectwire, INPUT);        // sets the digital pin 7 as input
  pinMode(buzz, OUTPUT); // Set buzzer - pin 9 as an output
  digitalWrite(ledgreen, LOW); // LED aus
  digitalWrite(ledred, LOW);    // sets the LED to the button's value
  digitalWrite(ledgreen, HIGH); // LED anschalten für Betrieb
}

void loop() {
  sendString("message", true);
  aktuell = millis();
  wireState = digitalRead(detectwire);

  // compare the buttonState to its previous state
  if (wireState != lastWireState) {
    if (wireState == LOW){
      Serial.println(errorcounter);
      digitalWrite(ledred, HIGH);     //LED rot an bei Kontakt mit heissem Draht bzw. Massepotential
      errorcounter=errorcounter+1;
      //alarm();   
     
    }
    else {
      digitalWrite(ledred, LOW);    // LED rot aus
    }
  }
  lastWireState = wireState;
}

void sendString(String message, bool wait)
{
  byte messageLength = message.length() + 1;

  // convert string to char array
  char charBuffer[messageLength];
  message.toCharArray(charBuffer, messageLength);

  vw_send((uint8_t *)charBuffer, messageLength);

  if (wait) vw_wait_tx();

  Serial.println("sent: " + message);
}

void alarm (){
  if(aktuell - tonBeginn > tonDauer )
  {
     tone(buzz, noten[notenNr] );
     tonDauer = dauer[notenNr];

     notenNr++;
     if( notenNr == 2 )
       notenNr = 0;

     tonBeginn = aktuell;
  }
}



Empfänger:
Code: [Select]
#include <VirtualWire.h>
#include <VirtualWire_Config.h>


#include <LiquidCrystal_I2C.h>

//0x3F
//Libraries
#include <Wire.h>
//Init
LiquidCrystal_I2C lcd(0x3F, 20, 4); // Set the LCD I2C address, if it's not working try 0x27

byte message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages
byte messageLength = VW_MAX_MESSAGE_LEN; // the size of the message

//global var
int state = 0; //set state FSM

// Ports RelayPort
int sw1 = 3;
int sw2 = 4;

// Which pins are connected to which LED
const byte greenLED = 6 ;
const byte redLED = 5 ;

// Variable holding the timer value so far. One for each "Timer"
unsigned long greenLEDtimer = 0 ;
unsigned long redLEDtimer = 0 ;

// Time periods of blinks in milliseconds (1000 milliseconds to a second).
// Time variable and constants are always unsigned long
const unsigned long greenLEDinterval = 555UL ;
const unsigned long redLEDinterval = 1234UL ;

// Variable to know what the current LED state is
int greenLEDState = LOW ;
int redLEDState = LOW ;

//LCD
unsigned long previousMillis2 = 0;        // will store last time LED was updated
unsigned long ledMillis = 0;      // Zeit für den Blinkrythmus der LED

//LESE Fehler am Draht
unsigned long previousmillis1 = 0;
unsigned long previousmillis2 = 0;
unsigned long previousmillis3 = 0;
unsigned long previousmillis4 = 0;
unsigned long interval = 500;    // Interval zwischen zwei Änderungen
unsigned long intervalism = 200;    // Interval zwischen zwei Änderungen
unsigned long intervalled = 500;    // Interval zwischen zwei Änderungen
int count = 0;

const long intervallcd = 600;           // interval at which to blink (milliseconds)
const long intervalls = 50;           // interval at which to blink (milliseconds)
const long flanke = 100;

// Variables will change:
int ledState = LOW;             // ledState used to set the LED
int flankenState = LOW;
bool start = false;
bool fehler = false;
bool pause = false;
bool detectededge = false;
bool blinking = false;
int errorcounter = 0;
int firsterror = 0;
int relayiterator = 0;
int receivedvalue = 0;
int lasterror = 0;

//TASTER Stati
int starter = LOW;
int clearer = LOW;
long lastDebounceTime1 = 0;  // the last time the output pin was toggled
long lastDebounceTime2 = 0;  // the last time the output pin was toggled
long lastDebounceTime3 = 0;  // the last time the output pin was toggled
long lastDebounceTime4 = 0;  // the last time the output pin was toggled
long lastDebounceTime5 = 0;  // the last time the output pin was toggled
long debounceDelay = 400;    // the debounce time; increase if the output flickers

int starterpin = 8;
int clearerpin = 7;


///////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600);
  Serial.println("device is ready...");

  vw_set_rx_pin(0);
  vw_setup(8000); // bps
  vw_rx_start();
 
  lcd.begin();   // iInit the LCD for 16 chars 2 lines

  //Relay
  pinMode(sw1, OUTPUT);
  pinMode(sw2, OUTPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  digitalWrite(sw1, HIGH);      // schaltet LED1 an
  digitalWrite(sw2, HIGH);      // schaltet LED1 an
  digitalWrite(greenLED, HIGH);      // schaltet LED1 an
  digitalWrite(redLED, HIGH);      // schaltet LED1 an

  //State machine == 1
  state = 1;
  //
  firsterror = 0;
  Serial.println("Starting");
}

void loop() {
  //get current system time
  unsigned long currentLS1Millis = millis();
  unsigned long currentLCDMillis = millis();

  //Taster Status beziehen
  starter = digitalRead(starterpin);
  clearer = digitalRead(clearerpin);
 
  if (vw_get_message(message, &messageLength)) // non-blocking
  {
    Serial.print("received: ");
    for (int i = 0; i < messageLength; i++)
    {
      Serial.write(message[i]);
    }
    Serial.println();
  }
}


Vielen Dank für Deine hilfe!

HotSystems

Dein Sketch ist fast nicht zu lesen. In einem Mobilgerät überhaupt nicht.
Setze den bitte in Code-Tags.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.


Damit wird dieser für alle besser lesbar.

Quote ist da völlig falsch!

Und der FS1000A ist ein Sender, kein Empfänger.
Damit kannst du kein Signal empfangen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

postmaster-ino

Hi

Bevor Du Deinen Sketch erneut hier einbringst - Du kannst JEDEN Deiner Posts auch JEDERZEIT editieren - statt der [ quote ] nimmst Du [ code ].
(als Neuling nur im 5-Minuten-Intervall - unschön, aber immerhin)

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

HotSystems

#3
Aug 10, 2018, 06:11 pm Last Edit: Aug 10, 2018, 09:23 pm by HotSystems
Hi

Bevor Du Deinen Sketch erneut hier einbringst - Du kannst JEDEN Deiner Posts auch JEDERZEIT editieren - statt der [ quote ] nimmst Du [ code ].
(als Neuling nur im 5-Minuten-Intervall - unschön, aber immerhin)

MfG
Nicht jeden, da gibt es auch Begrenzungen und Unterschiede.

Und, hat der TO seinen Fehler gefunden ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

unamx

Danke für den Tipp mit dem  Code-Tag, habe es mal geändert.
Ich habe leider kein Oszi um mir die Signal des 433 MHz Senders bzw. Empfänger anzuschauen....

HotSystems

#5
Aug 11, 2018, 02:35 pm Last Edit: Aug 11, 2018, 02:53 pm by HotSystems
Danke für den Tipp mit dem  Code-Tag, habe es mal geändert.
Ich habe leider kein Oszi um mir die Signal des 433 MHz Senders bzw. Empfänger anzuschauen....
Du musst dir das erst mal nicht ansehen, sondern nur richtige Module einsetzen.
Wie ich schon geschrieben habe, der FS1000A ist ein Sender, kein Empfänger.

Und wenn du dir nicht sicher bist, was du verwendest, dann poste ein Foto deines Aufbaus.

Na wass den nun....??
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

HotSystems

Hast du denn auch Angaben zum Empfänger, den du gern einsetzen möchtest ?
Dann kommen wir evtl. weiter. So wird das sonst nix.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

MagicBird

Hallo,

also erstmal würde ich mir eine Empfangsmöglichkeit zulegen, einen einfachen Scanner oder ein dvb-t stick um sdr zumachen.
Du weisst ja nicht einmal ob und was gesendet wird.

Lars

HotSystems

also erstmal würde ich mir eine Empfangsmöglichkeit zulegen, einen einfachen Scanner oder ein dvb-t stick um sdr zumachen.
Du weisst ja nicht einmal ob und was gesendet wird.
Ich befürchte, selbst das bekommt der TO nicht hin.
Er kann ja noch nicht mal auf Fragen antworten.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

unamx

#9
Aug 13, 2018, 05:47 pm Last Edit: Aug 13, 2018, 05:48 pm by unamx
Du musst dir das erst mal nicht ansehen, sondern nur richtige Module einsetzen.
Wie ich schon geschrieben habe, der FS1000A ist ein Sender, kein Empfänger.

Und wenn du dir nicht sicher bist, was du verwendest, dann poste ein Foto deines Aufbaus.

Na wass den nun....??

Der FS1000A ist ein Sender, das ist mir klar. Er ist am Arduino 1 angeschlossen und hot schon einmal korrekte Daten gesendet, die ich mit dem MX-RM-5V am Arduino 2 empfangen konnte. Aus unerklärlichen Gründen kann ich jedoch nun keine Daten mehr empfangen. Auf den Empfänger habe ich auch nicht eingehämmrt oder sonstiges.

HotSystems

#10
Aug 13, 2018, 05:55 pm Last Edit: Aug 13, 2018, 06:43 pm by HotSystems
Der FS1000A ist ein Sender, das ist mir klar. Er ist am Arduino 1 angeschlossen und hot schon einmal korrekte Daten gesendet, die ich mit dem MX-RM-5V am Arduino 2 empfangen konnte. Aus unerklärlichen Gründen kann ich jedoch nun keine Daten mehr empfangen. Auf den Empfänger habe ich auch nicht eingehämmrt oder sonstiges.
Und warum schreibst du das nicht gleich richtig ?

Woher sollen wir das wissen ?

Was hast du seit dem geändert ?

Hast du am Empfänger auch eine Antenne dran ?

Poste ein Foto deines Aufbaus, aus dem alles sauber zu erkennen ist.
Ich hatte dich schon mal darum gebeten !

Edit:
Wenn du das mit dem oben geposteten Sketch nicht hinbekommst, dann teste es mit dem Beispielsketch aus der Library.
Da findest du evtl. besser deinen Fehler.
Und dann wäre es zukünftig besser, wenn deine Informationen etwas aussagekräftiger rüber kommen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

MagicBird

Naja das Problem würde ich mal meinen ist.
Sendet der Sender auch, weil du hast nichts zum Testen.

kauft euch alle bitte in der Sache entweder einen DVB-t Stick oder Scanner oder eben auch Funkgerät wenns nicht anders geht.

Lars

HotSystems

......

kauft euch alle bitte in der Sache entweder einen DVB-t Stick oder Scanner oder eben auch Funkgerät wenns nicht anders geht.

Meine Empfehlung ist, bessere Module kaufen und nicht so ein billigen Schrott.
Dann klappt das auch. Aber es darf ja nichts kosten und muss doch beste Qualität sein.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

MagicBird

Es geht ja einfach nur darum, um heraus zubekommen ob der Sender überhaupt sendet.
Da darf es so billig sein wie möglich.

Am besten eine LED in die Luft halten und auf eine Induktion warten.

Lars

HotSystems

Es geht ja einfach nur darum, um heraus zubekommen ob der Sender überhaupt sendet.
Da darf es so billig sein wie möglich.

Am besten eine LED in die Luft halten und auf eine Induktion warten.
Jetzt widersprichst du dir aber selbst.

Ich gebe dir ein wenig recht, aber dann sollte man aber auch verstehen, was man macht.
Das sieht man leider sehr selten, erst Recht wenn es um Funk geht.

Und dann komm bitte nicht mit dem Mist und der Led, das glaubt sonst noch jemand.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up