Test (c)
Dependencies: mbed
Revision 0:288836a35837, committed 2015-12-14
- Comitter:
- heinrich_kevin
- Date:
- Mon Dec 14 12:42:39 2015 +0000
- Commit message:
- Test (c)
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Dec 14 12:42:39 2015 +0000 @@ -0,0 +1,239 @@ +// 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 + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Dec 14 12:42:39 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/165afa46840b \ No newline at end of file