Hallo alle miteinander,
ich möchte einen Timer interrupt in mein Programm einbauen, bei welchem man die Zeit dynamisch ändern kann.
Ich habe an meinem Atmega2560 unter anderem ein Poti mit welchem ich die Zeit des Timer interrupts verändern möchte. Leider funktioniert das nicht so wie ich es gerne hätte. Der Timer interrupt bleibt immer auf 8 Sekunden. Wenn ich ein festen Wert vergebe dann geht der interrupt.
anbei mal ein Auszug aus meinem Code:
#include <Arduino.h>
#include <U8g2lib.h>
#include <DS3231.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "SdFat.h"
#include "PinChangeInterrupt.h"
#include "TimerOne.h"
int Zykluszeit = 500;
void setup() {
Serial.begin(115200);
Wire.begin();
Pininit();
DisplayInit();
//Interrupt:
Timer1.initialize(Zykluszeit * 1000); // initialize timer1, and set a 1/2 second period 50000 2000000 = 2 Sekunden
Timer1.attachInterrupt(MotorrichtungAndern); //Ruft die Funktion TiefeBerechnung auf. updateEncoder2
}
void loop()
{
Spannungsmessung(); //Spannung messen und auslesen
DisplayOutput(); //Daten auf dem Display ausgeben
SerielleAusgabe(); //Ausgabe aller Daten an die Serielle Schnittstelle
delay(50);
}
void Zeiteinstellung()
{
Zykluszeit = analogRead(A7);
//set a 1/2 second period 50000 2 Sekunden = 200000
Zykluszeit = Zykluszeit * 2;
Zykluszeit = Zykluszeit + 500;
if (Zykluszeit != ZykluszeitAlt)
{
DisplayZykluszeit();
ZykluszeitAlt = Zykluszeit;
Serial.print("Aktuelle Zykluszeit: ");
Serial.print(Zykluszeit);
Serial.print('\n');
}
}
void MotorrichtungAndern()
{
if (Messungstarten == 1)
{
//Lehrdorn Rein und wieder Raus drehen
if (Programmwahl == 1)
{
AnzahlDurchlaufe = AnzahlDurchlaufe + 1;
if (Motorrichtung == 1)
{
digitalWrite(Motor1, LOW);
digitalWrite(Motor2, HIGH);
Motorrichtung = 2;
}
else
{
digitalWrite(Motor1, HIGH);
digitalWrite(Motor2, LOW);
Motorrichtung = 1;
}
}
//Lehrdorn Dauerhaft reindrehen
else
{
AnzahlDurchlaufe = AnzahlDurchlaufe + 1;
digitalWrite(Motor1, LOW);
digitalWrite(Motor2, HIGH);
}
if (digitalRead(LED3) == 1)
{
digitalWrite(LED3, LOW);
}
else
{
digitalWrite(LED3, HIGH);
}
}
else
{
digitalWrite(LED3, LOW);
digitalWrite(Motor1, LOW);
digitalWrite(Motor2, LOW);
//delay(500);
}
}
void Pininit()
{
pinMode(Motor1, OUTPUT);
pinMode(Motor2, OUTPUT);
pinMode(Wahlschalter, INPUT_PULLUP);
pinMode(Taster2, INPUT_PULLUP);
pinMode(Taster1, INPUT_PULLUP);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(Buzzer, OUTPUT);
}
Falls das so nicht gehen sollte, gibt es alternativen?