INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
IR SENDER & EMPFÄNGER
25.09.2014, 19:27
Beitrag #1
IR SENDER & EMPFÄNGER
Hey Leute Wink

Ich habe eine Frage hat jemand schonmal versucht über Infrarot etwas in einem speziellen Protokoll zu senden?

Ich nutze als Empfänger diesen code:

Code:
#include "IRLremote.h"


const int interruptIR = 0;                                    // ARDUINO PIN 2

void setup() {
  Serial.begin(9600);
  Serial.println("Empfangstest");

  IRLbegin<IR_USER>(interruptIR);
}

void loop() {
  

    
  if (IRLavailable()) {
    
    if ((IRLgetCommand()) == 57375) {
      
      Serial.println("on");
      
    }
    
    if ((IRLgetCommand()) == 24735) {
      
      Serial.println("off");
      
    }


Das Problem ist ich finde leider nichts mit dem ich im passenden Protokoll senden kann.

Ich wollte eigentlich nur über eine IR Diode dauerhaft senden irgendein signal ...
Und dann mit einem IR Emitter nur unterscheiden zwischen IR Signal vorhanden oder nicht vorhanden.

Aber das Problem ist das ich ja momentan irgendwas sende siehe code :

Code:
#include "IRLremote.h"

const int pinSendIR = 3;

void setup() {
}

void loop() {
    uint16_t address = 1;
    uint32_t command = 0xAFFF;
    IRLwrite(pinSendIR, address, command);

    delay(100);
  }


Und der Empfänger code das leider null registriert ....

Hat jemand eine Idee oder tipp?

Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.09.2014, 10:41
Beitrag #2
RE: IR SENDER & EMPFÄNGER
Hi,
schreib mal Deinen Empfaenger-Code so um, dass er einfach alles, was er empfaengt, ueber Serial ausgibt. Dann siehst Du, ob wenigstens irgend etwas ankommt.
Ausserdem: Was macht der Parameter "address"?
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.09.2014, 10:55
Beitrag #3
RE: IR SENDER & EMPFÄNGER
Hey Wink

Also ich habe den ursprünglichen code aus einem Beispiel den hier:

Code:
/*
Copyright (c) 2014 NicoHood
See the readme for credit to other people.

IRL Send Button
Sends IR signals on any pin. This uses Bitbanging.
Press the button to send data.
Turn interrupts off to get a better result if needed
*/

#include "IRLremote.h"

const int pinSendIR = 3;
const int pinButton = 8;

void setup() {
  pinMode(pinButton, INPUT_PULLUP);
}

void loop() {
  if (!digitalRead(pinButton)) {
    // send the data, no pin setting to OUTPUT needed
    uint16_t address = 0xC686;
    uint32_t command = 0x7F80;
    IRLwrite(pinSendIR, address, command);

    // simple debounce
    delay(300);
  }
}


etwas verkürzt da ich ja dauerhaft etwas senden wollte das mein Empfänger auch auswerten kann ohne immer auf einen Button drücken zu müssen.

Code:
#include "IRLremote.h"

const int pinSendIR = 3;

void setup() {
}

void loop() {
    uint16_t address = 1;
    uint32_t command = 0xAFFF;
    IRLwrite(pinSendIR, address, command);

    delay(100);
  }


##################################################

Als Empfängercode habe ich einige getestet leider zeigen die mir nur dann etwas sinnvolles an wenn das passende Protokoll zum empfangen angegeben ist (glaube ich).
In der readme.txt des library Autors stehen nur 2 Protokolle: NEC und Panasonic. Weitere sollen wohl irgendwann fogen.

hier der original Empfangs code:

Code:
/*
Copyright (c) 2014 NicoHood
See the readme for credit to other people.

IRL ReceiveAdvanced
Receives IR signals with custom decoding function and blocks until the data is read.
*/

#include "IRLremote.h"

// See readme to choose the right interrupt number
const int interruptIR = 0;

void setup() {
  Serial.begin(115200);
  Serial.println("Startup");

  // set protocol to user to use the decode function below
  IRLbegin<IR_USER>(interruptIR);
}

void loop() {
  // This will get the first valid input, blocks and ignores any new until its read
  if (IRLavailable()) {
    // Print as much as you want in this function
    // See source to terminate what number is for each protocol
    Serial.print("Protocol:");
    Serial.println(IRLgetProtocol());
    Serial.print("Address:");
    Serial.println(IRLgetAddress(), HEX);
    Serial.print("Command:");
    Serial.println(IRLgetCommand(), HEX);

    // Resume reading to get new values
    IRLreset();
  }
}

void decodeIR(const uint32_t duration) {
  // Called when directly received and interrupt CHANGE
  // Do not use Serial inside, it can crash your Arduino!

  // add the protocols you want to use here to reduce flash/ram/performance
  // you can use this to decode e.g. two remotes at the same time
  // but dont need to check all other protocols
  // calling this function takes some small overhead though
  decodeNec(duration);
  decodePanasonic(duration);
}


Am besten wär es natürlich wenn ich definierte Sachen senden könnte wie über die Serielle Schnittstelle.

Und am Empfänger das dann ganz normal auswerten (vergleichen).

//

Falls das aber alles viel zu umständlich ist würde mir auch eine einfache Unterscheidung zwischen ir signal vorhanden und kein ir signal ausreichen.

Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.09.2014, 12:30
Beitrag #4
RE: IR SENDER & EMPFÄNGER
Hi,
ich bin jetzt verwirrt. Hast Du irgendein Coding, welches irgend etwas erfolgreich ueber die Schnittstelle schickt?
Mit "erfolgreich" meine ich nicht unbedingt, dass der Empfaenger auch versteht, was der Sender macht, sondern einfach dass etwas ankommt.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.09.2014, 12:57 (Dieser Beitrag wurde zuletzt bearbeitet: 26.09.2014 12:59 von Marc2014.)
Beitrag #5
RE: IR SENDER & EMPFÄNGER
Also dieser code empfängt von zb einer RGB Led China fernbedindung:

Code:
#include "IRLremote.h"

// See readme to choose the right interrupt number
const int interruptIR = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("Startup");

  // set protocol to user to use the decode function below
  IRLbegin<IR_USER>(interruptIR);
}

void loop() {
  // This will get the first valid input, blocks and ignores any new until its read
  if (IRLavailable()) {
    // Print as much as you want in this function
    // See source to terminate what number is for each protocol
    Serial.print("Protocol:");
    Serial.println(IRLgetProtocol());
    Serial.print("Address:");
    Serial.println(IRLgetAddress(), HEX);
    Serial.print("Command:");
    Serial.println(IRLgetCommand(), HEX);

    // Resume reading to get new values
    IRLreset();
  }
}

void decodeIR(const uint32_t duration) {
  // Called when directly received and interrupt CHANGE
  // Do not use Serial inside, it can crash your Arduino!

  // add the protocols you want to use here to reduce flash/ram/performance
  // you can use this to decode e.g. two remotes at the same time
  // but dont need to check all other protocols
  // calling this function takes some small overhead though
  decodeNec(duration);
  decodePanasonic(duration);
}

Das Empfangene sieht so aus:

Protocol:3
Address:FF
Command:E01F

################################

Dann habe ich noch etwas ganz "rohes" und zwar diesen Sender code:

Code:
#include "IRLremote.h"

const int pinSendIR = 3;

void setup() {
}

void loop() {
    uint16_t address = 1;
    uint32_t command = 0xAFFF;
    IRLwrite(pinSendIR, address, command);

    delay(100);
  }

Dazu diesen Empfängercode:

Code:
#include "IRLremote.h"

const int interruptIR = 0;
const int led =13;                                

#define IR_RAW_TIMEOUT 500
#define IR_RAW_BUFFER_SIZE 100
uint32_t buffer[IR_RAW_BUFFER_SIZE];
uint8_t count = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("Startup");
  pinMode(led, OUTPUT);
  
  digitalWrite(led, HIGH);
  delay(2000);
  digitalWrite(led, LOW);

  IRLbegin<IR_USER>(interruptIR);
}

