• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Reaktivlicht-Aktivierung mit Reed-Kontakt - Ausgabe mit siebenmaligem Blinken per LED

OP
esbrittl

esbrittl

Geocacher
Das Teil blinkt eben (fürs menschliche Auge) nur siebenmal (davon einmal doppelt so lange, nämlich ca. 400 ms), weil das eine Ausschalten nur Mikrosekunden dauert. Es fehlt ein delay(200).

Und ja, eine Schleife verkürzt den Code hier erheblich:

C++:
for (int i=0; i<8; i++){
  digitalWrite (PIN_LED, HIGH);
  delay (200);
  digitalWrite (PIN_LED, LOW);
  delay (200);
}
C++:
#include <avr/sleep.h>
#include <avr/power.h>

#define PIN_LED    PCINT4
#define PIN_BUTTON PCINT3
int zaehler=0;
ISR (PCINT0_vect) {}



void setup()
{
 
    pinMode(PIN_LED, OUTPUT);
    pinMode(PIN_BUTTON, INPUT_PULLUP);

    // pin change interrupt
    PCMSK |= bit (PIN_BUTTON);
    GIFR  |= bit (PCIF); // clear any outstanding interrupts
    GIMSK |= bit (PCIE); // enable pin change interrupts
}


void loop()
{for (int zaehler = 1; zaehler < 7; zaehler = zaehler + 1)

{


    digitalWrite (PIN_LED, HIGH);
    delay (200);
    digitalWrite (PIN_LED, LOW);
    delay (200);
 
 goToSleep();
 
}

void goToSleep()

   { set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    ADCSRA = 0;            // turn off ADC
    power_all_disable();  // power off ADC, Timer 0 and 1, serial interface
    sleep_enable();
    sleep_cpu();
    sleep_disable();
    power_all_enable();    // power everything back on
}
kommt folgender Fehler:


exit status 1
'goToSleep' was not declared in this scope

Siehst Du, da hapert es mit meinem Verständnis.
 
Zuletzt bearbeitet von einem Moderator:

schatzi-s

Geowizard
Siehst Du, da hapert es mit meinem Verständnis.

Ne, mit Deinen Klammern ;-) Zaehle mal nach, wie viele Du oeffnest und wie viele Du schliesst ...

Dem Compiler ist es egal, in welcher Spalte eine Klammer steht und wie viele Leerzeichen vor einem Befehl stehten (bei Processing, es gibt Programmiersprachen, da ist das anders).

Und so gibt es verschiedene Varianten, wie man einen Sketch formatiert. Finde Deinen Weg, aber achte darauf, dass er es Dir ermoeglicht, auf einen Blick zusammengehoerende Klammern zu erkennen und ruecke nach einer geoffneten Klammer die Befehle weiter nach rechts ein und nach jeder geschlossenen gehst Du wieder zurueck nach links. Dann erkennt man die von den Klammern umschlossenen Bloecke sehr schnell.
Dich hat eine fehlende Klammer schon geaergert, was meinst Du, wie gross der Aerger ist, wenn die Klammer da ist, aber an der falschen Stelle und z. B. Dein Sleep Befehl Teil der Schleife waere und der Prozessor schon nach dem ersten Blinken schlafen wuerde ...

Irgendwie kann die Arduino IDE einen Sketch automatisch formatieren, aber ich nutze dieses Feature nicht, weil ich meine eigene Formatierung nutze.
 

schatzi-s

Geowizard
Ich kann doch nur etwas abwandeln, wenn ich das Prinzip verstehe, sonst stochere ich doch nur blind rum und das macht keinen Spaß weil das Ergebnis dann so schlecht reproduzierbar ist.
das ist nur am Anfang so ... Irgendwann kann man fremde Programme in fremden Programmiersprachen lesen und veraendern (ok, zumindest bei normalen Sprachen).

Und für mich ein großer Schritt, weil ich doch auch schon etwas älter bin und sehr viel um die Ohren habe und ich einfach mir ein Erfolgserlebnis verschafft habe.
sage ich doch: ein grosser Schritt fuer Dich! Uebrigens: Graue Haare habe ich auch ;-)
Ok, ich habe auch schon vor ueber 40 Jahren mit dem Kram angefangen und habe vielleicht etwas Vorsprung (wobei meine Programmierfaehigkeiten irgendwie um die Jahrtausendwende stehen geblieben sind (bzw. sich seit dem zurueck entwickeln)).
Ich programmiere nur noch Kleinigkeiten und lasse mir immer mehr von ChatGPT helfen.

Aber Du hast insofern Recht, ich löse gerne ?-Caches, auch von weiter weg, nur um des Rätsels willen, abholen tue ich mir die so gut wie nie.
das geht mir auch so. Aber dann muss mich das Raetsel auch reizen. Details von fuer mich uninteressante Themen muss ich nicht googeln ... (und ChatGPT luegt, aeh hallunziniert zu oft.

Ich habe mir noch einen Tiny AVR Programmer bestellt um diese Steckerei vom Arduino zu umgehen, mit dem werde ich dann weiterlernen, blockiere mich aber nicht falls ich noch mal einen ATtiny programmieren will.
Kann der dann auch andere AVRs programmieren? Bei den kleinen 8 Pin Controllern stoesst man schnell an deren Grenzen. Da ist ein Breadboard vielleicht flexibler. Nachdem das mit dem Arduino klappt, kannst Du Dir ja auch einen weiteren Clone kaufen und damit Controller programmieren.


Wenn ich darf, werde ich Dich weiter wegen irgendwelcher Dinge nerven.
klar, wenn ich keine Lust mehr habe, wirst Du es merken


Ich würde auch wahnsinnig gerne so was hier machen:

Agent Chopper und der verlorene Code Rätsel-Geocaches​

GC48F97
Also die Sache mit dem "Büro" (http://www.aspelin.com/agent-z/buero.php)
zuviel Ein- und Ausgabe, da bin ich raus ;-) Ich programmiere lieber ohne Benutzeroberflaeche ;-)

Kennst Du Dich evtl. auch mit alten 486ern aus?
Habe an meinem Retro-Schätzchen die leere onboard Batterie gegen eine externe getauscht, aber nun muss ich anscheinend mein CD Laufwerk neu hinzufügen. Aber er meckert auch dass er kein operating system findet, obwohl mir im BIOS die Festplatte angezeigt wird. Habe leider keine Disketten , war damals ein Präsent von einem mittlerweile entfernten Bekannten.
Aus der Ferne schwer zu beurteilen. Abgesehen von Festplatte kaputt oder kein OS drauf, kann ich mich daran erinnern, dass frueher das BIOS eine Festplatten auch mal falsch erkannt hat. Dann stimmte zwar die Groesse, aber die Anzahl der Sektoren und was es da noch alles gab, war falsch. Da musste man dann rumprobieren, bis es funktionierte.

Unabhaengig davon sollte das CD Laufwerk (ich nehme an, es ist IDE und stammt aus der Zeit) natuerlich erkannt werden.
 

schatzi-s

Geowizard
Das ist er ja derzeit (hoffentlich ungewollter weise) auch, aber wenn die fehlende schließende Klammer richtig gesetzt wird, kann es ja noch was werden.;)
Was fuer ein Zufall, dass ich genau dieses Beispiel erwaehnt habe ;-)

Im Ernst: Manchmal (fast immer?!) ist es besser und deutlich schneller zu finden, wenn eine Klammer fehlt, als wenn sie falsch gesetzt ist. Nicht zu vergessen, dass der Compiler den Fehler sofort findet. In einem komplexen Programm kann es Monate und laenger dauern, bis eine falsche Klammer ueberhaupt einen Fehler erzeugt, weil der Programmteil vorher nie genutzt (und getestet) wurde ...
 
OP
esbrittl

esbrittl

Geocacher
genauso wie dem Strom die Kabelfarben egal sind. Trotzdem hilft es ungemein, wenn einem das selbst nicht egal ist...

Falls ich zu viel gespoilert habe, lösche ich meinen Beitrag gerne wieder. ;)
Das stimmt allerdings. habe ioch an dem Brett gemerkt, bei so paar Kabeln geht es noch, aber dann sollte man doch auf die "richtigen" Farben achten.

Vielen Dank, die Klammer habe ich in der Tat vermutet jedoch nicht gefunden und
@ schatzi-s die Idee mit dem Einrücken merke ich mir.

Der Tiny AVR kann nur die Kleinen, aber hey, ich habe gerade erst begonnen, okay 40 Jahre werde ich wohl nicht mehr haben aber so what

Schade, (Agent Chopper) muss ich mich auch noch mit Java rumschlagen?
 

jennergruhle

Geoguru
Dem Compiler ist es egal, in welcher Spalte eine Klammer steht und wie viele Leerzeichen vor einem Befehl stehten (bei Processing, es gibt Programmiersprachen, da ist das anders).
Ja, Python ist so eine zickige Diva - ein Leerzeichen zu viel, und schon ist alles nicht mehr lauffähig. Bei Python wollte man die geschweiften Klammern für die Codeblöcke nicht haben - und arbeitet stattdessen mit Einrückungen per Leerzeichen oder Tabulatoren. Was sehr fehleranfällig ist, wenn man nicht pingelig genau darauf achtet.

Irgendwie kann die Arduino IDE einen Sketch automatisch formatieren,
Ja, ich meine es war Strg-T. Damit werden die Einrückungen automatisch gesetzt - und man findet schneller heraus, wo man geschweifte Klammern falsch hat.
Aber so etwas wie:
C++:
void loop()
{for (int zaehler = 1; zaehler < 7; zaehler = zaehler + 1)

{
sieht abgesehen davon so komisch aus (Klammer an der völlig falschen Stelle - nicht am Ende nach loop(), sondern vor dem for), dass ich hierbei nur vermuten kann, dass Strg-T in der Arduino-IDE das nicht behebt. Das formatiert nämlich nicht komplett neu (wie es manch andere IDEs à la Eclipse, Visual Studio, IntelliJ IDEA etc. je nach Sprache und Regeln vollautomatisch tun), sondern justiert nur die Tabulatoren.
 
OP
esbrittl

esbrittl

Geocacher
so, der sparkfun tiny programmer ist gekommen und er funktioniert tadellos. Damit habe ich meinen Arduino wieder frei für weitere Lektionen.
 
Oben