Problem mit Lichtsteuerung

Guten Tag liebe Arduino Gemeinde!

Ich habe folgendes Problem:

Ich arbeite daran für meine Kinder eine Spielzeugambulanz mit zusätzlichen Lichteffekten zu ergänzen:

  • 2 Scheinwerfer vorne, weisse LED, Abblendlicht, Vollicht, mit Taster gesteuert,
    "aus - Abblendlicht - Vollicht - aus, an je einem PWM Ausgang.
  • 2 Rücklichter, rote LED, über gleichen Tastereingang, aus - ein (Abblend-, Vollicht) - aus.
  • 2 Blaulichter, 2 Blitzer vorne, 2 Blitzer hinten, über 2ten Taster, ein - aus

Die Blitzerei mit den 6 LED habe ich schon einigermassen hingekriegt (modifizierter "blink without delay" code, zusammengeschustert aus Beispielen), muss nur noch von den Zeiten optimiert werden.
Hier fehlt noch die "ein - aus" Steuerung mit dem Taster.

Für die andere Lichtfunktion habe ich keinen Plan, wie ich das mit dem Taster anstellen soll....

  1. Tastendruck => Abblendlicht mit PWM Wert X, Rücklichter ein.
  2. Tastendruck => Vollicht mit PWM Wert Y, Rücklichter bleiben ein.
  3. Tastendruck => alles aus

Mein Problem ist nun, wie kriege ich beide Funktionen in ein Programm, inklusive Tasterentprellung, wie vorher beschrieben.
Ich habe versucht beide Programmteile als Unterprogramme zu verwursten, hat aber nicht funktioniert.

Kann mir jemand einen Tipp geben, wie ich das zusammenbringe, "Mustercode" währe das Zückerchen, mir ist aber auch schon geholfen, wenn ich Beispiele bekomme wie das funktionell aussehen müsste, damit ich auch selber noch "denken" muss.

Bin momentan auf Arbeit, mein bisheriger Code steht mir hier nicht zur Verfügung, am Wochenende hab ich da wieder mehr Möglichkeiten!

Vielen Dank!
ArduBastler

Hallo,
das nächste Mal gib´s DU- den Sketch zur Verbesserung vor.

/* * Tastendrücke zählen */   
int switchPin = 25;                     // Schalter ist mit Pin 25 verbunden 
int val;                                // Variable für den Pin Zustand 
int buttonState;                        // Variable für den letzten Schalterzustand 
int buttonPresses = 0;                  // Wie oft ist der Schalter gedrückt   


const int LED = 13;
//int zstS1=1;

 


void setup() 

{
pinMode(LED, OUTPUT);

digitalWrite(LED, LOW);

 pinMode(switchPin, INPUT);            // Schalter-Pin ist Input   
Serial.begin(19200);                     // Start der seriellen Kommunikation mit 19200bps 
buttonState = digitalRead(switchPin);   // Anfangszustand lesen
}    
void loop()
{ 
 val = digitalRead(switchPin);           // Eingabewert lesen und in val speichern   
if (val != buttonState) 
{                                       // Der Zustand des Schalters hat sich verändert 
if (val == LOW) 
{                                       // Ist der Schalter gedrückt? 
buttonPresses++;                         // Inkrementieren der Variablen buttonPresses 
Serial.print("Schalter wurde "); 
Serial.print(buttonPresses); 
Serial.println(" gedrueckt"); }
} buttonState = val;  // Den Zustand merken 
if (buttonPresses == 5)
{digitalWrite(LED, HIGH);}
if (buttonPresses == 10)
{digitalWrite(LED, LOW);}
}

Gruß und Spaß
Andreas

ich hab's mal so versucht

#define taster1 2   //Beleuchtung
#define taster2 7   //Blitzerei
#define led_weiss 3 //pwm pin
#define led_rot 4   //Rücklicht
#define led_blau 8
#define x 127
#define y 255
#define debounce_delay 20
bool taster_wert;
bool taster_wert_alt;
bool taster2_wert;
bool taster2_wert_alt;
uint8_t taster_count;
uint8_t taster2_count;

void setup() {
  pinMode (taster1,INPUT_PULLUP);
  pinMode (taster2,INPUT_PULLUP);
  pinMode (led_rot,OUTPUT);
  pinMode (led_blau,OUTPUT);

}