void loop() {
  uint8_t irBytes = RAWIRLavailable();
  if (irBytes) {

    for (int i = 0; i < irBytes; i++) {
      Serial.print(i);
     if ((buffer[i]) > 700) {
      
       digitalWrite(led, HIGH);
      
     } else {
      
       digitalWrite(led, LOW);
     }
    
         //  Serial.print(i);
           Serial.println(buffer[i]);
          
           delay(10);
          
           digitalWrite(led, LOW);

    
    
   }

    count = 0;
  }
}

void decodeIR(const uint32_t duration) {
  
  if (RAWIRLavailable()) return;

  buffer[count++] = duration;

  if (count != IR_RAW_BUFFER_SIZE)
    buffer[count] = micros();
}

uint8_t RAWIRLavailable(void) {
  uint8_t oldSREG = SREG;
  cli();

  if (count) {
    if (count == IR_RAW_BUFFER_SIZE) {
      SREG = oldSREG;
      return count;
    }

    
    if (buffer[count - 1] > IR_RAW_TIMEOUT) {
      SREG = oldSREG;
      return count;
    }

    unsigned long duration = micros() - buffer[count];
    if (duration > IR_RAW_TIMEOUT) {
      buffer[count++] = duration;
      SREG = oldSREG;
      return count;
    }
  }

  SREG = oldSREG;
  return 0;
}

