Arduino sofort starten wenn er Strom bekommt

Guten Tag Liebes Arduino Comunity.

Da ich momentan an einen LED Projekt arbeite hätte ich eine Frage.
Ich wollte fragen wie ich umsetzten kann dass sich das Arduino sofort starten und den code ausgibt so ballt er Strom bekommt.

Mit Freundlichen Grüßen
Daniel.

Der Arduino benötigt etwas Zeit zum Hochfahren. Dann wird Ihr setup() ausgeführt.

Würde es eine Möglichkeit geben das er sofort soballt er das signal bekommt das setup() ausführt.
Mein Hintergedanken ist wenn ich die Auto türe öffne das der Arduino den led stripe sagt das er leuchten soll.

Moin
Der Arduino durchläuft nach dem Einschalten das setup() und startet danach die loop() automatisch.
Schreibe mit dem IDE ein einfaches Testprogramm und lasse dir die Startzeiten ausgeben.

Wann startet der Arduino?
Wenn es bereits gebootet hat, müssen Sie nur noch die Türöffnung erkennen und die LEDs auslösen.
Wenn das Öffnen der Tür das Arduino antreibt, wird es eine Weile dauern, bis das Arduino bootet. Das Entfernen des Bootloaders können helfen.

mach mal einen kleinen Sketch und stopp mal mit einer Uhr wie "lange" es wirklich dauert, dass der Strip leuchtet. Reicht das wirklich nicht? Versorge den Arduino nicht über USB sondern über VIN und stoppe mit der Hand.

Ansonsten könntest du noch so vorgehen:

  1. Arduino beim Wagen aufschließen einschalten
  2. LED bei Tür auf einschalten

Die Zeitspanne die ein Arduino braucht um das Programm zu starten ist die Zeitspanne die er nun mal braucht. Die einzige Verzögerung die da sein kann ist das der bootloader 1) eine gewisse Zeit nachschaut ob ein neues Programm geflasht werden soll. Noch schneller geht einfach nicht.

Das Setup-Programm startet so schnell es eben geht.
Wenn es unbedingt noch schneller gehen soll:

Direkt mit dem Türöffner-Kontakt einen MOS-FET ansteuern der die LED-Beleuchtung schaltet.
Gleichzeitig fährt der Arduino hoch und kann dann "übernehmen"
Dazu könnte der Arduino ein bistabiles Relais in die andere Schaltstellung schalten und alles weitere läuft dann auf dem umgeschalteten Stromweg.

vgs

  1. (bootloader Das Programm das überhaupt ermöglicht Arduino-IDE Programme auf den Arduino zu speichern)

Wenn ein ATmega328 Spannung bekommt wird zuerst gewartet daß der Taktgenerator anschwingt. dann wird ein Reset ausgeführt und das im FLASH hinterlegte Programm abgearbeitet. Dort wird zuerst der Bootloader aufgerufen und falls dieser innerhalb einer gewissen Zeit (einige Sekunden) keine Anfrage auf Upload erhält wird der Sketch aufgerufen.

Um das Starten eines Sketches zu beschleunigen kann der Bootloader gelöscht werden. So startet der Controller sobald die Ausführung von Code bereit ist mit dem Sketch. Da der Bootloader entfernt ist braucht es einen ISP-Programmierer oder einen anderen Arduino mit dem ISP Sketch. Der Bootlaoder wird durch laden des Sketches über ISP automatisch gelöscht.

Im Sketch darf keine Wartezeiten vorhanden sein die den Sketch verlangsamen (also zB kein delay())

Noch schnelller kann ein Arduino ragieren wenn er gar nicht ausgeschaltet wird sondern in Sleep-Modus versetzt wird. Dazu braucht es aber eine Spannungsversorgung über Batterie und ein Arduinomodel ohne "Nebenagregate" (LED, USB Adapter, Operationsverstärker ecc )

Grüße Uwe

1 Like

Wie würde das programm dann aussehen?

Es ist nur bedingt eine Frage des Programms.....
Die anderen Bedingungen sind viel wichtiger.
Ein Stichwort: Fuses
(sind im Datenblatt des µC beschrieben)

Das währe mein bisheriger code den ich mal geschrieben habe (Ich habe auch einen Infarot Sensor eingebaut der die LEDs modies steuern kann).

