Zwei Prozesse paralell

Hallo zusammen,

Bin ganz frisch in der Arduino Programmierung stehe aber direkt mal vor einem problem.

Ich möchte folgendes machen und bin mir nicht sicher ob da so geht.

  • arduino UNO, sk6812 stripe (pin 0) und led ring (pin 6) angeschlossen
  • sk6812 led stripe soll beim starten des arduino UNO leuchten > klappt bereits
  • wenn über die serielle Schnittstelle ein wert übergeben wird soll der led ring aktiviert werden. Dies klappt auch bereits wenn ich nur den code des led rings nutze. (Auch wenn der arduino sich danach immer resettet. Da habe ich noch keine lösung gefunden. Wenn da also jemand nen tipp hat....)

Frage ist nun: geht das beides zusammen?

Ohne deine zwei Sketche zu kennen wird dir niemand helfen können...
Außer es reicht die die Antwort auf deine Frage: Ja

Bin mobil unterwegs. Kann den code daher grad nicht posten.
Für den sk6812 ist es aber der Standard playground code.
Für den ring ists was eigenes.

Es wär also möglich beide codes zusammenzuführen und das so umzusetzen wie beschrieben?

mille81:
Bin mobil unterwegs. Kann den code daher grad nicht posten.
Für den sk6812 ist es aber der Standard playground code.
Für den ring ists was eigenes.

Es wär also möglich beide codes zusammenzuführen und das so umzusetzen wie beschrieben?

Was ist ein SK6812 Stripe ?
Poste immer für verwendete Teile einen Hyperlink, keine URL.
Genauso auch für verwendete Libraries.

Und ja, wenn man alles richtig macht, funktioniert das auch zusammen, hatte Scherheinz ja schon geschrieben.

Auf Pin D0 ist die serielle Schnittstelle angeschlossen. Darum darfst Du D0 und D1 nicht verwenden wenn die serielle Schnittstelle funktionieren soll.
Grüße Uwe

"Zwei Prozesse paralell" geht genau genommen nicht, wohl aber kurz nacheinander, damit quasi parallel.

Ablaufsteuerung
Meine Standardantwort zu Ablaufsteuerungen:

Eine Stichworte Sammlung für Google Suchen:
Endlicher Automat,
State Machine,
Multitasking,
Coroutinen,
Ablaufsteuerung,
Schrittkette,
BlinkWithoutDelay,

Blink Without Delay
Der Wachmann

Multitasking Macros
Intervall Macro

Sk6812 sind ähnlich der ws2801 stripes. Man kann dafür auch die neopixel libraries verwenden, was ich auch getan hab.

Pin 0 und 1 also nicht belegen. Danke für den hinweis.

Hi

Wenn der Ring an Pin 6 angeschlossen ist - sollte Da eigentlich rein gar Nichts resetten.
Meine Glaskugel schwafelt was von Speicherüberlauf - kA, was Die genommen hat :o
(und mir ist nicht klar, ob man Strings hierfür missbrauchen könnte, was dem Speicherüberlauf aber näher käme).

MfG

Ring code als anhang.
Siehe dazu hier:
https://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection

Code auszug aus dem batch script
mode com13 BAUD=9600 PARITY=n DATA=8 STOP=1 && echo 100>\.\com13

Danach kappt er die Verbindung und resettet einmal wie im link beschrieben.

led_ring_code.ino (1.18 KB)

Hi

Beim Starten der seriellen Verbindung resettet der Arduino - Das ist normal.
Wenn Du die Verbindung immer nur kurz aufbauen willst, wird jedes Mal der Arduino resetten (und im Bootloader warten, ob’s was Neues zum spielen gibt).
Das Schließen dieser Verbindung stört den Arduino dagegen nicht.

Wenn Du Das unterbinden willst, ein Kondensator vom Reset-Pin nach GND (wie beim Arduion_as_ISP).
Dort aber mit dem Nachteil, daß Du Dich dann um den Reset selber kümmern musst, wenn Du einen neuen Sketch aufspielen willst.
(im ISP-Sketch soll ja nur das Target resetten, der Arduino den Start der Kommunikation aber überleben)

… ok … so ziemlich genau Das steht auch auf der Seite, Deren URL Du angegeben hast.
Als Link wäre Das klickbar.

MfG

Knapp über 1k Sketch - DAS hätte aber dicke in ein Code-Tag gepasst.
Mit den ganzen delay() gefällt Dir Das?
… da ich den Sketch eh gerade offen habe …

#include <Adafruit_NeoPixel.h>200

#define PIN 6
int incomingByte = 0;   // for incoming serial data

Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800);
 

void setup() {
  Serial.begin(9600);
  strip.begin();
  strip.setBrightness(100); //adjust brightness here
  strip.show(); // Initialize all pixels to 'off'
  delay(1000);
  Serial.println("ser start");
}

void loop() {

        // send data only when you receive data:
        String tm="";
        if (Serial.available() > 0) {
                int cr=random(0,2)*255;
                int cg=random(0,2)*255;
                int cb=random(0,2)*255;
                Serial.print(cr);
                Serial.print(cg);
                Serial.println(cb);
                String tm=Serial.readString();
                for(int i=0;i<24;i++){
                  strip.setPixelColor(i, cr, cg,cb);
                  strip.show(); 
                  delay(tm.toInt());
                }
                delay(2000);
                
                for(int i=0;i<24;i++){
                  strip.setPixelColor(i, 0, 0,0);
                  strip.show();
                  delay(50);
                }
        }
        delay(500);
}

Hab versucht das mit einem Kondensator zu unterbinden, hat aber leider nicht geklappt. Ich hätte gern als Link gepostet, ging aber vom Handy aus nicht.

Den Code konnte ich leider auch nicht posten, ging nur als Anhang. Die Delays müssen nicht sein die können im Prinzip weg, habe es aber irgendwie nicht hinbekommen die rauszunehmen ...

Hallo,

für eine serielle Verbindung ohne Zwangsreset musst du einen "externes" Terminal verwenden. Zum Bsp. hterm. Nur musst du dann immer daran denken selbst die Verbindung aufzubauen und eben auch zu trennen. Falls du "verbunden" aus der IDE neu flashst, passiert noch nichts schlimmes außer einem Timeout. Man sollte aber nicht während des Flashvorgangs im Terminal am "connect" fummeln. Lieber erst den Timeout abwarten, falls man es "mal wieder" vergessen hat. Komfort gibts nicht geschenkt.

Das wird nicht gehen. Konkret wird die batch über ein externes programm immer dann aufgerufen wenn etwas bestimmtes passiert. Die ide nutze ich hier gar nicht.
Die verbindung könnte quasi dauer connected sein aber das funzt ja nicht mit der batch datei.

Hast Du schon mal SoftwareSerial als zweite serielle Schnittstelle oder einen Mega2560 in Erwägung gezogen?

Hab versucht das mit einem Kondensator zu unterbinden, hat aber leider nicht geklappt.

Das gelingt aber zuverlässig!
Evtl, hast du ein ganz anderes Problem.

Am Rande:
Unos und Megas haben eine Lötjumper "Reset-ON", wenn man den unterbricht, dann gibts keine DTR Reset mehr.

Software serial? Sagt mir nix.

Hab es mit 3 unos versucht wie beschrieben, ging aber nicht.

Wie hast du es gemacht? Hast du evtl ein foto und welchen kondesator du genau genutzt hast?
Wo sitzt der lötjumper genau?

Wie hast du es gemacht? Hast du evtl ein foto und welchen kondesator du genau genutzt hast?

10 bis 100µF Elko
Min 10V Spannungsfestigkeit
Zwischen GND(Minispol) und Reset

Wo sitzt der lötjumper genau?

Auf dem Board!
Beschriftet!

Also diese hier?

Durchaus verwendbar.