2024. április 18., csütörtök

Gyorskeresés

Útvonal

Cikkek » Akármi rovat

Arduino konyhapult világítás

Egy Arduino Nano, egy MOSFET meghajtó, led szalagok, alu profilok, kábelcsatornák, 20m vezeték és egy hét szabadidő.

[ ÚJ TESZT ]

Setup()

A setup-ot teljes egészében beszúrom, mert szerintem megérdemel pár szót.
void setup() {
//watchdog config
byte resetflag = MCUSR; // save flags for debug
MCUSR = 0; // reset various flags
WDTCSR |= 0b00011000; // see docs, set WDCE, WDE
WDTCSR = 0b01101001; // set WDIE, WDE, and appropriate delay
wdt_reset();

Kering a neten egy érdekes Arduino könyvtár, amivel az Atmel328p processzorokon lehet debugolni a Watchdog működésbe lépését. Annyi a trükkje, hogy a Watchdog nem csupán reseteli a processzort, hanem első lépésben megszakítja a programot, amire a processzor kiírja a stackbe (RAM-ba) a program számlálót és a függvény meg elmenti ezt az értéket az EEPROM-ba. Ezt kiolvasva tudjuk hol akadt meg a program. Aztán majd csak a második körben indítja újra a processzort. Ez a pár sor a watchdog felkonfigurálása.

Ezek a részletek egybefüggőek, de az első sorokat a fórum motor szükségszerűen behúzza formázáskor...
A GPIO lábak konfigurációi, semmi különös.
Serial.begin(9600);
pinMode(PS_ON, INPUT);
pinMode(PS_GOOD, INPUT);
pinMode(top_left, OUTPUT);
//pinMode(top_right, OUTPUT);
pinMode(bottom_left, OUTPUT);
//pinMode(bottom_right, OUTPUT);
pinMode(pir_in, INPUT);
pinMode(ldr, INPUT_PULLUP);
pinMode(ldr_gnd, OUTPUT);
pinMode(pir_pwr, OUTPUT);
digitalWrite(ldr_gnd, LOW);
digitalWrite(pir_pwr, HIGH);

touch_ref = ADCTouch.read(touch, 4000);
Itt állítom be az érintés érzékelő alapvonalát. Minden egyes beolvasáskor ehhez a referencia értékhez fogja hasonlítani a mérést.

//watchdog report
EEPROM.get(500, report);
Serial.print(F("Froze at: 0x"));
Serial.println(report * 2, HEX);
if (resetflag != 0) Serial.print(F("Reset: "));
switch (resetflag) {
case 1:
Serial.println(F("Power-on"));
break;
case 2:
Serial.println(F("External"));
break;
case 4:
Serial.println(F("Brown-out"));
break;
case 8:
Serial.println(F("Watchdog"));
break;
}

EEPROM.get(1, PIR);
}

Ez a watchdog debug riportja, ami minden egyes bootoláskor kiírja a Serial monitorra az utolsó reset paramétereit.
Alul pedig egy beállítás betöltése az EEPROM-ból. Ezt a PIR szenzor ki- és bekapcsolása esetén menti a vezérlő, de erről kicsit később.

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.