void loop() 
{
  static uint32_t debounce_time;
  if (millis()-debounce_time>debounce_delay) 
  {taster_wert=digitalRead(taster1);
   if(taster_wert!=taster_wert_alt)
     {debounce_time=millis();
      taster_wert_alt = taster_wert;
      if(!taster_wert) 
        {taster_count++;
        if (taster_count >2) taster_count=0;
        }
   }
  }
 if(taster_count == 0) funktion3();
 if(taster_count == 1) funktion1();
 if(taster_count == 2) funktion2();

 if (millis()-debounce_time>debounce_delay) 
  {taster_wert=digitalRead(taster2);
   if(taster_wert!=taster_wert_alt)
     {debounce_time=millis();
      taster2_wert_alt = taster2_wert;
      if(!taster2_wert) 
        {taster2_count++;
         if (taster2_count >1) taster2_count=0;
        }
        if(taster2_count == 1) funktion4();
          else digitalWrite(led_blau,0);
     }
  }     
}
void funktion1() //Abblendlicht mit PWM Wert X, Rücklichter ein
{
  analogWrite(led_weiss,x);
  digitalWrite(led_rot,1);
}

void funktion2() //Vollicht mit PWM Wert Y, Rücklichter bleiben ein
{
  analogWrite(led_weiss,y);
  digitalWrite(led_rot,1);  
}

void funktion3() //alles aus
{
  analogWrite(led_weiss,0);
  digitalWrite(led_rot,0);
}
void funktion4() //Blitzerei
{
  // hier muß die Blitzerei rein
}

Hallo SokobyMobil und Ardubu!

Ihr seid Spitze, ich werde das zu Hause ausprobieren, vielen herzlichen Dank!

@SokobyMobil: falls Du damit meinst (Sketch zur Verbesserung), dass ich den Code nicht mitgesendet habe, sorry!

Ich werde in Zukunft den Sketch mitposten!

Danke an Euch!

ArduBastler

Hallo wiedermal

Ich hatte Zeit, an meinem Projekt weiterzupröbeln, dank den beiden Antworten hat das auch gut geklappt!

Nun stellt sich aber das Problem, dass sich die beiden Taster gegenseitig beeinflussen... Vor allem, wenn länger gedrücklt wird.
Sprich, beim drücken der einen Taste (Licht) beginnt auch die Blitzerei für einen Moment, oder, wenn die Blitzerei an ist und gestoppt werden soll, geht auch das Licht aus, oder aus und an...
Dies lässt sich aber nicht gleich reproduzieren.
Ist es möglich genau einen Tastimpuls einzulesen und den Taster dann für einen Moment zu "sperren"? Also egal wie lange gedrückt wird, nur beim jeweiligen Betätigen eine Aktion ausgelöst wird.

Das Programm startet auch nicht selbstständig, wenn ich es hochgeladen habe, und dann die Batterie (9V) ab und wieder anhänge (ausschalten/ einschalten), ich muss es jedesmal neu einlesen...

den verwendeten Code hab ich diesmal angehängt..

#define taster1 2   //Beleuchtung
#define taster2 7   //Blitzerei
#define led_weiss 11 //pwm pin
#define led_rot 4   //Rücklicht
#define led_blau 8
#define x 50
#define y 255
#define debounce_delay 28
bool taster_wert;
bool taster_wert_alt;
bool taster2_wert;
bool taster2_wert_alt;
uint8_t taster_count;
uint8_t taster2_count;
byte ledPin1 = 3; // 1. LED liegt an Pin 3
byte ledPin2 = 10; // 2. LED liegt an Pin 10
byte ledPin3 = 5; // 3. LED liegt an Pin 5
byte ledPin4 = 6; // 4. LED liegt an Pin 6
boolean value1 = HIGH; // Startwert der 1. LED
boolean value2 = LOW; // Startwert der 2. LED
boolean value3 = LOW; // Startwert der 3. LED
boolean value4 = LOW; // Startwert der 4. LED
unsigned long previousMillis1 = 0; // speichert, wie viele Sekunden seit 
der letzten Änderung vergangen sind
unsigned long previousMillis2 = 0; // wie vor für 2. Blaulicht
unsigned long previousMillis3 = 120; // wie vor für 3. Blaulicht
unsigned long previousMillis4 = 0; // wie vor für Flasher
unsigned long interval1 = random(200, 500); // Interval zwischen zwei 
Änderungen für LED 1
unsigned long interval2 = random(50, 400); // wie vor für LED 2
unsigned long interval3 = 120; // wie vor für LED 3
unsigned long interval4 = 80;  // wie vor für LED 4/5


