Pages: [1]   Go Down
Author Topic: Timer Funktion Basteln.  (Read 896 times)
0 Members and 1 Guest are viewing this topic.
Germany, Osnabrück
Offline Offline
God Member
*****
Karma: 30
Posts: 658
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi zusammen, ich habe mir eine Timer funktion gebastelt.
Mich interessiert ob ich die Funktion auch unabhängig von externen Globalen Variabeln machen kann ?

Ich habe versucht mit Zeigern zu arbeiten, aber bei "int"  lässt die Software die nicht zu.

Code:
//# Global
//# ===================================
  //# Timer ( schlecht gelöst, da die Funktion unten nicht unabhängig hiervon ist
  long genFreq_prev = 0;
  
  //# 33 HZ
  int Freq_pin_33 = 13;  
  int Freq_val_33 = LOW;
  int Freq_pre_33 = 0;

  //# 40 Hz
  //int Freq_pin_40 = 12;
  //int Freq_val_40 = LOW;
  //int Freq_pre_40 = 0;
  

  
  //# Menu Level 0
  //int  menu_0_cnt = 4;  
  //char menu_0[4][MENU_MAX_STRING_LENGHT] =
  //{
  //  {"Spiel"},
  //  {"Kontest"},
  //  {"Einstellungen"},
  //  {"Standby"}  
  //};

//# Function
//# ===================================
  int genFreq(int pin,int val, long interval) {    
    
    //## Intervall erfüllt                   millis*micros
    if(micros() - genFreq_prev > (1./interval*500*1000)) {
      
      //## neue Zeit setzen
      genFreq_prev = micros();  
      
      //## Value Setzen
      if(val == LOW) {
        val = HIGH;
      } else {
        val = LOW;
      }
      digitalWrite(pin, val);
    }
    //## Value zurückgeben
    return val;  
  }
 
//# SETUP
//# ===================================
  void setup()  {
    //## 33 Hz
    pinMode(Freq_pin_33, OUTPUT);
    //## 40 Hz
    //pinMode(Freq_pin_40, OUTPUT);  
  }  
 
//# LOOP
//# ===================================
  void loop(){
    //## 33 Hz
    Freq_val_33 = genFreq(Freq_pin_33,Freq_val_33,33);
    //## 40 Hz
    //Freq_val_40 = genFreq(Freq_pin_40,Freq_val_40,40);  
  }

Wenn ich im Progrmam die  40Hz aktivieren, dann geht alles daneben, was auch klar ist. Hat da jemand von euch erfahrungen mit ?
Logged

0
Offline Offline
God Member
*****
Karma: 1
Posts: 588
LumiNet rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich bin nicht sicher, ob ich Deine Frage richtig verstehe. Du kannst natürlich auf globale Variablen verzichten... aber ich glaube, Du willst eher wissen, wie Du die 33Hz generieren kannst ohne das Main Programm darunter leiden zu lassen, richtig?
Du kannst die HardwareTimer benutzen... guck Dir doch dazu mal folgendes an:
http://www.arduino.cc/playground/Main/MsTimer2
Da kannst Du eine Funktion alle x Millisekunden aufrufen... Beispielsweise könntest Du alle 3 Millisekunden eine Funktion aufrufen, die einen Pin wechselt, was dann zu etwa 33Hz führen würde.
Bedeutet: Frequenz wird vom HardwareTimer erzeugt, Dein Hauptprogramm muss sich um sowas nicht mehr wirklich kümmern und kann andere Aufgaben übernehmen.
Logged


Germany, Osnabrück
Offline Offline
God Member
*****
Karma: 30
Posts: 658
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

OK,  damit ist die Frage beantwortet.
Logged

Pages: [1]   Go Up
Jump to: