Hi, ich komme nicht weiter.
Ich möchte mit dem anliegenden Sketch die Leistung eines Laser drosseln und möchte mit meinen UNO einen attiny85 entsprechend programmieren. Ich habe dengleichen sketch mit analogWrite(0, 25) getestet (sketch nerfLaserPIN0) und er funktioniert einwandfrei. Aber mein attiny weigert sich den o.g. befehl auszuführen. lt. meinen Infos ist der PB3 (physich PIN2) des attiny auch ein PWM PIN. Im bootloader habe ich keinerlei Veränderungen vorgenommen. Der eine sketch funktioniert, der ander nicht (nerfLaserPIN3). da ich schon eine platine angefertigt habe, steht mir kleider pin0 nicht mehr zur Verfügung. Habt ihr ne Idee? VG
der folgende code funktioniert nicht:
bool dauer = false; //betriebsmodus dauerhaft an
bool strobo = false; //betriebsmodus stroboskop
bool taster = false; //taster
bool tasteran = false; //taster nach timer
int freq1 = 40; //intervall stroboskop lampe1
unsigned long timer1 = 0; //timer für stroboskop
unsigned long timer2 = 0; //timer zum entprellen taster loslassen
unsigned long timer3 = 0; //timer zum entprellen taster fassen
void setup() {
pinMode(3, OUTPUT); //schaltung mosfet alpha
pinMode(4, INPUT_PULLUP); //schaltung stroboskop
pinMode(2, INPUT_PULLUP); //taster
pinMode(1, OUTPUT); //schaltung des mosfet beta
pinMode(0, OUTPUT); //schaltung mosfet laser
analogWrite(3, 25);
delay(500);
digitalWrite(1, HIGH);
digitalWrite(0, HIGH);
delay(1000);
}
void loop() {
strobo = digitalRead(4); //schaltung stroboskop
taster = digitalRead(2); //taster
if (taster == true) {
timer3 = millis();
}
if (taster == false && millis() - timer3 > 15) {
tasteran = true;
}
if (taster == false) {
timer2 = millis();
}
if (taster == true && millis() - timer2 > 25) {
tasteran = false;
}
if (strobo == false) {
dauer = true;
} else {
dauer = false;
}
if (tasteran == true && dauer == false) {
digitalWrite(1, HIGH);
analogWrite(3, 25);
digitalWrite(0, HIGH);
}
if (tasteran == false) {
digitalWrite(1, LOW);
analogWrite(3, 0);
digitalWrite(0, LOW);
}
if (tasteran == true && strobo == false) {
analogWrite(3, 25);
}
if (strobo == false && tasteran == false) {
timer1 = millis();
}
if (strobo == false && tasteran == true && millis() - timer1 < freq1) {
digitalWrite(1, HIGH); //Lampe1
digitalWrite(0, LOW); //sound
}
if (strobo == false && tasteran == true && millis() - timer1 > freq1) {
digitalWrite(1, LOW);
digitalWrite(0, HIGH);
}
if (strobo == false && tasteran == true && millis() - timer1 > 2 * freq1) {
timer1 = millis();
}
}
der folgende code funktioniert:
bool dauer = false; //betriebsmodus dauerhaft an
bool strobo = false; //betriebsmodus stroboskop
bool taster = false; //taster
bool tasteran = false; //taster nach timer
int freq1 = 40; //intervall stroboskop lampe1
unsigned long timer1 = 0; //timer für stroboskop
unsigned long timer2 = 0; //timer zum entprellen taster loslassen
unsigned long timer3 = 0; //timer zum entprellen taster fassen
void setup() {
pinMode(3, OUTPUT); //schaltung mosfet alpha
pinMode(4, INPUT_PULLUP); //schaltung stroboskop
pinMode(2, INPUT_PULLUP); //taster
pinMode(1, OUTPUT); //schaltung des mosfet beta
pinMode(0, OUTPUT); //schaltung mosfet laser
analogWrite(0, 25);
delay(500);
digitalWrite(1, HIGH);
digitalWrite(3, HIGH);
delay(1000);
}
void loop() {
strobo = digitalRead(4); //schaltung stroboskop
taster = digitalRead(2); //taster
if (taster == true) {
timer3 = millis();
}
if (taster == false && millis() - timer3 > 15) {
tasteran = true;
}
if (taster == false) {
timer2 = millis();
}
if (taster == true && millis() - timer2 > 25) {
tasteran = false;
}
if (strobo == false) {
dauer = true;
} else {
dauer = false;
}
if (tasteran == true && dauer == false) {
digitalWrite(1, HIGH);
analogWrite(0, 25);
digitalWrite(3, HIGH);
}
if (tasteran == false) {
digitalWrite(1, LOW);
analogWrite(0, 0);
digitalWrite(3, LOW);
}
if (tasteran == true && strobo == false) {
analogWrite(0, 25);
}
if (strobo == false && tasteran == false) {
timer1 = millis();
}
if (strobo == false && tasteran == true && millis() - timer1 < freq1) {
digitalWrite(1, HIGH); //Lampe1
digitalWrite(3, LOW); //sound
}
if (strobo == false && tasteran == true && millis() - timer1 > freq1) {
digitalWrite(1, LOW);
digitalWrite(3, HIGH);
}
if (strobo == false && tasteran == true && millis() - timer1 > 2 * freq1) {
timer1 = millis();
}
}