void setup() {
 pinMode (taster1, INPUT_PULLUP);
 pinMode (taster2, INPUT_PULLUP);
 pinMode (led_rot, OUTPUT);
 pinMode (led_blau, OUTPUT);
 pinMode(ledPin1, OUTPUT); // Setzt den ledPin1 (Pin 3) als Ausgang
 pinMode(ledPin2, OUTPUT); // Setzt den ledPin2 (Pin 4) als Ausgang
 pinMode(ledPin3, OUTPUT); // Setzt den ledPin3 (Pin 5) als Ausgang
 pinMode(ledPin4, OUTPUT); // Setzt den ledPin4 (Pin 6) als Ausgang
// int randomSeed(analogRead(0));//
}

void loop()
{
 static uint32_t debounce_time;
 if (millis() - debounce_time > debounce_delay)
 { taster_wert = digitalRead(taster1);
   if (taster_wert != taster_wert_alt)
   { debounce_time = millis();
     taster_wert_alt = taster_wert;
     if (!taster_wert)
     { taster_count++;
       if (taster_count > 2) taster_count = 0;
     }
   }
 }
 if (taster_count == 0) funktion3();
 if (taster_count == 1) funktion1();
 if (taster_count == 2) funktion2();

 if (millis() - debounce_time > debounce_delay)
 { taster_wert = digitalRead(taster2);
   if (taster_wert != taster_wert_alt)
   { debounce_time = millis();
     taster2_wert_alt = taster2_wert;
     if (!taster2_wert)
     { taster2_count++;
       if (taster2_count > 1) taster2_count = 0;
     }
   }
 }

 if (taster2_count == 0) funktion5();
 if (taster2_count == 1) funktion4();
}
void funktion1() //Abblendlicht mit PWM Wert X, Rücklichter ein
{
 analogWrite(led_weiss, x);
 digitalWrite(led_rot, 1);
}

void funktion2() //Vollicht mit PWM Wert Y, Rücklichter bleiben ein
{
 analogWrite(led_weiss, y);
 digitalWrite(led_rot, 1);
}

void funktion3() //alles aus
{
 analogWrite(led_weiss, 0);
 digitalWrite(led_rot, 0);
}
void funktion4() //Blitzerei
{
 if (millis() - previousMillis1 > interval1)
 {
   previousMillis1 = millis(); // aktuelle Zeit abspeichern

   // LED Zustand wecheln.
   value1 = !value1;

   // Intervall zwischen 200 und 299 ms jedesmal neu setzen
   unsigned long interval1 = random(200, 300);

   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin1, value1);
 }
 if (millis() - previousMillis2 > interval2)
 {
   previousMillis2 = millis(); // aktuelle Zeit abspeichern

   // LED Zustand wecheln.
   value2 = !value2;

   // Intervall zwischen 280 und 379ms neu setzen
   unsigned long interval2 = random(280, 380);

   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin2, value2);
 }
 if (millis() - previousMillis3 > interval3)
 {
   previousMillis3 = millis(); // aktuelle Zeit abspeichern

   // LED Zustand wechseln
   value3 = !value3;
   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin3, value3);
 }
 if (millis() - previousMillis4 > interval4)
 {
   previousMillis4 = millis(); // aktuelle Zeit abspeichern

   // LEDs Zustand wechseln
   value4 = !value4;

   // Interval zwischen 30 und 79ms neu setzen
   unsigned long interval4 = random(30, 80);
   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin4, value4);
 }
}
void funktion5()
{
 digitalWrite(ledPin1, 0);
 digitalWrite(ledPin2, 0);
 digitalWrite(ledPin3, 0);
 digitalWrite(ledPin4, 0);
}

Ambulance_all_orig.ino (4.27 KB)

Das Programm startet auch nicht selbstständig, wenn ich es hochgeladen habe, und dann die Batterie (9V) ab und wieder anhänge (ausschalten/ einschalten), ich muss es jedesmal neu einlesen...

