1 | void Spracherkennung()
|
2 | {
|
3 | //Schreibe auf Display welchen Modus:
|
4 | LCD_sprach;
|
5 |
|
6 | //Variablen-definitionen
|
7 | uint8_t getSpokenWord = 0;
|
8 |
|
9 | //Main-Loop:*********************************************************************
|
10 | while( !((getSpokenWord < 110) && (getSpokenWord > 100)) && !cancel_mode ) //Position 8
|
11 | //Führe Spracherkennung aus solang bis Beenden gesagt
|
12 | //wurde oder cancel-Mode Taste gedrückt wurde
|
13 | {
|
14 | //getSpokenWord = GetADC_8bit(7);
|
15 |
|
16 | if( (getSpokenWord < 10) && (getSpokenWord > 2)) //Wenn auf Position1 bekommt man einen DAC Wert von <10
|
17 | {
|
18 | Linienverfolgung();
|
19 | }
|
20 | else if( (getSpokenWord < 20) && (getSpokenWord > 10) ) //Position2
|
21 | {
|
22 | Ausweichmodus();
|
23 | }
|
24 | else if( (getSpokenWord < 30) && (getSpokenWord > 20) ) //Position3
|
25 | {
|
26 | Linienverfolgung_Ausweichmodus();
|
27 | }
|
28 | else if( (getSpokenWord < 40) && (getSpokenWord > 30) ) //Position4
|
29 | {
|
30 | Funksteuerung();
|
31 | }
|
32 | else
|
33 | ;
|
34 | lcd_setcursor(0,1);
|
35 | if(cancel_mode)
|
36 | lcd_string("true");
|
37 | else
|
38 | lcd_string("false");
|
39 | }
|
40 | //back***************************************************************************
|
41 | LCD_Mode_Verlassen;
|
42 |
|
43 | _delay_ms(50); //Wenn cancel gedrückt wurde dann soll entprellt werden
|
44 | cancel_mode = false; // Damit können jetzt andere Unterprogramme ausgeführt werden
|
45 | }
|
Wenn ich diesen Teil:
1 | lcd_setcursor(0,1);
|
2 | if(cancel_mode)
|
3 | lcd_string("true");
|
4 | else
|
5 | lcd_string("false");
|
weglasse, dann komme ich auch nicht raus wenn cancel_mode true ist.
Problembeschreibung:
Ich habe eine Taste die ich auf den Interrupt führe. Wenn die steigende
Flanke kommt, dann soll cancel_mode = true gesetzt werden.
1 | ISR(INT0_vect)
|
2 | {
|
3 | cancel_mode = true;
|
4 | }
|
Danach springt das Programm wieder zur While() schleife.
Und ich sehe am LCD immer noch MODUS: Sprach.
erst wenn ich diesen Teil:
1 | if(cancel_mode)
|
2 | lcd_string("true");
|
3 | else
|
4 | lcd_string("false");
|
wieder dazugebe dann komme ich raus und sehe am LCD MODUS Verlassen.
_____________________________________________________________________
Die Variable cancel_mode wird von sonst keinem Interrupt beeinflusst,
also nur am Int0.
Was kann denn die Ursache dafür sein?
Kann es sein, dass das LCD einfriert aus irgendeinem Grund? Weil es ist
wirklich nur dieser Teil, der darüber entscheidet ob ich rauskomme oder
nicht.
Ich danke schon im Voraus für Support!
lg andy