Hallo Leute,
Ich bin gerade am Programmieren. Ich versuche hier Serial.println zu benutzen zur Fehlersuche. Jedoch wenn ich printe gibt mir das Programm im Serial Monitor die Ausgabe zweimal. Einmal so halb und dann ganz. (Wenn ich 9600Baud verwende)
Verwende ich 19200 Baud dann printed er mir zu Anfangs Fragezeichen.
Woran könnte das liegen?
Danke
```cpp
#include <TimerOne.h>
#include <math.h>
#define frequenz 0.1
//Spule 1
const int Pin_Spule1_Enable = 3;
const int Pin_Spule1_Rechtslauf = A5;
const int Pin_Spule1_Linkslauf = A4;
//Spule2
const int Pin_Spule2_Enable = 5;
const int Pin_Spule2_Rechtslauf = A3;
const int Pin_Spule2_Linkslauf = A2;
const int Anzahl_Stutzstellen_volle_Periode = 18;
int Tabelle_Sinuswerte_L1[Anzahl_Stutzstellen_volle_Periode] = {};
int Tabelle_Sinuswerte_L2[Anzahl_Stutzstellen_volle_Periode] = {};
void setup()
{
Serial.begin(9600);
pinMode(Pin_Spule1_Enable , OUTPUT);
pinMode(Pin_Spule1_Rechtslauf,OUTPUT);
pinMode(Pin_Spule1_Linkslauf,OUTPUT);
pinMode(Pin_Spule2_Enable , OUTPUT);
pinMode(Pin_Spule2_Rechtslauf,OUTPUT);
pinMode(Pin_Spule2_Linkslauf,OUTPUT);
float Periodendauer_T_sek = 1.0 / frequenz;
float Winkelgeschwindigkeit_in_rad_pro_sek = 2 * M_PI * frequenz;
float Interruptauslosezeit_in_ms = (Periodendauer_T_sek / Anzahl_Stutzstellen_volle_Periode) * 1000.0;
Serial.println("TEST");
//Serial.println(Periodendauer_T_sek);
//Serial.println(Winkelgeschwindigkeit_in_rad_pro_sek);
//Serial.println(Interruptauslosezeit_in_ms);
for( int Aktuelle_TabellenPosition = 0 ; Aktuelle_TabellenPosition < Anzahl_Stutzstellen_volle_Periode; Aktuelle_TabellenPosition ++ )
{
float OmegaZeit_in_s = (Winkelgeschwindigkeit_in_rad_pro_sek * Interruptauslosezeit_in_ms * Aktuelle_TabellenPosition ) / 1000.0;
Tabelle_Sinuswerte_L1[Aktuelle_TabellenPosition] = (int)(255 * (sin( OmegaZeit_in_s + 120 * 0)));
Tabelle_Sinuswerte_L2[Aktuelle_TabellenPosition] = (int)(255 * (sin( OmegaZeit_in_s + 120 * 1)));
}
// Timer Interrupt Initialisieren
Timer1.initialize ((Interruptauslosezeit_in_ms * 1000)); // Zeit in mykro sekunden
Timer1.attachInterrupt (ISR_ZeitInterrupt);
}
volatile int akt_PWM_Tastgrad_L1 = 0;
volatile int akt_PWM_Tastgrad_L2 = 0;
volatile int ListenPositionsCounter = 0;
void ISR_ZeitInterrupt ()
{
akt_PWM_Tastgrad_L1 = Tabelle_Sinuswerte_L1[ListenPositionsCounter];
akt_PWM_Tastgrad_L2 = Tabelle_Sinuswerte_L2[ListenPositionsCounter];
// Spule 1
if(akt_PWM_Tastgrad_L1 > 0) // Rechtslauf Spule 1
{
digitalWrite(Pin_Spule1_Linkslauf, LOW);
digitalWrite(Pin_Spule1_Rechtslauf, HIGH);
}
if(akt_PWM_Tastgrad_L1 == 0)
{
digitalWrite(Pin_Spule1_Linkslauf, LOW);
digitalWrite(Pin_Spule1_Rechtslauf, LOW);
}
if(akt_PWM_Tastgrad_L1 < 0) // Rechtslauf Spule 1
{
digitalWrite(Pin_Spule1_Linkslauf, HIGH);
digitalWrite(Pin_Spule1_Rechtslauf, LOW);
}
//Spule 2
if(akt_PWM_Tastgrad_L2 > 0) // Rechtslauf Spule 1
{
digitalWrite(Pin_Spule2_Linkslauf, LOW);
digitalWrite(Pin_Spule2_Rechtslauf, HIGH);
}
if(akt_PWM_Tastgrad_L2 == 0){
digitalWrite(Pin_Spule2_Linkslauf, LOW);
digitalWrite(Pin_Spule2_Rechtslauf, LOW);
}
if(akt_PWM_Tastgrad_L2 < 0) // Rechtslauf Spule 1
{
digitalWrite(Pin_Spule2_Linkslauf, HIGH);
digitalWrite(Pin_Spule2_Rechtslauf, LOW);
}
analogWrite(Pin_Spule1_Enable, abs(akt_PWM_Tastgrad_L1));
analogWrite(Pin_Spule2_Enable, abs(akt_PWM_Tastgrad_L2));
ListenPositionsCounter ++;
if(ListenPositionsCounter == Anzahl_Stutzstellen_volle_Periode){
ListenPositionsCounter = 0;
}
//Serial.println(ListenPositionsCounter);
//Serial.println(akt_PWM_Tastgrad_L1);
//Serial.println(akt_PWM_Tastgrad_L2);
}
void loop() {
// put your main code here, to run repeatedly:
}