Jan Schmidt / Mbed 2 deprecated AusrollversuchH2M

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers AusrollversuchH2M.cpp Source File

AusrollversuchH2M.cpp

00001 #include "mbed.h"
00002 #include "Ticker.h"
00003 
00004 
00005 #define marker 43.0            //Anzahl der Messtreifen pro Umdrehung
00006 
00007 //***************************************************************************************************
00008 //Outputs
00009 
00010 
00011 
00012 DigitalOut led4(LED4);      /* Die LED blinkt immer dann auf wenn ein Messpunkt erkannt wurde*/
00013 
00014 
00015 
00016 //***************************************************************************************************
00017 //Inputs
00018 
00019 InterruptIn input(p17);     /* Der Eingang p17 des Mikrocontrollers wird als Interrupt definiert, was bedeutet, dass 
00020                                 jedes Mal wenn das Signal ansteigt oder absinkt das Programm unterbrochen wird und eine definierte 
00021                                 Funktion ausgeführt wird 
00022                                 Anmerkung: Die durch den Interrupt ausgelöste Funktion rechnerisch nicht zu aufwändig sein (zB. 
00023                                 printf) sonst hängt sich der Mikrocontroller auf */
00024 
00025 
00026 
00027 //***************************************************************************************************
00028 //Communication
00029 
00030 
00031 
00032 //***************************************************************************************************
00033 //Variables
00034 
00035 
00036 
00037 volatile float rpm = 0, rpm_total;      // Angabe der Umdrehungen pro Minute mit(rpm) und ohne Glättung (rpm_total)
00038 
00039 int detekt = 0;                         // Variable zum Umschalten der LED
00040 
00041 bool broadcast = false;                 // Durch Aktivieren der Variable wird die Übertragung aktiviert
00042 
00043 int sampleCounts = 0, sampleCounts_old = 0;     // Anzahl der Messpunkte pro festgelegter Zeiteinheit
00044 
00045 Serial pc(USBTX, USBRX);                // PC Übertragung für Labview
00046 
00047 
00048 //***************************************************************************************************
00049 //Misc
00050 
00051 
00052 
00053 Ticker serial_tx;                       //Definition des Tickers 
00054 
00055 int seconds = 0;                        // Der Ersatz für den Timer
00056 
00057 void rpm_counter()
00058 {                                       //Funktion die durch den Interrupt ausgelöst wird,
00059    sampleCounts++;                      // Zählt die smmpleCounts um 1 nach oben
00060 }
00061 
00062 
00063 
00064 
00065 
00066 
00067 void do_ticker()
00068 {
00069    broadcast = 1;                       //Diese Funktion wird durch den Ticker aktiviert, also in einem festgelegten
00070    seconds++;                           // Zeitintervall ausgeführt. Hier wird die Übertragung aktiviert und die Timervariable
00071 }                                       // um das festgelegte Tickerintervall hochgezählt (hier 1)
00072 
00073   
00074 
00075 
00076 
00077 
00078 int main(void)
00079 {
00080 
00081    input.rise(&rpm_counter);        // Aktiverung der Interruptfunktion wenn ein Messpunkt erkannt wird (steigende Flanke)
00082 
00083    serial_tx.attach(&do_ticker,1); // Aktivierung des Tickers bei Programmstart, hier wird das Zeitintervall festgelegt (hier ein Sekunde)
00084     
00085  
00086 
00087                   seconds = 0;          
00088                   pc.printf("Beginn der Drehzahlaufzeichnung\n\r"); // Ausgabe an den PC zu Beginn der Messung
00089    while(true) {
00090 
00091                 if(broadcast == 1)                      // Aktivierung der Übertragung für dieses Zeitintervall
00092                  {
00093                   rpm_total = sampleCounts/marker;      // Errechnung der Umdrehungen
00094 
00095                   rpm = ((rpm*1) + ((sampleCounts - sampleCounts_old)/ marker * 60))/2; //Errechnung der geglätteten Drehzahl in U/min. Glättungsfaktor 
00096                                                                                         // einstellbar durch das Verhältnis von alter zu neuer Drehzahl (hier 1:1)
00097                   sampleCounts_old = sampleCounts;
00098                      
00099                   pc.printf("$1;1;%i;%f;0\r\n",seconds,rpm);                //Ausgabe der aktuellen Messwerte an den PC
00100                   broadcast = 0;                                            // Ende der Aufzeichnung für dieses Zeitintervall
00101                  }
00102                 if  (detekt != sampleCounts) {led4 = !led4; detekt = sampleCounts;}; //Funktion zum Umschalten der LED bei Messpunkterkennung
00103 
00104                }
00105 }