Moin,
Ich habe folgendes Problem: Ich habe eine ISR nach folgendem Beispiel programmiert: Arduino Playground - HalloWeltMitInterruptUndTimerlibrary
Die LED blinkt auch im 1sec tackt und alles ist soweit gut.
Nun muss ich aber im Loop einen Servo bewegen. Er bewegt sich physisch aber nicht. Am Servo liegt es nicht, in einem anderen Programm wo ich nur den Servo ansteuere funktioniert er. Woran kann das liegen? "Versteht" der sich nicht mit dem Interrupt?
Alex2509:
Moin,
Ich habe folgendes Problem: Ich habe eine ISR nach folgendem Beispiel programmiert: Arduino Playground - HomePage
Die LED blinkt auch im 1sec tackt und alles ist soweit gut.
Nun muss ich aber im Loop einen Servo bewegen. Er bewegt sich physisch aber nicht. Am Servo liegt es nicht, in einem anderen Programm wo ich nur den Servo ansteuere funktioniert er. Woran kann das liegen? "Versteht" der sich nicht mit dem Interrupt?
Wie sollen wir dir helfen, wenn du deinen Sketch geheim hältst?
#include "TimerOne.h"Â
#include <Servo.h>
Servo SERVO1;
int LED1=13;
int Intervall=1;
int pos=0;
void setup()Â
{
 pinMode(LED1, OUTPUT);
Â
 SERVO1.attach(5);
 SERVO1.write(20);
 delay(10);
Â
 Timer1.initialize(Intervall*1000000);
 Timer1.attachInterrupt(blinken);
}
void blinken()
{
 digitalWrite(LED1, digitalRead(LED1) ^ 1);
}
void loop()Â Â
{
 {               Â
  SERVO1.write(120);    Â
  delay(1000);          Â
 }
 {
  SERVO1.write(60);
  delay(1000);
 }
}
#include <Servo.h>
Servo SERVO1;
const byte LED=13;
//---------------------------
static bool DoINTERVAL = false; // Merker für das Interval Macro
// Start of Interval Macro
#define INTERVAL(interval)Â Â Â Â Â Â Â Â Â Â \
{Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â \
 static unsigned long lastHit = 0;      \
 DoINTERVAL = millis() - lastHit >= interval; \
 if(DoINTERVAL) lastHit = millis();     \
}Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â \
if(DoINTERVAL)
// End of Interval Macro
// ---------------------------
void setup()
{
 pinMode(LED, OUTPUT);
 SERVO1.attach(5);
 SERVO1.write(20);
 delay(10);
}
void loop()
{
 INTERVAL(1000UL) // blink
 {
  //Tu was alle 1s
   digitalWrite(LED, !digitalRead(LED));
 }
 INTERVAL(2000UL) // Servozucken
 {
  //Tu was alle 2s
  static int stellung = 120;
  stellung = (stellung == 120)?60:120;
  SERVO1.write(stellung);    Â
 }
}
Funktioniert, super danke
Ich wollte/ konnte BlinkWithoutDelay erst nicht anwenden weil ich nicht wusste wie ich den Servo ohne delay nutzen kann, aber so ist's einleuchtend