Ich hatte auch fast darauf getippt ich probier's mal
Danke Für den Tipp
LG Julian ![]()
Ich hatte auch fast darauf getippt ich probier's mal
Danke Für den Tipp
LG Julian ![]()
Hallo Miteinander,
Ich Arbeite an einem Automodus für einen LED stripe und wenn die Adresse 0 ist soll er automatisch in den Auto Modus übergehen dafür habe ich folgenden Programm Code erstellt,
#include <DMXSerial.h>
// Constants for demo program
int RedPin = 10; // PWM output pin for Red Light.
int GreenPin = 11; // PWM output pin for Green Light.
int BluePin = 9; // PWM output pin for Blue Light.
int localRead;
#define RedDefaultLevel 0
#define GreenDefaultLevel 0
#define BlueDefaultLevel 0
void setup () {
DMXSerial.init(DMXReceiver);
// setze einige Standardwerte
DMXSerial.write(1, 0);
DMXSerial.write(2, 0);
DMXSerial.write(3, 0);
DMXSerial.write(4,0);
DMXSerial.write(5,0);
for(int i = 2; i <=14; i++)
{
if(i < 9 || i > 11)
{
pinMode(i,INPUT);
digitalWrite(i, HIGH);
}
}
// PWM-Ausgänge aktivieren
pinMode(RedPin, OUTPUT); // sets the digital pin as output
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
}
void loop() {
int Addr = 0;
// DIN Nummer 1 DIN Nummer 2 DIN Nummer 3 DIN Nummer 4 DIN Nummer 5 DIN Nummer 6 DIN Nummer 7 DIN Nummer 8 DIN Nummer 9
Addr = (!digitalRead(14) * 1) + (!digitalRead(12) * 2) + (!digitalRead(8) * 4) + (!digitalRead(7) * 8) + (!digitalRead(6) * 16) + (!digitalRead(5) * 32) + (!digitalRead(4) * 64) + (!digitalRead(3) * 128) + (!digitalRead(2) * 256);
int Addr2;
Addr2 = Addr + 1;
int Addr3;
Addr3 = Addr + 2;
int Addr4;
Addr4 = Addr + 3;
int Addr5;
Addr5 = Addr + 4;
// Berechnen Sie, wie lange kein Datenpaket empfangen wurde
unsigned long lastPacket = DMXSerial.noDataSince();
if (! Addr == 0) {
// Letzte DMX-Werte lesen und PWM-Pegel einstellen
uint16_t B = ((uint16_t)DMXSerial.read(Addr3) + 1) * ((uint16_t)DMXSerial.read(Addr4) + 1);
analogWrite(BluePin, ((B - 1) >> 8));
uint16_t G = ((uint16_t)DMXSerial.read(Addr2) + 1) * ((uint16_t)DMXSerial.read(Addr4) + 1);
analogWrite(GreenPin, ((G - 1) >> 8));
uint16_t R = ((uint16_t)DMXSerial.read(Addr) + 1) * ((uint16_t)DMXSerial.read(Addr4) + 1);
analogWrite(RedPin, ((R - 1) >> 8));
int strobeValue = DMXSerial.read(Addr5);
if (strobeValue >= 10)
{
//Map to 0,1 - 20 Hz
//Hz 0,1 => 10000ms
//Hz 20 => 50ms
int intervalInMs = map(strobeValue, 10, 255, 1000, 50);
int onTime = 30; //Define here. Can't be > 50!
int offTime = intervalInMs - onTime;
delay(onTime);
analogWrite(BluePin, 0);
analogWrite(GreenPin, 0);
analogWrite(RedPin, 0);
do {
if (offTime > 500) {
delay(500);
offTime -= 500;
}
else
{
delay(offTime);
break;
}
localRead = DMXSerial.read(Addr5);
} while (localRead == strobeValue);
}
}else{
Addr2 = 0;
Addr3 = 0;
Addr4 = 0;
Addr5 = 0;
DMXSerial.write(1, 0);
DMXSerial.write(2, 0);
DMXSerial.write(3, 0);
DMXSerial.write(4, 0);
DMXSerial.write(5, 0);
}
}
// End.
Display More
Das Problem das ich habe ist das, wenn ich die Adresse auf 0 setzte mein licht immer noch ein ist obwohl ich es mit DMXSerial.write(…..) auf 0 setze und so mit alle 5 kanäle für den Anfang aus sind.
Was kann man da machen ?
LG Julian![]()
@Soon, hast du vlt eine Idee , warum wenn ich einen Arduino UNO her nehme meinen sketch aufspiele er dann funktioniert und dann auf dem nano nicht ,es is ja ein und der selbe chip. Das Problem ist auf jeden fall pin 13 beim nano und pin 1 beim uno das er immer 1 oder den jeweiligen Dip wert dauerhaft auf on hat auch wenn der dip an der Eingabe auf off ist. Ich hoffe du kapierst was ich meine, ich habe es so ausführlich wie möglich probiert. Ich denke das ein Hardware Problem ist mit uno und nano oder die Pins ein wenig anders sind .
Hoffe du kannst mir helfen wäre echt nice ![]()
LG Julian
#include <DMXSerial.h>
// Constants for demo program
int RedPin = 10; // PWM output pin for Red Light.
int GreenPin = 11; // PWM output pin for Green Light.
int BluePin = 9; // PWM output pin for Blue Light.
int localRead;
#define RedDefaultLevel 100
#define GreenDefaultLevel 0
#define BlueDefaultLevel 0
void setup () {
DMXSerial.init(DMXReceiver);
// setze einige Standardwerte
DMXSerial.write(1, 0);
DMXSerial.write(2, 0);
DMXSerial.write(3, 0);
DMXSerial.write(4,0);
DMXSerial.write(5,0);
for(int i = 2; i <=13; i++)
{
if(i < 9 || i > 11)
{
pinMode(i,INPUT);
digitalWrite(i, HIGH);
}
}
// PWM-Ausgänge aktivieren
pinMode(RedPin, OUTPUT); // sets the digital pin as output
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
}
void loop() {
int Addr = 0;
// DIN Nummer 1 DIN Nummer 2 DIN Nummer 3 DIN Nummer 4 DIN Nummer 5 DIN Nummer 6 DIN Nummer 7 DIN Nummer 8 DIN Nummer 9
Addr = (!digitalRead(13) * 1) + (!digitalRead(12) * 2) + (!digitalRead(8) * 4) + (!digitalRead(7) * 8) + (!digitalRead(6) * 16) + (!digitalRead(5) * 32) + (!digitalRead(4) * 64) + (!digitalRead(3) * 128) + (!digitalRead(2) * 256);
int Addr2;
Addr2 = Addr + 1;
int Addr3;
Addr3 = Addr + 2;
int Addr4;
Addr4 = Addr + 3;
int Addr5;
Addr5 = Addr + 4;
// Berechnen Sie, wie lange kein Datenpaket empfangen wurde
unsigned long lastPacket = DMXSerial.noDataSince();
if (lastPacket < 5000) {
// Letzte DMX-Werte lesen und PWM-Pegel einstellen
uint16_t B = ((uint16_t)DMXSerial.read(Addr3) + 1) * ((uint16_t)DMXSerial.read(Addr4) + 1);
analogWrite(BluePin, ((B - 1) >> 8));
uint16_t G = ((uint16_t)DMXSerial.read(Addr2) + 1) * ((uint16_t)DMXSerial.read(Addr4) + 1);
analogWrite(GreenPin, ((G - 1) >> 8));
uint16_t R = ((uint16_t)DMXSerial.read(Addr) + 1) * ((uint16_t)DMXSerial.read(Addr4) + 1);
analogWrite(RedPin, ((R - 1) >> 8));
int strobeValue = DMXSerial.read(Addr5);
if (strobeValue >= 10)
{
//Map to 0,1 - 20 Hz
//Hz 0,1 => 10000ms
//Hz 20 => 50ms
int intervalInMs = map(strobeValue, 10, 255, 1000, 50);
int onTime = 30; //Define here. Can't be > 50!
int offTime = intervalInMs - onTime;
delay(onTime);
analogWrite(BluePin, 0);
analogWrite(GreenPin, 0);
analogWrite(RedPin, 0);
do {
if (offTime > 500) {
delay(500);
offTime -= 500;
}
else
{
delay(offTime);
break;
}
localRead = DMXSerial.read(Addr5);
} while (localRead == strobeValue);
}
}
}
Display More
Soon5 , Ich habs , das Problem Wahr das ich den PIN1 benutz habe und dieser ja auch der TX Pin ist, und dieser kann anscheinend den Wert 1 und 0 nicht Erkennen weil ich meinen PC mit dem Arduino verbunden habe. Deshalb benutze ich jetzt trotzdem pin 13 bis 2 und lasse 11, 10, 9 aus.
Das war jetzt meine Rester richtiger Erfolg
ich hoffe für dich ist diese Nachrichten so okay habe alles versucht.
LG Julian
@Soon , ich will nur das du bescheid weißt warum meine Komma Setzung so schlecht ist und meine Allgemeine Rechtschreibung ich habe eine anerkannte Lese Rechtschreib schwäche das heißt auf gut deutsch das ich mich mit der Komma Setzung usw. sehr Schwer tuhe ich bemühe mich aber es zu vermeiden, es ist aber echt schwierig für mich ich bitte um Verständnis ein wenig , ich bemühe mich echt sehr und hoffe das du kannst mich verstehen kannst
LG Julian
@Soon ich habe gemeint von meinem Programm Code am anfange das es immer wenn der Dip schalter1 auf off ist bekomme ich Stadt den wert 0 immer 1
auf dem Serial Monitor bekomme und eine Problem Lösung ist z.b das meines Wissens nach
for(int i = 1; i <=12; i++){
pinMode(i,INPUT);
digitalWrite(i, HIGH);
aber wie schaffe ich es die 3 PWM Pins 11, 10 , 9 im oben genannten Programm Code zu überspringen
LG Julian
Hy. Du hast den Pullup für den Input 1 nicht aktiviert. Absicht (warum?) oder vergessen. Vermutlich vergessen, denn das würde erklären warum du bei allen 0 eine 1 bekommst.
Der Code ist etwas unübersichtlich, ich würde das so machen:
Codeint addr = 0; if(!digitalRead(1)) addr += 1; if(!digitalRead(12)) addr += 2; if(!digitalRead(8)) addr += 4; if(!digitalRead(7)) addr += 8; ....Es ist auch unschön das Ergebnis eines digitalRead, welches HIGH oder LOW ist, mit einer Zahl zu multiplizieren.
Okay, das werde ich mal so Tun.
Gegebenenfalls werde ich heute abends nochmal etwas Posten weil ich tags über nur wenig Zeit habe
LG Julian
ja der 1 war Absicht mit pull up auch wenn ich deine lösung mache dann habe ich wenn alle Dips auf off sind die zahl eins aber ich probiere morgen erst mal noch rum und dann schreib ich wieder auch wenn Eigenlob stinkt aber ich finde es wird so langsam besser bei mir mit dem Programmieren habe nochmal die Basics angeschaut und ich habe nicht ganz verstanden was du damit gemeint hast es gibt keine is schleife du meinst im Programm ist es was ich gemacht habe schwachsinn das kann ich nachvollziehen das habe ich auch gemerkt
Hallo Miteinander ich bin seit mehreren Tagen dabei eine DMX Adressierung für den guten Arduino zu basten mein Problem ist nur dass meine werte bzw wenn alle Schalter unten sind ich den wert 1 bekomme und schon probiert habe mit if schleifen eins abzuziehen was auch keine wirkliche Lösung ist ich bitte um Hilfe ich bin aber gerne am rumprobieren also erstmal nur ein par Tipps für die Lösung
LG Julian
void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
}
void loop() {
int Addr = 0;
// DIN Nummer 1 DIN Nummer 2 DIN Nummer 3 DIN Nummer 4 DIN Nummer 5 DIN Nummer 6 DIN Nummer 7 DIN Nummer 8 DIN Nummer 9
Addr = (!digitalRead(1) * 1) + (!digitalRead(12) * 2) + (!digitalRead(8) * 4) + (!digitalRead(7) * 8) + (!digitalRead(6) * 16) + (!digitalRead(5) * 32) + (!digitalRead(4) * 64) + (!digitalRead(3) * 128) + (!digitalRead(2) * 256);
int AddrKO = digitalRead(1);
if(AddrKO == HIGH){
Addr = Addr - 1;
}
delay(20) ;
delay(20);
Serial.println(Addr);
}
Display More
Soon5 Könntest du mir mal in kurz Fassung erklären für was die letzten beiden werte on der map Funktion machen 1 und 255 sind ja meines Verständnisses die 8 Bit DMX werte ab wann der Strobo startet also wenn der Kanal 5 auf 1 ist fängt der Strobo an und 255 ist das maximale
Ich vermute es funktioniert, wenn du das so schreibst.
Ich war nah drnn finde ich ich habe alles probiert zum Schluss bis jetzt hatte es wenigstens mal geblinkt ich habe noch 1 stunde probiert
Programmieren ist wie ein Musik Instrument lernen. Am Anfang hilft nur Übung. Und eine Stunde ist nicht viel. Lass dich nicht entmutigen und probier weiter. Nah dran.... Naja, ehrlich gesagt nein
E-Gitarre Spiele ich schon 5 jahre und das kann ich und jetzt weiß ich was du meinst ![]()
![]()
Code Display Morevoid loop() { // Berechnen Sie, wie lange kein Datenpaket empfangen wurde unsigned long lastPacket = DMXSerial.noDataSince(); if (lastPacket < 5000) { // Letzte DMX-Werte lesen und PWM-Pegel einstellen int strobeValue = DMXSerial.read(5); uint16_t B = ((uint16_t)DMXSerial.read(3) + 1) * ((uint16_t)DMXSerial.read(4) + 1); analogWrite(BluePin, ((B - 1) >> 8)); uint16_t G = ((uint16_t)DMXSerial.read(2) + 1) * ((uint16_t)DMXSerial.read(4) + 1); analogWrite(GreenPin, ((G - 1) >> 8)); uint16_t R = ((uint16_t)DMXSerial.read(1) + 1) * ((uint16_t)DMXSerial.read(4) + 1); analogWrite(RedPin, ((R - 1) >> 8)); if (strobeValue > 0) { //Map to 0,1 - 20 Hz //0,1 => 10000ms //20 => 50ms int intervalInMs = map(strobeValue, 1, 255, 10000, 50); int onTime = 30; //Define here. Can't be > 50! int offTime = intervalInMs - onTime; delay(onTime); analogWrite(BluePin, 0); analogWrite(GreenPin, 0); analogWrite(RedPin, 0); delay(offTime); } } }Probier das mal.
Ich war nah drnn finde ich ich habe alles probiert zum Schluss bis jetzt hatte es wenigstens mal geblinkt ich habe noch 1 stunde probiert
Ich probiere morgen die Adressierung und das wird was und ich schick den Code mal dann mit und teste mich selbst mal
Code Display Morevoid loop() { // Berechnen Sie, wie lange kein Datenpaket empfangen wurde unsigned long lastPacket = DMXSerial.noDataSince(); if (lastPacket < 5000) { // Letzte DMX-Werte lesen und PWM-Pegel einstellen int strobeValue = DMXSerial.read(5); uint16_t B = ((uint16_t)DMXSerial.read(3) + 1) * ((uint16_t)DMXSerial.read(4) + 1); analogWrite(BluePin, ((B - 1) >> 8)); uint16_t G = ((uint16_t)DMXSerial.read(2) + 1) * ((uint16_t)DMXSerial.read(4) + 1); analogWrite(GreenPin, ((G - 1) >> 8)); uint16_t R = ((uint16_t)DMXSerial.read(1) + 1) * ((uint16_t)DMXSerial.read(4) + 1); analogWrite(RedPin, ((R - 1) >> 8)); if (strobeValue > 0) { //Map to 0,1 - 20 Hz //0,1 => 10000ms //20 => 50ms int intervalInMs = map(strobeValue, 1, 255, 10000, 50); int onTime = 30; //Define here. Can't be > 50! int offTime = intervalInMs - onTime; delay(onTime); analogWrite(BluePin, 0); analogWrite(GreenPin, 0); analogWrite(RedPin, 0); delay(offTime); } } }Probier das mal.
Ich war nah drnn finde ich ich habe alles probiert zum Schluss bis jetzt hatte es wenigstens mal geblinkt ich habe noch 1 stunde probiert
Also Es Geht so halb ja so halb nein ich bin entweder zu doof oder keine Ahnung habe jetzt alles probiert haben den Arduino Artikel 2 mal gelesen ich finde es nicht geb mir mal einen kleinen tipp bitte
#include <DMXSerial.h>
// Constants for demo program
const int RedPin = 10; // PWM output pin for Red Light.
const int GreenPin = 6; // PWM output pin for Green Light.
const int BluePin = 5; // PWM output pin for Blue Light.
#define RedDefaultLevel 100
#define GreenDefaultLevel 0
#define BlueDefaultLevel 0
void setup () {
DMXSerial.init(DMXReceiver);
// setze einige Standardwerte
DMXSerial.write(1, 0);
DMXSerial.write(2, 0);
DMXSerial.write(3, 0);
// PWM-Ausgänge aktivieren
pinMode(RedPin, OUTPUT); // sets the digital pin as output
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
}
void loop() {
// Berechnen Sie, wie lange kein Datenpaket empfangen wurde
unsigned long lastPacket = DMXSerial.noDataSince();
if (lastPacket < 5000) {
// Letzte DMX-Werte lesen und PWM-Pegel einstellen
uint16_t B = ((uint16_t)DMXSerial.read(3) + 1) * ((uint16_t)DMXSerial.read(4) + 1);
analogWrite(BluePin, ((B - 1) >> 8));
uint16_t G = ((uint16_t)DMXSerial.read(2) + 1) * ((uint16_t)DMXSerial.read(4) + 1);
analogWrite(GreenPin, ((G - 1) >> 8));
uint16_t R = ((uint16_t)DMXSerial.read(1) + 1) * ((uint16_t)DMXSerial.read(4) + 1);
analogWrite(RedPin, ((R - 1) >> 8));
// Analog red gives a value between 0-1023
int DMXValue = DMXSerial.read(5);
// Convert this to a sensible range of values for the strobe delay
// 50Hz = 20ms between flashes
int refreshRate = map(DMXValue, 0, 1023, 0, 255 );
// Turn the strobe LED on
analogWrite(BluePin, HIGH);
delayMicroseconds(refreshRate);
// Turn it off again
analogWrite(B, LOW);
delayMicroseconds(refreshRate);
}
}
Display More
Hier ist die Deutsche Referenz: https://www.arduino.cc/reference/de/l…tions/math/map/
Was du dir überlegen musst: Willst du Programmieren lernen? Dann kannst du nicht nach 5 Minuten schreiben "Ich finde den Fehler nicht". Programmieren ist gerade am Anfang zäh, und nervig, aber da muss man durch.
Wenn du es nicht lernen willst, sondern einfach eine funktionierende Lösung haben willst, dann sag es einfach. Ich würde dir auch empfehlen dich in einem Forum für Arduino Einsteiger und SW Entwickler Einsteiger an zu melden, weil ganz ehrlich, du hast die Grundzüge von Programmierung nicht verstanden. Das ist jetzt nicht böse gemeint, sondern einfach eine Feststellung. Es gibt super Tutorial Videos auf YouTube welche die Grundzüge der Programmierung erklären.
Viel Erfolg noch heute Abend.
Gruß Soon5
So eine Reihe habe ich schon angesehen von leds ein und aus bis einen sensor auslesen und Display ansteuern habe den Code schon kapiert auch was er tut