Kann eigentlich nicht sein.
Der Unterschied nach Neu-Einlesen ist eher, dass da die Versorgungsspannung an bleibt.
Hast du mal den Reset Knopf probiert ?
Allerdings sehe ich in setup nichts, was besser einen Moment später als direkt nach Spannungwiederkehr laufen sollte.

Nun stellt sich aber das Problem, dass sich die beiden Taster gegenseitig beeinflussen... Vor allem, wenn länger gedrücklt wird.

taster_wert und taster_wert_alt wird an einer Stelle für beide Taster verwendet:

 {taster_wert=digitalRead(taster2);
   if(taster_wert!=taster_wert_alt)

Danach verwendest du taster2_wert

was sind die ledPin1 bis ledPin4?

da war noch ein kleiner Fehler bei Taster 2. Versuch es mal so:

#define taster1 10   //Beleuchtung
#define taster2 11   //Blitzerei
#define led_weiss 3 //pwm pin
#define led_rot 4   //Rücklicht
#define led_blau 9
#define x 50
#define y 255
#define debounce_delay 28
bool taster_wert;
bool taster_wert_alt;
bool taster2_wert;
bool taster2_wert_alt;
uint8_t taster_count;
uint8_t taster2_count;
const byte ledPin1 = 7; // 1. LED liegt an Pin 3
const byte ledPin2 = 8; // 2. LED liegt an Pin 10
const byte ledPin3 = 5; // 3. LED liegt an Pin 5
const byte ledPin4 = 6; // 4. LED liegt an Pin 6
boolean value1 = HIGH; // Startwert der 1. LED
boolean value2 = LOW; // Startwert der 2. LED
boolean value3 = LOW; // Startwert der 3. LED
boolean value4 = LOW; // Startwert der 4. LED
unsigned long previousMillis1 = 0; // speichert, wie viele Sekunden seit der letzten Änderung vergangen sind
unsigned long previousMillis2 = 0; // wie vor für 2. Blaulicht
unsigned long previousMillis3 = 120; // wie vor für 3. Blaulicht
unsigned long previousMillis4 = 0; // wie vor für Flasher
unsigned int interval1 = random(200, 500); // Interval zwischen zwei
//Änderungen für LED 1
unsigned int interval2 = random(50, 400); // wie vor für LED 2
unsigned int interval3 = 120; // wie vor für LED 3
unsigned int interval4 = 80;  // wie vor für LED 4/5


void setup() {
  Serial.begin(9600);
 pinMode (taster1, INPUT_PULLUP);
 pinMode (taster2, INPUT_PULLUP);
 pinMode (led_rot, OUTPUT);
 pinMode (led_blau, OUTPUT);
 pinMode(ledPin1, OUTPUT); // Setzt den ledPin1 (Pin 3) als Ausgang
 pinMode(ledPin2, OUTPUT); // Setzt den ledPin2 (Pin 4) als Ausgang
 pinMode(ledPin3, OUTPUT); // Setzt den ledPin3 (Pin 5) als Ausgang
 pinMode(ledPin4, OUTPUT); // Setzt den ledPin4 (Pin 6) als Ausgang
// int randomSeed(analogRead(0));//
}

void loop()
{
  static uint32_t debounce_time;
 if (millis() - debounce_time > debounce_delay)
 { taster_wert = digitalRead(taster1);
   if (taster_wert != taster_wert_alt)
   { debounce_time = millis();
     taster_wert_alt = taster_wert;
     if (!taster_wert)
     { taster_count++;
       if (taster_count > 2) taster_count = 0;
     }
   }
 }
 if (taster_count == 0) funktion3();
 if (taster_count == 1) funktion1();
 if (taster_count == 2) funktion2();

 if (millis() - debounce_time > debounce_delay)
 { taster2_wert = digitalRead(taster2);
   if (taster2_wert != taster2_wert_alt)
   { debounce_time = millis();
     taster2_wert_alt = taster2_wert;
     if (!taster2_wert)
     { taster2_count++;
       if (taster2_count > 1) taster2_count = 0;
     }
   }
 }

 if (taster2_count == 0) funktion5();
 if (taster2_count == 1) funktion4();
}
void funktion1() //Abblendlicht mit PWM Wert X, Rücklichter ein
{
 analogWrite(led_weiss, x);
 digitalWrite(led_rot, 1);
}

void funktion2() //Vollicht mit PWM Wert Y, Rücklichter bleiben ein
{
 analogWrite(led_weiss, y);
 digitalWrite(led_rot, 1);
}

void funktion3() //Beleuchtung aus
{
 analogWrite(led_weiss, 0);
 digitalWrite(led_rot, 0);
}
void funktion4() //Blitzerei
{
 if (millis() - previousMillis1 > interval1)
 {
   previousMillis1 = millis(); // aktuelle Zeit abspeichern

   // LED Zustand wecheln.
   value1 = !value1;

   // Intervall zwischen 200 und 299 ms jedesmal neu setzen
   unsigned int interval1 = random(200, 300);

   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin1, value1);
 }
 if (millis() - previousMillis2 > interval2)
 {
   previousMillis2 = millis(); // aktuelle Zeit abspeichern

   // LED Zustand wecheln.
   value2 = !value2;

   // Intervall zwischen 280 und 379ms neu setzen
   unsigned long interval2 = random(280, 380);

   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin2, value2);
 }
 if (millis() - previousMillis3 > interval3)
 {
   previousMillis3 = millis(); // aktuelle Zeit abspeichern

   // LED Zustand wechseln
   value3 = !value3;
   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin3, value3);
 }
 if (millis() - previousMillis4 > interval4)
 {
   previousMillis4 = millis(); // aktuelle Zeit abspeichern

   // LEDs Zustand wechseln
   value4 = !value4;

   // Interval zwischen 30 und 79ms neu setzen
   unsigned long interval4 = random(30, 80);
   // Wert auf den Ausgang schreiben
   digitalWrite(ledPin4, value4);
 }
}
void funktion5() //Blitzerei aus
{
 digitalWrite(ledPin1, 0);
 digitalWrite(ledPin2, 0);
 digitalWrite(ledPin3, 0);
 digitalWrite(ledPin4, 0);
}

