ich möchte gerne einfach meinen Controller nach dem Setup in den Powerdown schicken und bei jedem Pinchange am Pin3 Interrupt Pin 1 wieder aufwecken und die Nachricht ("SEND") ausgeben lassen. Das klappt aber gar nicht und er meldet immer nur beim ersten Tastendruck SEND und mehr nicht.
Vielleicht hat ja einer einen Tipp woran es liegen kann. Vielen Dank.
Du solltest an Deinen Einrückungen arbeiten, das ist so kaum zu lesen.
Du schickst den Controller in der ISR schlafen. Danach wird er nicht wieder aufwachen, denn in der ISR ist der auslösende Interrupt erst einmal gesperrt. Selbst wenn er aufwachen würde (z.B. weil Du die Interrupts explizit wieder erlaubst) würde das mit der Zeit den Stack zumüllen.
Besser wäre es die ISR leer zu lassen und stattdessen die Arbeit in loop() zu erledigen.
okay mit dem Code kann man besser machen. Aber ich habe das Problem das ich nur mit dem externen Interrupt den Controller aufwecken will. Kannst du mir nicht den Quellcode anpassen?
Du wolltest einen Tipp haben. Den hast Du bekommen. In meiner Antwort steht drin wie es geht. Wenn Du es versuchst und dann nicht weiter kommst, dann frag nochmal.
Genau so funktioniert das. Tipp kriegen, selber lösen, was dabei lernen und dann das Ergebnis posten. Vorbildlich
Du kannst das sleep_disable aus der ISR weglassen. Der Controller ist ja schon wach. Von selber schläft der nicht wieder ein.
so ich habe nun ein erweiterungsproblem. Mit dem Interrupt kriege ich es ja hin, das er mir beim Tastendruck wechselt. Nun möchte ich aber gerne dadurch einen Timer für 15min starten, den Controller bis zum nächsten Interrupt in den Schlaf schicken und nach 15min soll er aufwachen und einen Serielle Ausgabe machen. Geht das? Wenn ja wie?
Der Arduino hat keinen Timer der so ohne weiteres auf 15 Minuten kommt. Die übliche Lösung ist einen Timer so einzustellen, daß der Arduino alle paar Sekunden kurz aufwacht und dabei mitzuzählen wie oft das schon passiert ist. Daraus ermittelt man die abgelaufene Zeit. Wenn die 15 Minuten voll sind dann kann man reagieren.
Du könntest auch versuchen den Takt abzusenken, die Prescaler hochzudrehen und die Timer zu verketten, d.h. einen Timer benutzen als PWM, den entsprechenden Pin auf den Eingang eines anderen Timer. Damit bekommt man nochmal 8bit mehr muß aber 2Pins dafür opfern.
also ich würde da Variante 1 bevorzugen. Zur Zeit habe ich das andere SKetch angepasst und fülle damit ein Struct alle paar Sekunden. Nun möchte ich aber immer in der Zeit in den Sleep-Mode gehen, wo kein Interrupt kommt und alle 3 min wieder aufwachen um im Struct eine Zelle weiterzuspringen. Vielleicht hat ja jemand einen Tipp? Wäre dankbar für ein Timer Interrupt Sketch. Gruß kami