Test (c)
Dependencies: mbed
main.cpp@0:288836a35837, 2015-12-14 (annotated)
- Committer:
- heinrich_kevin
- Date:
- Mon Dec 14 12:42:39 2015 +0000
- Revision:
- 0:288836a35837
Test (c)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
heinrich_kevin | 0:288836a35837 | 1 | // Kevin Heinrich, 3AHEL, Begonnen am: 30.11.2015 |
heinrich_kevin | 0:288836a35837 | 2 | // BERTL14 |
heinrich_kevin | 0:288836a35837 | 3 | // selber Entwickelt |
heinrich_kevin | 0:288836a35837 | 4 | |
heinrich_kevin | 0:288836a35837 | 5 | /* |
heinrich_kevin | 0:288836a35837 | 6 | Aufgabenstellung: |
heinrich_kevin | 0:288836a35837 | 7 | Es soll eine alternativ Funktion entwickelt werden, die die PWM-Funktion fuer die Led's D10-D13 ersetzen kann |
heinrich_kevin | 0:288836a35837 | 8 | |
heinrich_kevin | 0:288836a35837 | 9 | 1) |
heinrich_kevin | 0:288836a35837 | 10 | Schreiben der alternativ PWM-Funktion mit wait, wait_ms bzw. wait_us |
heinrich_kevin | 0:288836a35837 | 11 | [void pwm_delay(unsigned int duty_cycle)]; |
heinrich_kevin | 0:288836a35837 | 12 | T = 250 µs, t = 1 µs, LED1 = D10 |
heinrich_kevin | 0:288836a35837 | 13 | |
heinrich_kevin | 0:288836a35837 | 14 | 2) |
heinrich_kevin | 0:288836a35837 | 15 | Schreibe ein Testprogramm, dass die Funktion pwm_delay() verwendet um die Helligkeit der LED ‚dreieckfoermig‘ zu steuern, |
heinrich_kevin | 0:288836a35837 | 16 | so dass die Helligkeit von 0 auf 100 % ansteigt und schließlich wieder von 100 % auf 0 % absinkt. |
heinrich_kevin | 0:288836a35837 | 17 | |
heinrich_kevin | 0:288836a35837 | 18 | 3) |
heinrich_kevin | 0:288836a35837 | 19 | Erweitere dein Programm so, dass alle vier direkt ansteuerbaren LEDs in der Helligkeit um ‚1/4‘-versetzt angesteuert werden. |
heinrich_kevin | 0:288836a35837 | 20 | Also dass Led D10 den 'Dreieck-Zyklus' bei 0 %, Led D11 bei 25% , Led D12 bei 50 % usw. beginnt. |
heinrich_kevin | 0:288836a35837 | 21 | */ |
heinrich_kevin | 0:288836a35837 | 22 | |
heinrich_kevin | 0:288836a35837 | 23 | #include "mbed.h" |
heinrich_kevin | 0:288836a35837 | 24 | |
heinrich_kevin | 0:288836a35837 | 25 | DigitalOut ledd10(P1_8); |
heinrich_kevin | 0:288836a35837 | 26 | DigitalOut ledd11(P1_9); |
heinrich_kevin | 0:288836a35837 | 27 | DigitalOut ledd12(P1_10); |
heinrich_kevin | 0:288836a35837 | 28 | DigitalOut ledd13(P1_11); |
heinrich_kevin | 0:288836a35837 | 29 | // Begin pwm_delay |
heinrich_kevin | 0:288836a35837 | 30 | // dutycycle: 0% bis 100 % gibt an, wie hell eine LED leuchtet |
heinrich_kevin | 0:288836a35837 | 31 | |
heinrich_kevin | 0:288836a35837 | 32 | // Parameter sind die Verzoegerung und die LED's (da die Verzoegerung und LED's unterschiedlich |
heinrich_kevin | 0:288836a35837 | 33 | // bei den Funktionsaufrufen sind) |
heinrich_kevin | 0:288836a35837 | 34 | void pwm_delay(unsigned int duty_cycle, DigitalOut LED) |
heinrich_kevin | 0:288836a35837 | 35 | { |
heinrich_kevin | 0:288836a35837 | 36 | int pwm_time_index; |
heinrich_kevin | 0:288836a35837 | 37 | // In 2 Perioden (0,5 ms) die LED ein- und ausschalten |
heinrich_kevin | 0:288836a35837 | 38 | // Wird hier die Dauer zu lange gewaehlt, erkennt man ein flackern |
heinrich_kevin | 0:288836a35837 | 39 | // Wird hier die Dauer zu kurz gewaehlt, erkennt man das unterschiedliche Aufleuchten der LED's nicht mehr |
heinrich_kevin | 0:288836a35837 | 40 | for(pwm_time_index = 0; pwm_time_index<2; pwm_time_index++) |
heinrich_kevin | 0:288836a35837 | 41 | { |
heinrich_kevin | 0:288836a35837 | 42 | // Abfrage, damit der Extremwert (0) fuer das Einschalten der LED zu vernachlaessigen ist |
heinrich_kevin | 0:288836a35837 | 43 | if(duty_cycle != 0) |
heinrich_kevin | 0:288836a35837 | 44 | { |
heinrich_kevin | 0:288836a35837 | 45 | LED = 1; |
heinrich_kevin | 0:288836a35837 | 46 | wait_us(duty_cycle); // Zeit, wo die LED eingeschalten ist |
heinrich_kevin | 0:288836a35837 | 47 | } |
heinrich_kevin | 0:288836a35837 | 48 | // END IF |
heinrich_kevin | 0:288836a35837 | 49 | // Abfrage, damit der Extremwert (250) fuer das Ausschalten der LED zu vernachlaessigen ist |
heinrich_kevin | 0:288836a35837 | 50 | if(duty_cycle != 250) |
heinrich_kevin | 0:288836a35837 | 51 | { |
heinrich_kevin | 0:288836a35837 | 52 | LED = 0; |
heinrich_kevin | 0:288836a35837 | 53 | wait_us(250-duty_cycle); // Zeit, wo die LED ausgeschalten ist |
heinrich_kevin | 0:288836a35837 | 54 | } |
heinrich_kevin | 0:288836a35837 | 55 | // END IF |
heinrich_kevin | 0:288836a35837 | 56 | } |
heinrich_kevin | 0:288836a35837 | 57 | // END for |
heinrich_kevin | 0:288836a35837 | 58 | |
heinrich_kevin | 0:288836a35837 | 59 | } |
heinrich_kevin | 0:288836a35837 | 60 | |
heinrich_kevin | 0:288836a35837 | 61 | // END pwm_delay |
heinrich_kevin | 0:288836a35837 | 62 | |
heinrich_kevin | 0:288836a35837 | 63 | int main() |
heinrich_kevin | 0:288836a35837 | 64 | { |
heinrich_kevin | 0:288836a35837 | 65 | // Alle Leds ausschalten |
heinrich_kevin | 0:288836a35837 | 66 | ledd10=ledd11=ledd12=ledd13 = 0; |
heinrich_kevin | 0:288836a35837 | 67 | //Verzoegerungen definieren |
heinrich_kevin | 0:288836a35837 | 68 | unsigned int delay1=0; // 0% |
heinrich_kevin | 0:288836a35837 | 69 | unsigned int delay2=63; // 25% |
heinrich_kevin | 0:288836a35837 | 70 | unsigned int delay3=125; // 50% |
heinrich_kevin | 0:288836a35837 | 71 | unsigned int delay4=188; // 75% |
heinrich_kevin | 0:288836a35837 | 72 | |
heinrich_kevin | 0:288836a35837 | 73 | // Vergleichsvariablen definieren |
heinrich_kevin | 0:288836a35837 | 74 | int a; // Vergleich fuer die erste Led (D10) |
heinrich_kevin | 0:288836a35837 | 75 | int b; // Vergleich fuer die zweite Led (D11) |
heinrich_kevin | 0:288836a35837 | 76 | int c; // Vergleich fuer die dritte Led (D12) |
heinrich_kevin | 0:288836a35837 | 77 | int d; // Vergleich fuer die vierte Led (D13) |
heinrich_kevin | 0:288836a35837 | 78 | |
heinrich_kevin | 0:288836a35837 | 79 | a=b=c=d=251; //Vordefiniert fuer die IF-Anweisungen |
heinrich_kevin | 0:288836a35837 | 80 | // Wenn die Variablen 251 sind, wird die LED immer heller |
heinrich_kevin | 0:288836a35837 | 81 | // Wenn die Variablen 0 sind, wird die LED immer dunkler |
heinrich_kevin | 0:288836a35837 | 82 | // Werden dann seperat umdefiniert, da die LED's unterschiedliche Helligkeiten haben |
heinrich_kevin | 0:288836a35837 | 83 | |
heinrich_kevin | 0:288836a35837 | 84 | while(1) |
heinrich_kevin | 0:288836a35837 | 85 | { |
heinrich_kevin | 0:288836a35837 | 86 | //--------------LED D10---------------------\\ |
heinrich_kevin | 0:288836a35837 | 87 | |
heinrich_kevin | 0:288836a35837 | 88 | // Jeden einzelnen Wert von der Verzoegerung der ersten Led abfragen |
heinrich_kevin | 0:288836a35837 | 89 | pwm_delay(delay1, ledd10); // Funktion pwm_delay wird geoeffnet |
heinrich_kevin | 0:288836a35837 | 90 | // Und solange die Verzoegerung kleiner ist als die Vergleichsvariable |
heinrich_kevin | 0:288836a35837 | 91 | // Soll die Verzoegerung vergroeßert werden |
heinrich_kevin | 0:288836a35837 | 92 | if(delay1 < a) |
heinrich_kevin | 0:288836a35837 | 93 | { |
heinrich_kevin | 0:288836a35837 | 94 | // Die IF-Abfrage hilft, damit das Programm weiß, ob die Verzoegerung rauf- |
heinrich_kevin | 0:288836a35837 | 95 | // oder runtergezaehlt wird. Dafuer wurden die Vergleichsvariablen definiert. |
heinrich_kevin | 0:288836a35837 | 96 | if(delay1 == (a-1)) |
heinrich_kevin | 0:288836a35837 | 97 | { |
heinrich_kevin | 0:288836a35837 | 98 | // Wenn a = 0 ist, weiß das Programm, dass jetzt die Verzoegerung hinuntergezaehlt wird |
heinrich_kevin | 0:288836a35837 | 99 | // Wird ausgefuehrt, wenn die Verzoegerung 250 erreicht hat |
heinrich_kevin | 0:288836a35837 | 100 | a=0; |
heinrich_kevin | 0:288836a35837 | 101 | } |
heinrich_kevin | 0:288836a35837 | 102 | // END IF |
heinrich_kevin | 0:288836a35837 | 103 | |
heinrich_kevin | 0:288836a35837 | 104 | // Das ELSE hilft, damit die Verzoegerung nicht ueber den Wert 250 hinaufgezaehlt wird |
heinrich_kevin | 0:288836a35837 | 105 | else |
heinrich_kevin | 0:288836a35837 | 106 | delay1++; |
heinrich_kevin | 0:288836a35837 | 107 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 108 | } |
heinrich_kevin | 0:288836a35837 | 109 | // END IF |
heinrich_kevin | 0:288836a35837 | 110 | |
heinrich_kevin | 0:288836a35837 | 111 | // Ist die Vergleichsvariable kleiner als die Verzoegerung, wird die Bedingung der IF-Abfrage nicht |
heinrich_kevin | 0:288836a35837 | 112 | // erfuellt und das Programm fuehrt das ELSE aus |
heinrich_kevin | 0:288836a35837 | 113 | // Jeden einzelnen Wert von der Verzoegerung der ersten Led abfragen |
heinrich_kevin | 0:288836a35837 | 114 | // Und solange die Verzoegerung groeßer ist als die Vergleichsvariable |
heinrich_kevin | 0:288836a35837 | 115 | // Soll die Verzoegerung verkleinert werden |
heinrich_kevin | 0:288836a35837 | 116 | else |
heinrich_kevin | 0:288836a35837 | 117 | { |
heinrich_kevin | 0:288836a35837 | 118 | if(delay1 == a) |
heinrich_kevin | 0:288836a35837 | 119 | { |
heinrich_kevin | 0:288836a35837 | 120 | a=251; |
heinrich_kevin | 0:288836a35837 | 121 | } |
heinrich_kevin | 0:288836a35837 | 122 | // END IF |
heinrich_kevin | 0:288836a35837 | 123 | |
heinrich_kevin | 0:288836a35837 | 124 | else |
heinrich_kevin | 0:288836a35837 | 125 | delay1--; |
heinrich_kevin | 0:288836a35837 | 126 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 127 | } |
heinrich_kevin | 0:288836a35837 | 128 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 129 | |
heinrich_kevin | 0:288836a35837 | 130 | //--------------LED D11---------------------\\ |
heinrich_kevin | 0:288836a35837 | 131 | |
heinrich_kevin | 0:288836a35837 | 132 | // Genau den gleichen Effekt wie mit der ersten Led, nur dass sie mit 25% mehr Helligkeit startet |
heinrich_kevin | 0:288836a35837 | 133 | // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle |
heinrich_kevin | 0:288836a35837 | 134 | // einzeln zu schalten |
heinrich_kevin | 0:288836a35837 | 135 | pwm_delay(delay2, ledd11); // Funktion pwm_delay wird geoeffnet |
heinrich_kevin | 0:288836a35837 | 136 | if(delay2 < b) |
heinrich_kevin | 0:288836a35837 | 137 | { |
heinrich_kevin | 0:288836a35837 | 138 | if(delay2 == (b-1)) |
heinrich_kevin | 0:288836a35837 | 139 | { |
heinrich_kevin | 0:288836a35837 | 140 | b=0; |
heinrich_kevin | 0:288836a35837 | 141 | } |
heinrich_kevin | 0:288836a35837 | 142 | // END IF |
heinrich_kevin | 0:288836a35837 | 143 | |
heinrich_kevin | 0:288836a35837 | 144 | else |
heinrich_kevin | 0:288836a35837 | 145 | delay2++; |
heinrich_kevin | 0:288836a35837 | 146 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 147 | } |
heinrich_kevin | 0:288836a35837 | 148 | // END IF |
heinrich_kevin | 0:288836a35837 | 149 | |
heinrich_kevin | 0:288836a35837 | 150 | // Gleicher Effekt wie bei der Led D10 |
heinrich_kevin | 0:288836a35837 | 151 | // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle |
heinrich_kevin | 0:288836a35837 | 152 | // einzeln zu schalten |
heinrich_kevin | 0:288836a35837 | 153 | else |
heinrich_kevin | 0:288836a35837 | 154 | { |
heinrich_kevin | 0:288836a35837 | 155 | if(delay2 == b) |
heinrich_kevin | 0:288836a35837 | 156 | { |
heinrich_kevin | 0:288836a35837 | 157 | b=251; |
heinrich_kevin | 0:288836a35837 | 158 | } |
heinrich_kevin | 0:288836a35837 | 159 | else |
heinrich_kevin | 0:288836a35837 | 160 | delay2--; |
heinrich_kevin | 0:288836a35837 | 161 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 162 | } |
heinrich_kevin | 0:288836a35837 | 163 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 164 | |
heinrich_kevin | 0:288836a35837 | 165 | //--------------LED D12---------------------\\ |
heinrich_kevin | 0:288836a35837 | 166 | |
heinrich_kevin | 0:288836a35837 | 167 | // Gleicher Effekt wie bei Led D10, nur dass sie mit 50% mehr Helligkeit startet |
heinrich_kevin | 0:288836a35837 | 168 | // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle |
heinrich_kevin | 0:288836a35837 | 169 | // einzeln zu schalten |
heinrich_kevin | 0:288836a35837 | 170 | pwm_delay(delay3, ledd12); // Funktion pwm_delay wird geoeffnet |
heinrich_kevin | 0:288836a35837 | 171 | if(delay3 < c) |
heinrich_kevin | 0:288836a35837 | 172 | { |
heinrich_kevin | 0:288836a35837 | 173 | if(delay3 == (c-1)) |
heinrich_kevin | 0:288836a35837 | 174 | { |
heinrich_kevin | 0:288836a35837 | 175 | c=0; |
heinrich_kevin | 0:288836a35837 | 176 | } |
heinrich_kevin | 0:288836a35837 | 177 | // END IF |
heinrich_kevin | 0:288836a35837 | 178 | |
heinrich_kevin | 0:288836a35837 | 179 | else |
heinrich_kevin | 0:288836a35837 | 180 | delay3++; |
heinrich_kevin | 0:288836a35837 | 181 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 182 | } |
heinrich_kevin | 0:288836a35837 | 183 | // END IF |
heinrich_kevin | 0:288836a35837 | 184 | |
heinrich_kevin | 0:288836a35837 | 185 | // Gleicher Effekt wie bei der Led D10 |
heinrich_kevin | 0:288836a35837 | 186 | // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle |
heinrich_kevin | 0:288836a35837 | 187 | // einzeln zu schalten |
heinrich_kevin | 0:288836a35837 | 188 | else |
heinrich_kevin | 0:288836a35837 | 189 | { |
heinrich_kevin | 0:288836a35837 | 190 | if(delay3 == c) |
heinrich_kevin | 0:288836a35837 | 191 | { |
heinrich_kevin | 0:288836a35837 | 192 | c=251; |
heinrich_kevin | 0:288836a35837 | 193 | } |
heinrich_kevin | 0:288836a35837 | 194 | // END IF |
heinrich_kevin | 0:288836a35837 | 195 | |
heinrich_kevin | 0:288836a35837 | 196 | else |
heinrich_kevin | 0:288836a35837 | 197 | delay3--; |
heinrich_kevin | 0:288836a35837 | 198 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 199 | } |
heinrich_kevin | 0:288836a35837 | 200 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 201 | |
heinrich_kevin | 0:288836a35837 | 202 | //--------------LED D13---------------------\\ |
heinrich_kevin | 0:288836a35837 | 203 | |
heinrich_kevin | 0:288836a35837 | 204 | // Gleicher Effekt wie bei der Led D10, nur dass sie mit 75% mehr Helligkeit startet |
heinrich_kevin | 0:288836a35837 | 205 | // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle |
heinrich_kevin | 0:288836a35837 | 206 | // einzeln zu schalten |
heinrich_kevin | 0:288836a35837 | 207 | pwm_delay(delay4, ledd13); // Funktion pwm_delay wird geoeffnet |
heinrich_kevin | 0:288836a35837 | 208 | if(delay4 < d) |
heinrich_kevin | 0:288836a35837 | 209 | { |
heinrich_kevin | 0:288836a35837 | 210 | if(delay4 == (d-1)) |
heinrich_kevin | 0:288836a35837 | 211 | { |
heinrich_kevin | 0:288836a35837 | 212 | d=0; |
heinrich_kevin | 0:288836a35837 | 213 | } |
heinrich_kevin | 0:288836a35837 | 214 | // END IF |
heinrich_kevin | 0:288836a35837 | 215 | |
heinrich_kevin | 0:288836a35837 | 216 | else |
heinrich_kevin | 0:288836a35837 | 217 | delay4++; |
heinrich_kevin | 0:288836a35837 | 218 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 219 | } |
heinrich_kevin | 0:288836a35837 | 220 | // END IF |
heinrich_kevin | 0:288836a35837 | 221 | |
heinrich_kevin | 0:288836a35837 | 222 | // Gleicher Effekt wie bei der Led D10 |
heinrich_kevin | 0:288836a35837 | 223 | // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle |
heinrich_kevin | 0:288836a35837 | 224 | // einzeln zu schalten |
heinrich_kevin | 0:288836a35837 | 225 | else |
heinrich_kevin | 0:288836a35837 | 226 | { |
heinrich_kevin | 0:288836a35837 | 227 | if(delay4 == d) |
heinrich_kevin | 0:288836a35837 | 228 | { |
heinrich_kevin | 0:288836a35837 | 229 | d=251; |
heinrich_kevin | 0:288836a35837 | 230 | } |
heinrich_kevin | 0:288836a35837 | 231 | // END IF |
heinrich_kevin | 0:288836a35837 | 232 | |
heinrich_kevin | 0:288836a35837 | 233 | else |
heinrich_kevin | 0:288836a35837 | 234 | delay4--; |
heinrich_kevin | 0:288836a35837 | 235 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 236 | } |
heinrich_kevin | 0:288836a35837 | 237 | //END ELSE |
heinrich_kevin | 0:288836a35837 | 238 | } |
heinrich_kevin | 0:288836a35837 | 239 | } |