Edit: Achtung ich habe die Taster und ein paar Led's auf andere Pin's gelegt

Hallo!
@michael_x: hast recht... das Alter auch... :slight_smile: kann ja nicht gehen, hab ich übersehen...

Reset Knopf habe ich auch probiert, funzt nicht. Es leuchtet die interne blaue LED auf dem Board, und die weisse blinkt.. warum habe ich (noch) nicht gefunden..

Wenn die Stromversorgung über USB kommt, dasselbe...

@ ardubu: diese sind für die Blitzerei (rote/weisse/blaue LED) in der funktion4

Hallo,
ich halte ja "#define debounce_delay 28" und millis() für sehr
Fehler anfällig. Ich weiß auch nicht, warum man unbedingt damit den Zustand
eines Taster feststellen sollte.
Alleine der Gedanke- über Zeit- einen Tastenzustand zu beurteilen…

Das funktioniert nur "sicher" bei Taster die fast 100%tig schalten, soll
heißen, eine sehr geringe Prellzeit haben.
Bei Deiner Methode muß die Zeit dem schlechtesten Schalter angepaßt werden.
Bei meiner Methode funktioniert das "immer". Ich habe noch keinen Schalter
gehabt, bei dem es nicht funktioniert.
Gruß und Spaß
Andreas

Hallo

Ich danke euch für die Inputs!

Werde diese mal versuchen und Feedback geben!

Zur Anmerkung: ich bin nicht der Spezialist in Sachen Programmierung, deshalb bitte ich um Nachsicht bei den Profis... :blush:

ich halte ja "#define debounce_delay 28" und millis() für sehr
Fehler anfällig. Ich weiß auch nicht, warum man unbedingt damit den Zustand
eines Taster feststellen sollte.
Alleine der Gedanke- über Zeit- einen Tastenzustand zu beurteilen…

Das funktioniert nur "sicher" bei Taster die fast 100%tig schalten, soll
heißen, eine sehr geringe Prellzeit haben.
Bei Deiner Methode muß die Zeit dem schlechtesten Schalter angepaßt werden.

ich habe mal in meine Grabbelkiste gepackt und einen Billigtaster rausgezogen und ausgemessen. Siehe Anhang.

SDS00001.png

Siehe Anhang

Sind die angegebenen 25 µs ein Kästchen oder das ganze Diagramm?
Ich tippe mal auf 1 Kästchen, und sehe, dass meine Standard 5 ms Debounce-Zeit ziemlich ok sind.