// Importieren der Bibliothek IRremote:
#include <IRremote.h>

// Importieren der Adafruit Neopixel Library:
#include <Adafruit_NeoPixel.h>
#ifdef AVR
#include <avr/power.h>
#endif

// Der IR-Signalempfänger ist an Pin 11 angeschlossen:
const int recvPort = 11;

// Die WS2812B-LED-Matrix oder den Streifen schließen wir an
// Pin 6 an:
const int pixelPin = 6;

// Objekt zur Verbindung mit dem IR-Empfänger:
IRrecv irBeacon(recvPort);

// Initialisieren der Neopixel-Bibliothek. Ich benutze eine LED-Matrix
Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, pixelPin, NEO_GRB + NEO_KHZ800);

// Ergebnisvariable für empfangene IR-Codes:
decode_results irReceived;

// Initialisierung:

void setup() {
Serial.begin(9600); // seriellen Monitor starten
strip.begin(); // LEDs initialisieren
strip.show(); // Anfangs alle LEDs aus

Serial.println("Empfang von IR-Codes starten:");
irBeacon.enableIRIn(); // Start
}

// COLORWIPE CONFIG
// Farbe leuchten. Die Wartezeit zwischen dem Ansteuern
// einzelner LEDs beträgt Millisekunden:
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

// Die Ereignisschleife:
// Farbeinstellungen per Infarotsensor
void loop() {
if (irBeacon.decode(&irReceived)) // IR-Kommando empfangen
{
Serial.print("Data received ...");
Serial.println(irReceived.value, HEX); // Ausgabe am seriellen Monitor

if (irReceived.value == 0xFFB04F) { // Taste ON
   colorWipe(strip.Color(255, 236, 110), 25); // LEDs ein Standart BENZ FARBE
}
if (irReceived.value == 0xFFF807) { // Taste OFF
   colorWipe(strip.Color(0, 0, 0), 25); // LEDs aus
}
if (irReceived.value == 0xFF9867) { // R1
   colorWipe(strip.Color(255, 0, 0), 30); // Rot

Was müsste ich umändern dass das Programm sofort startet wenn es Strom bekommt.
(Bin Neuling :D)

Die Fuses. (Bootloader und Startupzeit)
Vielleicht das/alle delay() weg machen
Vorher: Dir einen ISP Programmer beschaffen

Ja?
:japanese_ogre: Ist mir gar nicht aufgefallen! :japanese_ogre:

Davon allerdings würde ich beim Einsatz in Fahrzeugen abraten. Wenn das mal nicht ganz so funktioniert wie gewünscht lutscht es die Batterie leer - vielleicht nicht der Arduino selbst, aber die daran angeschlossene Peripherie (ich las da was von LED-Stripe).

Je nachdem wo der Arduino angeklemmt ist, hilft auch das ggf. vorhandene Batteriemanagement des Fahrzeugs nicht mehr. Das sorgt in solchen Fällen dafür, dass die Komfortelektrik rechtzeitig stillgelegt wird, damit man noch genug Saft für einen Startversuch hat.


Gruß Walter
(der "gewisse" Erfahrungen mit leeren Batterien hat)

Wenn der TO wirklich sein Projekt in ein Auto (PKW mit Straßenzulassung) einbauen will, dann wird er mehr Probleme bekommen. Daß sein Arduino sofort startet, wird das kleinste sein.

Das funktioniert bei einem einfachen LED-Streifen aber nicht bei Neopixel aka WS2812 und ähnliche, die der TO verwenden will.

Grüße Uwe

was meinen sie damit das es bei neopixel nicht funktioniert?

Der Neopixel-Stripe benötigt zum Leuchten auch Daten, nur Spannung reicht da nicht.

Also mit daten meinen sie dass ich mit den Infarotsensor auf on oder so schalten müsste.

Nein.....die Daten sind nötig um die LEDs in Position, Farbe und Helligkeit zu steuern und werden vom Controller an den Datenpin des Stripes geliefert. Diese Daten werden vom Controller aufbereitet, damit der Stripe das macht, was er machen soll.

Ein einfacher (einfarbiger) Ledstripe benötigt nur die Spannung mit genügend Strom um zu leuchten.

Im übrigen sind wir hier alle per du.