Test (c)
Dependencies: mbed
main.cpp
- Committer:
- heinrich_kevin
- Date:
- 2015-12-14
- Revision:
- 0:288836a35837
File content as of revision 0:288836a35837:
// Kevin Heinrich, 3AHEL, Begonnen am: 30.11.2015 // BERTL14 // selber Entwickelt /* Aufgabenstellung: Es soll eine alternativ Funktion entwickelt werden, die die PWM-Funktion fuer die Led's D10-D13 ersetzen kann 1) Schreiben der alternativ PWM-Funktion mit wait, wait_ms bzw. wait_us [void pwm_delay(unsigned int duty_cycle)]; T = 250 µs, t = 1 µs, LED1 = D10 2) Schreibe ein Testprogramm, dass die Funktion pwm_delay() verwendet um die Helligkeit der LED ‚dreieckfoermig‘ zu steuern, so dass die Helligkeit von 0 auf 100 % ansteigt und schließlich wieder von 100 % auf 0 % absinkt. 3) Erweitere dein Programm so, dass alle vier direkt ansteuerbaren LEDs in der Helligkeit um ‚1/4‘-versetzt angesteuert werden. Also dass Led D10 den 'Dreieck-Zyklus' bei 0 %, Led D11 bei 25% , Led D12 bei 50 % usw. beginnt. */ #include "mbed.h" DigitalOut ledd10(P1_8); DigitalOut ledd11(P1_9); DigitalOut ledd12(P1_10); DigitalOut ledd13(P1_11); // Begin pwm_delay // dutycycle: 0% bis 100 % gibt an, wie hell eine LED leuchtet // Parameter sind die Verzoegerung und die LED's (da die Verzoegerung und LED's unterschiedlich // bei den Funktionsaufrufen sind) void pwm_delay(unsigned int duty_cycle, DigitalOut LED) { int pwm_time_index; // In 2 Perioden (0,5 ms) die LED ein- und ausschalten // Wird hier die Dauer zu lange gewaehlt, erkennt man ein flackern // Wird hier die Dauer zu kurz gewaehlt, erkennt man das unterschiedliche Aufleuchten der LED's nicht mehr for(pwm_time_index = 0; pwm_time_index<2; pwm_time_index++) { // Abfrage, damit der Extremwert (0) fuer das Einschalten der LED zu vernachlaessigen ist if(duty_cycle != 0) { LED = 1; wait_us(duty_cycle); // Zeit, wo die LED eingeschalten ist } // END IF // Abfrage, damit der Extremwert (250) fuer das Ausschalten der LED zu vernachlaessigen ist if(duty_cycle != 250) { LED = 0; wait_us(250-duty_cycle); // Zeit, wo die LED ausgeschalten ist } // END IF } // END for } // END pwm_delay int main() { // Alle Leds ausschalten ledd10=ledd11=ledd12=ledd13 = 0; //Verzoegerungen definieren unsigned int delay1=0; // 0% unsigned int delay2=63; // 25% unsigned int delay3=125; // 50% unsigned int delay4=188; // 75% // Vergleichsvariablen definieren int a; // Vergleich fuer die erste Led (D10) int b; // Vergleich fuer die zweite Led (D11) int c; // Vergleich fuer die dritte Led (D12) int d; // Vergleich fuer die vierte Led (D13) a=b=c=d=251; //Vordefiniert fuer die IF-Anweisungen // Wenn die Variablen 251 sind, wird die LED immer heller // Wenn die Variablen 0 sind, wird die LED immer dunkler // Werden dann seperat umdefiniert, da die LED's unterschiedliche Helligkeiten haben while(1) { //--------------LED D10---------------------\\ // Jeden einzelnen Wert von der Verzoegerung der ersten Led abfragen pwm_delay(delay1, ledd10); // Funktion pwm_delay wird geoeffnet // Und solange die Verzoegerung kleiner ist als die Vergleichsvariable // Soll die Verzoegerung vergroeßert werden if(delay1 < a) { // Die IF-Abfrage hilft, damit das Programm weiß, ob die Verzoegerung rauf- // oder runtergezaehlt wird. Dafuer wurden die Vergleichsvariablen definiert. if(delay1 == (a-1)) { // Wenn a = 0 ist, weiß das Programm, dass jetzt die Verzoegerung hinuntergezaehlt wird // Wird ausgefuehrt, wenn die Verzoegerung 250 erreicht hat a=0; } // END IF // Das ELSE hilft, damit die Verzoegerung nicht ueber den Wert 250 hinaufgezaehlt wird else delay1++; //END ELSE } // END IF // Ist die Vergleichsvariable kleiner als die Verzoegerung, wird die Bedingung der IF-Abfrage nicht // erfuellt und das Programm fuehrt das ELSE aus // Jeden einzelnen Wert von der Verzoegerung der ersten Led abfragen // Und solange die Verzoegerung groeßer ist als die Vergleichsvariable // Soll die Verzoegerung verkleinert werden else { if(delay1 == a) { a=251; } // END IF else delay1--; //END ELSE } //END ELSE //--------------LED D11---------------------\\ // Genau den gleichen Effekt wie mit der ersten Led, nur dass sie mit 25% mehr Helligkeit startet // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle // einzeln zu schalten pwm_delay(delay2, ledd11); // Funktion pwm_delay wird geoeffnet if(delay2 < b) { if(delay2 == (b-1)) { b=0; } // END IF else delay2++; //END ELSE } // END IF // Gleicher Effekt wie bei der Led D10 // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle // einzeln zu schalten else { if(delay2 == b) { b=251; } else delay2--; //END ELSE } //END ELSE //--------------LED D12---------------------\\ // Gleicher Effekt wie bei Led D10, nur dass sie mit 50% mehr Helligkeit startet // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle // einzeln zu schalten pwm_delay(delay3, ledd12); // Funktion pwm_delay wird geoeffnet if(delay3 < c) { if(delay3 == (c-1)) { c=0; } // END IF else delay3++; //END ELSE } // END IF // Gleicher Effekt wie bei der Led D10 // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle // einzeln zu schalten else { if(delay3 == c) { c=251; } // END IF else delay3--; //END ELSE } //END ELSE //--------------LED D13---------------------\\ // Gleicher Effekt wie bei der Led D10, nur dass sie mit 75% mehr Helligkeit startet // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle // einzeln zu schalten pwm_delay(delay4, ledd13); // Funktion pwm_delay wird geoeffnet if(delay4 < d) { if(delay4 == (d-1)) { d=0; } // END IF else delay4++; //END ELSE } // END IF // Gleicher Effekt wie bei der Led D10 // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle // einzeln zu schalten else { if(delay4 == d) { d=251; } // END IF else delay4--; //END ELSE } //END ELSE } }