Danke

Sind die angegebenen 25 µs ein Kästchen oder das ganze Diagramm?
Ich tippe mal auf 1 Kästchen, und sehe, dass meine Standard 5 ms Debounce-Zeit ziemlich ok sind.

25 µs/DIV sprich die Prellerei ist bei dem Taster nach ca. 250 µs vorbei.

Hallo zusammen!

Ich habe den Sketch gemäss den Inputs von ardubu angepasst, funktioniert einwandfrei!
Die Taster beeinflussen sich nicht mehr gegenseitig, alle Funktionen sind so, wie gewünscht!!
Vielen Dank dafür!

Die Prellerei scheint auch kein Problem zu sein, jedenfalls kann ich nichts feststellen. Da die ganze Geschichte nicht zeitkritisch ist, spielt das (denke ich) keine Rolle.

Jedoch kriege ich das mit dem Start , nachdem das Programm hochgeladen ist nicht auf die Reihe...

Hochladen => funzt perfekt, läuft

USB ausstöpseln (über USB device entfernen), Batterie anschliessen => weisse led auf dem Board blinkt, blaue led leuchtet, Reset nützt nichts, Programm funktioniert nicht....

Muss ich dem Board die Firmware (Bootloader??) neu laden, oder hat das Board einen knacks?
Ich habe bisher nichts dazu gefunden, das Board wird auch einwandfrei erkannt...
Bin ratlos... :o
Gibt's da irgendwo einen Thread, der das Problem beschreibt und einen Lösungsansatz?
Wie gesagt, ich bin neu in der Materie, seid bitte nachsichtig mit einem "unwissenden"... :disappointed_relieved:

Liebe Grüsse!

USB ausstöpseln (über USB device entfernen), Batterie anschliessen => weisse led auf dem Board blinkt, blaue led leuchtet, Reset nützt nichts, Programm funktioniert nicht....

was hast du für eine Batterie und wie hast du sie angeschlossen?
Welchen Wert haben die Widerstände vor den Led's?

9V Block, über einen Ein/Aus Schalter (Pin 30 +, Pin 29 Gnd, gemäss Arduino Nano 3.0 Pinout), Widerstände für rot/weiss/blaue Led's, gerechnet mit 5V Ausgangsspannung, und gemäss den verschiedenen Vf Werten der Led.
150/100/56 Ohm, berechnet auf 20mA pro Led.

Jede Led wird über einen separaten Pin angeschlossen. Pin----[Widerstand]---->Led---Masse
da der max. Pinstrom laut Datenblatt 40mA betragen darf... (funzt ja auch einwandfrei über USB, 2 Stunden Dauerbetrieb mit max. Helligkeit und Blinkerei...)

weiss jetzt aber nicht auswendig, welcher Wert für welche Led (bin auf Arbeit)

Gruss

Versuche mal, dass du alles abnimmst und den Blinksketch mit der internen Led aus den Beispielen hochlädst und dann über Batterie versorgst.

Du könntest auch noch versuchen statt mit einer 9V Batterie über Vin mit 3 AA Batterien (4,5V) direkt auf dem 5V Pin (27) den Nano zu versorgen.
Für Batteriebetrieb könntest du das ganze auch mit einem ATtiny84 betreiben um Strom zu sparen.

Hallo alle

Ein Update zu meinem Projekt, da ich längere Zeit nichts mehr hören liess:

Ich habe alle Eure Tipps versucht (ausser ATiny, da keinen zur Hand), welche allesamt nicht zu Erfolg geführt haben.

Interner Blinksketch zeigt gleiches Verhalten => Upload => funzt; Betriebsspannung aus, 1, 2, 3, an => funzt nicht...

gleiches mit Batterie (9V/ 4,5V) => upload, funzt, USB abstecken, Batterie dran lassen, funzt. Batterie aus/ an => nüscht... (wüste Flüche)

Habe dann von einem Kollegen einen Mega 2560 und einen Nano geliehen bekommen, siehe da, mit beiden hat es funktioniert..

Ich vermute deshalb, dass mein Nano (Original, nicht "Chinabillig") einen Knacks hat...

Kann man die Dinger irgendwie resetten/ neu "formatieren" oder so?

Schönen Tag und bis denndann...