pinMode(but,INPUT_PULLUP); oder digitalWrite(but,1); ?

Habe ein frage zu diesen beiden deklarationen, die tun das gleiche,
aber digitalWrite(); brauch weniger speicher. In meinem fall 48 byte

Kann ich bedenkenlos digitalWrite(); nehmen, statt pinMode(); ?

void setup()
{
pinMode(butUP,INPUT_PULLUP);
pinMode(butDN,INPUT_PULLUP);
pinMode(butLI,INPUT_PULLUP);
pinMode(butRE,INPUT_PULLUP);

digitalWrite(butUP,1);
digitalWrite(butDN,1);
digitalWrite(butLI,1);
digitalWrite(butRE,1);
}
The message has the following error or errors that must be corrected before continuing:
Unable to publish the post. Please notice you can only post once every 5 minutes
and only edit posts after 30 seconds. Once you reach 100 published posts this limit will be removed.

...ok dann warte ich noch paar minuten bis ich posten darf

Meiner Meinung nach wird bei beiden der Pullup aktiviert. Bei digitalWrite natürlich nur, wenn der Pin Eingang ist.

Hi

PULLUP macht im Hintergrund nichts Anderes, als 'digitalWrite(x,HIGH);' - um den PullUP einzuschalten.
PinMode brauchst Du ja trotzdem, da Du so zwischen IN und OUT unterscheidest.
Und bei OUT setzt digitalWrite den OUTPUT auf HIGH (1) oder LOW (0).
In den Innereien des AVR ist dieses Bit sowohl für den PullUP-Widerstand, wie für den Ausgangstreiber zuständig und die unterschiedliche Funktion kommt nur zustande, weil der Pin 1x ein IN und 1x ein OUT ist.

Also statt erst auf INPUT setzen und dann digitalWrite auf HIGH kannst Du auch INPUT_PULLUP benutzen - unterm Rock sollte sich identischer Code ergeben (sofern die Befehle direkt aneinander stehen, kA, wie weitsichtig der Kompiler ist).

MfG

Ja klar, beides aktiviert den internen 10 oder 20kohm widerstand vom pin zu +5V,

bei mir die pins D2 bis D5 (Nano).
const byte butUP = 2;
const byte butDN = 3;
const byte butLI = 4;
const byte butRE = 5;

Das die digitalWrite version aber weniger speicher braucht, würde ich lieber die einsetzen.

Hi

Wenn Du die Eingänge als INPUT belässt (Reset-Zustand) - muß der µC ja nicht Diese erst auf INPUT 'um'stellen.
Denke, Darin ist der Unterschied des Speicherverbrauch zu sehen, da beim pinMode explizit die Richtung eingestellt wird - und dabei ist dem µC egal, was Da vorher drin stand, auch, wenn's das Gleiche ist, wie wieder rein kommt.

Nice²know (nett zu wissen)

Sonst wären mir die 48 Byte erst Mal ... äh ... egal.

Wenn Du so knapp an den Grenzen bist, wird es Dir das Programm, sofern Du nicht auf Alles beachtet hast, um die Ohren hauen :wink:
In dem Restspeicher wird der Stack aufgesetzt (wächst von 'ganz hinten/oben nach vorne/unten - Funktionsaufrufe, übergebene Variablen, so Kram kommt Da rein) - Da sind 48 Byte Nichts.

Trotzdem: Informativ, daß ein explizites Setzen auf INPUT (nach Reset, eigentlich unnötig) schon einige Bytes frisst.

MfG

Der Trick, mit dem Pullup, per digitalWrite() funktioniert nur bei AVRs!
Ist also nicht übertragbar.

Aber wenn wir schon bei AVR sind:
Die Alternative wäre, die Register direkt zu setzen.

const byte bitmaske = 0b01010101;// zu aktivierende Pullups
PORTB |= bitmaske;

Knapper gehts nicht

Eine Alternative, wäre auch meine Pin Klasse....