Go Down

Topic: Timer Funktion Basteln. (Read 922 times) previous topic - next topic

Jomelo

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: [Select]

//# 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 ?

bohne

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.
http://www.dorkbot.de
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236434254
http://www.luminet.cc

Jomelo

OK,  damit ist die Frage beantwortet.

Go Up