Das empfangene sieht so aus:

04621496
04572
01736
0616
01736
0600
01736
0116496
04584
01732
0620
01740
0600
01740
0116532
04568
01732
0616
01732
0608
01744
0116528
04564
01740
0620
01736
0600
01744
0116532
04568
01732
0616
01732
0608
01744
0116528
04564
01736
0612
01736
0600
01744


Aber das kann ich nicht gescheit auswerten da das total wirre zahlen sind.

Habe schon versucht das mit in etwa so zu machen:

Code:
if ((buffer[i]) > 0)  {
            
           digitalWrite(test, HIGH);
           Serial.println(buffer[i]);
           delay(1000);
           count = 0;
      
           } else {
    
           digitalWrite(test, LOW);
           Serial.println(buffer[i]);
           delay(100);
           count = 0;

        }


Gruß Marc Smile

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.09.2014, 13:09
Beitrag #6
RE: IR SENDER & EMPFÄNGER
Hi,
ich glaube, dass Dein "roher" Empfaengercode gar nichts enthaelt, was wirklich vom IR Empfaenger empfaengt. Da fehlt doch noch einiges, oder?
Wo hast Du das her?
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.09.2014, 13:21
Beitrag #7
RE: IR SENDER & EMPFÄNGER
Also wenn ich den Empfänger mit der hand zuhalte dann kommt so etwas im Terminal an:

00
00
00
00
00
00
00
00
00

Daher dachte ich das die Zeichen empfangen werden ?!

PS. den hab ich irgendwo im Netz gefunden Big Grin

Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.09.2014, 13:46
Beitrag #8
RE: IR SENDER & EMPFÄNGER
Hi,
jetzt habe ich's kapiert. Die Funktion decodeIR wird von der Lib im Interrupt aufgerufen. Die Zahlen sind im Prinzip Mikrosekunden zwischen zwei Pulsen. Wahrscheinlich bekommst Du nicht wirklich alle mit und ausserdem gibt es eine gewisse Streuung.
Soweit ich das im Coding (der Lib) sehe, ist nur das "NEC"-Protokoll wirklich unterstuetzt (fuer's Schreiben). Setze mal auf beiden Seiten das Protokoll auf NEC und probier's damit.
Ich habe den Eindruck, dass die Lib noch relativ neu ist. Vielleicht ist das Teil noch gar nicht ganz fertig.
Hier gibt's eine andere Lib, vielleicht klappt's damit:
https://www.pjrc.com/teensy/td_libs_IRremote.html.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  DCF77 Empfänger paq 19 912 23.07.2016 17:16
Letzter Beitrag: rkuehle
  Empfänger RF 433 peterfried 6 367 10.06.2016 23:01
Letzter Beitrag: hotsystems
  AKtuelle Uhrzeit bekommen, RTC oder DFC-Empfänger Cray-1 34 15.550 11.02.2016 23:49
Letzter Beitrag: hotsystems
  DMX Empfänger BennIY 12 2.205 24.09.2015 19:51
Letzter Beitrag: BennIY
  Sender 315 Mhz bergfrei 3 622 23.09.2015 16:55
Letzter Beitrag: hotsystems
  DMX Sender fraju 5 2.024 29.05.2015 09:10
Letzter Beitrag: fraju
  Hilfe bei RC-Empfänger Signale auswerten und verarbeiten Pat12-6 7 1.677 19.03.2015 20:17
Letzter Beitrag: Eichner
Wink Bitte helft mir: RC Empfänger auslesen und an Motortreiber weitergeben. christian@schiltkamp.info 7 3.937 15.03.2015 17:54
Letzter Beitrag: Pat12-6
  RC-Empfänger auslesen und Motoren steuern Pat12-6 0 972 14.03.2015 10:29
Letzter Beitrag: Pat12-6
  Auto Level Quadrocopter (Modellbau Empfänger) Neumi 12 1.700 20.01.2015 13:47
Letzter Beitrag: Eichner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste