Hi,
ich hab ein relativ großes Problem und würde mich über eure Hilfe sehr
freuen.
Also ich habe vor mir ein 8 Kanal Dimmer mit ein Arduino zu bauen.
Angefangen habe ich damit mir ein Schaltplan zu erstellt und eine
Platine in China zu bestellen wo alles drauf gelötet wurde (siehe
Anhang). Ich habe natürlich gedacht das mit den Programmieren geht mit
links und jetzt hab ich den Salt. Bis jetzt geht DMX empfangen mit der
DMXSerial.h library super und auch das dimmen mit denn Cod im Anhang
geht super. Aber beide Sketche zusammen machen mir Probleme, es scheint
so als würde die DMX library den attachInterrupt(0, zero_cross_detect,
CHANGE); des Dimmers stören denn wenn man die Zeile
DMXSerial.init(DMXReceiver); ausklammer geht das dimmen auch wieder.
Könnt ihr mir ein bissel unter die Arme greifen und mir Helfen.
L.G. Jonas
Dimmer
type or paste code here
//Dimmer
int triac_pin = 9; // Digital output to TRIAC
int dimm_time = 8000; // 8000 = 20% output power
bool zero_cross = 0;
void setup(void) {
pinMode(triac_pin, OUTPUT);
digitalWrite(triac_pin, HIGH);
delay(2000);
digitalWrite(triac_pin, LOW);
attachInterrupt(0, zero_cross_detect, CHANGE);
}
void loop() {
if (zero_cross) {
if (dimm_time < 9500) {
delayMicroseconds(dimm_time);
digitalWrite(triac_pin, HIGH);
delayMicroseconds(200);
digitalWrite(triac_pin, LOW);
}
zero_cross = 0;
}
if (dimm_time > 8800) {
dimm_time = 9500;
}
if (dimm_time < 1000) {
dimm_time = 1000;
}
if (2 > 1) {
int getval = 10000 - (60 * 100);
if (getval >= 0 && getval <= 10000) {
dimm_time = getval;
}
}
}
void zero_cross_detect() { // If zero crossing is detected
zero_cross = 1;
}
**DMX_Empfang**
type or paste code here
//DMX Empfang
#include <DMXSerial.h>
// Constants for demo program
const int LuefterPin = 11;
const int startChannel = 1;
#define LuefterDefaultLevel 255
void setup() {
DMXSerial.init(DMXReceiver);
// set some default values
DMXSerial.write(1, 80);
DMXSerial.write(2, 0);
DMXSerial.write(3, 0);
// enable pwm outputs
pinMode(LuefterPin, OUTPUT);
}
void loop() {
// Calculate how long no data bucket was received
unsigned long lastPacket = DMXSerial.noDataSince();
if (lastPacket < 5000) {
if (DMXSerial.read(startChannel + 8 ) > 125) {
digitalWrite(LuefterPin, LOW);
}
else {
digitalWrite(LuefterPin, HIGH);
}
} else {
// Show pure red color, when no data was received since 5 seconds or more.
analogWrite(LuefterPin, LuefterDefaultLevel);
} // if
}
// End.
DMX_Empfang_und_Dimmen
type or paste code here
//DMX Empfang und Dimmen
#include <DMXSerial.h>
int triac_pin = 9; // Digital output to TRIAC
int dimm_time = 8000; // 8000 = 20% output power
bool zero_cross = 0;
// Constants for demo program
const int LuefterPin = 11;
const int startChannel = 1;
#define LuefterDefaultLevel 255
void setup() {
DMXSerial.init(DMXReceiver);
// set some default values
DMXSerial.write(1, 80);
DMXSerial.write(2, 0);
DMXSerial.write(3, 0);
// enable pwm outputs
pinMode(LuefterPin, OUTPUT);
pinMode(triac_pin, OUTPUT);
digitalWrite(triac_pin, HIGH);
delay(2000);
digitalWrite(triac_pin, LOW);
attachInterrupt(0, zero_cross_detect, CHANGE);
}
void loop() {
// Calculate how long no data bucket was received
unsigned long lastPacket = DMXSerial.noDataSince();
if (lastPacket < 5000) {
if (DMXSerial.read(startChannel + 8 ) > 125) {
digitalWrite(LuefterPin, LOW);
if (zero_cross) {
if (dimm_time < 9500) {
delayMicroseconds(dimm_time);
digitalWrite(triac_pin, HIGH);
delayMicroseconds(200);
digitalWrite(triac_pin, LOW);
}
zero_cross = 0;
}
if (dimm_time > 8800) {
dimm_time = 9500;
}
if (dimm_time < 1000) {
dimm_time = 1000;
}
if (2 > 1) {
int getval = 10000 - (DMXSerial.read(startChannel ) * 100);
if (getval >= 0 && getval <= 10000) {
dimm_time = getval;
}
}
}
else {
digitalWrite(LuefterPin, HIGH);
}
} else {
// Show pure red color, when no data was received since 5 seconds or more.
analogWrite(LuefterPin, LuefterDefaultLevel);
} // if
}
void zero_cross_detect() { // If zero crossing is detected
zero_cross = 1;
}
// End.

