Status LED ohne Delay, Sleep und Infrarot

Ich würde die einzelnen Bibliotheksfunktionen und Pinbelegungen erst mal separat testen, die sind für jeden Controller anders und ggf. garnicht implementiert.

Wie würde das den funktionieren wenn ich sowohl den sleep als auch die ir send Funktion ohne Bibliothek realisieren möchte

Vermutlich würde es nicht funktionieren. Und testen müßtest Du Deine Funktionen auch, also fang doch damit an.

Endlich mal erfreuliche Nachrichten. der Tiny ist heute gekommen. Erst hatte ich etwas Schwierigkeiten das PGM auf den Tiny zu laden aber nachdem ich mir dann ein kleines Schild für den UNO gelötet habe hat das ohne Probleme geklappt.
Alles hat perfekt funktioniert. Alles zum Thema IR habe ich erst mal weggelassen. Erst mal eine Baustelle nach der anderen.
Da geht's dann morgen weiter

Viel Spaß damit und nicht kapottmachen :wink:

Ich melde mich nochmal mit einem Status Update. Empfänger und Sender Funktionieren und tun was sie sollen. Danke bis dahin nochmal an alle die geholfen haben.

Beim hochladen des Empfänger Codes habe ich aber eine Warnung bekommen das 96% des Speichers ausgelastet sind und es so zu Fehlern kommen kann. Diese Warnung möchte ich nicht ignorieren und habe mich etwas eingelesen.

Die IRremote Libbrarry beinhaltet sehr viele unterschiedliche Protokolle z.b. für LEGO die nicht jeder nutzt. Ich verwende nur NEC und habe gelesen das man alle nicht benötigten Protokolle deaktivieren kann und so viel Speicher spart.

In diesem Beitrag habe ich das gelesen, werde aber nicht so ganz schlau draus wie das geht.
Englisches Forum

Es wird beschrieben:

In IRremote.h from Ken Shirriff et al, some comments at line 28 say to disable protocols you don't need:

// Supported IR protocols
// Each protocol you include costs memory and, during decode, costs time
// Disable (set to 0) all the protocols you do not need/want!

Blockquote By default, about 13 protocols are enabled and three disabled. If you only use one or two kinds of remotes, you can disable a bunch of the protocols.

Könnte mir da noch mal jemand helfen?

Der Vollständigkeit halber noch der Code des Empfängers:

#include <Arduino.h>
#include <IRremote.h>

const int G_LED = 1;    //Grüne status LED
const int Relay = 2;    //Relay
const int RECV_Pin = 0; //IR reciver

IRrecv irrecv(RECV_Pin);
decode_results results;

void setup()
{
  irrecv.enableIRIn();
  pinMode(G_LED, OUTPUT);
  pinMode(Relay, OUTPUT);
}

void loop()
{
  if (irrecv.decode(&results))
  {
    switch (results.value)
    {
    case 0x56E5FC10: //Taster wurde ausgelenkt
      digitalWrite(Relay, HIGH);
      digitalWrite(G_LED, HIGH);
    }

    switch (results.value)
    {
    case 0x8BDCABAE: //Taster in Grundstellung
      digitalWrite(Relay, LOW);
      digitalWrite(G_LED, LOW);
    }

    irrecv.resume();
  }
}

Schönes Wochenende :wave:

Also in der IRemote, die ich lese, sieht das so aus:

 * Supported IR protocols
 * Each protocol you include costs memory and, during decode, costs time
 * Disable (deactivate the line by adding a trailing comment "//") all the protocols you do not need/want!
 */

Nu ist die Frage: hast Du eine andere lib, eine veraltete lib?

In dem obigen wäre zwischen Zeile 70 und 90 auszukommentieren, was nicht gebraucht wird.

Diese Warnung kann sich nur auf das RAM beziehen. Die Protokolle belegen aber kaum RAM, abschalten dürfte also nicht besonders hilfreich sein.

Ich würde das Programm auf große Arrays und Literale untersuchen, die sich nach PROGMEM verschieben lassen.

Also das hier habe ich aus dem Forum rauskopiert.

aber ich habe die Irremote.h gefunden und genauso diese Zeilen:

Und alles bis auf Nec aus kommentiert.
Aber DrDiettrich hat recht, gebracht hat es 1% mehr an freiem Speicher.

Das verstehe ich leider so nicht, kann man das auch etwas für nicht Doktoren beschreiben? :sweat_smile:

Dann suche mal in der Referenz nach PROGMEM.

Das wird schwer :wink:
Aber ich hab mal über Deinen Code geschaut.
Bevor Du mit dem ändern von Header-Files anfängst, schau Dir einige Grundlagen an.
Dein switch-case sieht so viel besser aus und funktioniert dann auch ohne doppelten Aufruf.

void loop()
{
  if (irrecv.decode(&results))
  {
    switch (results.value)
    {
      case 0x56E5FC10: //Taster wurde ausgelenkt
        digitalWrite(Relay, HIGH);
        digitalWrite(G_LED, HIGH);
        break;
      case 0x8BDCABAE: //Taster in Grundstellung
        digitalWrite(Relay, LOW);
        digitalWrite(G_LED, LOW);
        break;
    }
    irrecv.resume();
  }
}

Kleine GuteNachtLektüre findest Du am Ende des Post als pdf.

Danke für den Link zu der

Ist schon gedruckt und lesebereit. klasse was da alles zusammengefasst wurde!
Also den switch Case habe ich nach deinem Beispiel umgebaut, der dynamische Speicher bleibt aber zu 95% belegt.
Also ich war ja selbst überrascht das diese 23 Zeilen den Speicher so dermaßen füllen können, mein Code für den Sender war ja doch etwas umfangreicher und hat wesentlich weniger benötigt.

deswegen habe mal rumprobiert wo das her kommt. Es reicht wenn ich das hier Auskommentiere: //if (irrecv.decode(&results)) um auf 56% zu kommen, so ist die Funktion des codes natürlich nicht mehr gegeben. Kann ich hier irgendwie ansetzen mit diesem flasch Speicher / PROGMEM?
Oder gibt es eine Möglichkeit auch ohne irremote.h IR Signale zu empfangen und die gesendeten Hex Codes zu decodieren?

Gibt es da nicht speziellere Methoden wie decodeNEC()?

Siehe auch Beispiel SimpleReceiver.

Laut Minimal Version Ja.
Ich habe mir die Beispiele mal angesehen werde aber nicht so ganz schlau draus

Liegt es am Englisch oder was ist Dir an den Kommentaren in SimpleReceiver nicht klar?

Der in diesem Thread gezeigte Code deutet auf die alte Bibliothek hin. Bitte alle auf die aktuelle Version aufdatieren.

Mein Vorschlag seinerzeit war, alle Methoden public zu machen, so daß sie einzeln aufgerufen und eingebunden werden können. Die allgemeine decode() Methode hätte dann in eine abgeleitete Klasse ausgelagert werden können, und dort alle Protokolle einbinden. Das sollte eigentlich nur testhalber notwendig sein, um das aktuell zu verwendende Protokoll herauszubekommen.