Mijn vraag
ik probeer een morse code intrepeter te maken waarbij je in keill uvision codeer app voor de stm32 een programma runt en de putty opent een 3 letter woord in toetst en dan de morse code terug krijg dat werkt tot nu toe, maar nu wil ik de lampjes laten branden door middel van de . of - die in de morse terug komt in een interrupt van timer 2.
daarna wil ik het zelfde doen met geluid maar eerst de ledjes, ik ga nu in de interrupt vanuit het verwerken, doormiddel van een switch case.
Relevante software en hardware die ik gebruik
de hardware die ik gebruik is de stm32f0 discovery een mini amplyfyer speaker, een ledje pc8 op de stm32 zelf en potentiometer.
Wat ik al gevonden of geprobeerd heb
ik heb al zo veel geprobeerd, maar het werkt niet
dit is de timer interrupt
ik probeer een morse code intrepeter te maken waarbij je in keill uvision codeer app voor de stm32 een programma runt en de putty opent een 3 letter woord in toetst en dan de morse code terug krijg dat werkt tot nu toe, maar nu wil ik de lampjes laten branden door middel van de . of - die in de morse terug komt in een interrupt van timer 2.
daarna wil ik het zelfde doen met geluid maar eerst de ledjes, ik ga nu in de interrupt vanuit het verwerken, doormiddel van een switch case.
Relevante software en hardware die ik gebruik
de hardware die ik gebruik is de stm32f0 discovery een mini amplyfyer speaker, een ledje pc8 op de stm32 zelf en potentiometer.
Wat ik al gevonden of geprobeerd heb
ik heb al zo veel geprobeerd, maar het werkt niet
dit is de timer interrupt
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| const uint8_t DOT_DURATION = 1; const uint8_t DASH_DURATION = 3; const uint8_t SYMBOL_PAUSE = 1; const uint8_t LETTER_PAUSE = 3; const uint8_t WORD_PAUSE = 7; void TIM2_IRQHandler(void) { // Check if the update interrupt flag is set //PC8_ON(); //test interupt //USART_Putstr("Interrupt\n"); if (TIM2->SR & TIM_SR_UIF) { // Clear the update interrupt flag TIM2->SR &= ~TIM_SR_UIF; //PC8_ON(); //test interupt // Morse code interpretation logica //if (newDataAvailable) { // Verwerk de data alleen als er nieuwe data beschikbaar is switch (morseState) { case 0: if (newDataAvailable) { USART_Putstr("case 0 - Wacht op data\n"); // Verwerk de data hier... newDataAvailable = false; // Reset flag na verwerking break; case 1: // Dot USART_Putstr("case1\n\n"); // Turn on the LED (PC8) for the Dot duration PC8_ON(); // Set the new auto-reload value for the timer based on the Morse code duration TIM2->ARR = DOT_DURATION * speedFactor * PRESCALER - 1; break; case 2: // Pause between Dash and Next Element and between Dot and Dash USART_Putstr("case 2\n\n"); // Turn off the LED PC8_OFF(); // Set the new auto-reload value for the timer based on the pause duration TIM2->ARR = SYMBOL_PAUSE * speedFactor * PRESCALER - 1; break; case 3: // Dash USART_Putstr("case 3\n\n"); // Turn on the LED (PC8) for the Dash duration PC8_ON(); // Set the new auto-reload value for the timer based on the Morse code duration TIM2->ARR = DASH_DURATION * speedFactor * PRESCALER - 1; break; case 4: // letter //PC8_ON(); USART_Putstr("case 4\n\n"); // Set the new auto-reload value for the timer based on the pause duration TIM2->ARR = LETTER_PAUSE * speedFactor * PRESCALER - 1; // Turn off the LED PC8_OFF(); break; case 5: // Pause between Words USART_Putstr("case 5\n\n"); // Turn off the LED PC8_OFF(); // Set the new auto-reload value for the timer based on the word pause duration TIM2->ARR = WORD_PAUSE * speedFactor * PRESCALER - 1; break; default: // Do nothing for other states break; } } } // Als er geen meer data is om te verwerken morseState = 0; // Ga terug naar de wachtstatus of een andere logische beginstatus newDataAvailable = false; // Reset de flag omdat we wachten op nieuwe data } |
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
| void Transform_inputChar_to_output(void) { int i,j; char input, output; for (j = 0; RxBuffer[j] != '\0'; j++) { input = RxBuffer[j]; output = morseBuffer[morseWriteIndex]; // Stop als de buffer vol is if ((morseWriteIndex + 1) % MORSE_BUFFER_SIZE == morseReadIndex) { return; } //test of buffer wordt verwerkt USART_Putstr("input: "); USART_Putstr(&input); USART_Putstr("\n"); // Check if the input is a valid letter if ((input >= 'A' && input <= 'Z')) { // Lookup Morse code for the input letter const char* morseCode = morsealfabet[input - 'A']; // Process Morse code and fill the buffer for (i = 0; morseCode[i] != '\0'; i++) { newDataAvailable = true; if (morseCode[i] == '.') { morseBuffer[morseWriteIndex++] = DOT_DURATION; morseState = 1; //gaat naar case 0 in it.c } else if (morseCode[i] == '-') { morseBuffer[morseWriteIndex++] = DASH_DURATION; morseState = 3; // gaat naar case 2 in it.c } morseBuffer[morseWriteIndex++] = SYMBOL_PAUSE; morseState = 2; //gaat naar case 1 in it.c } // Add a pause between letters morseBuffer[morseWriteIndex++] = LETTER_PAUSE; morseState = 4; USART_Putstr("morse: "); USART_Putstr((char*)morseCode); USART_Putstr("\n"); } else if (input >= 'a' && input <= 'z') { // Lookup Morse code for the input letter const char* morseCode = morsealfabet[input - 'a']; // Process Morse code and fill the buffer for (i = 0; morseCode[i] != '\0'; i++) { newDataAvailable = true; if (morseCode[i] == '.') { morseBuffer[morseWriteIndex++] = DOT_DURATION; morseState = 1; } else if (morseCode[i] == '-') { morseBuffer[morseWriteIndex++] = DASH_DURATION; morseState = 3; } morseBuffer[morseWriteIndex++] = SYMBOL_PAUSE; morseState = 2; } // Add a pause between letters morseBuffer[morseWriteIndex++] = LETTER_PAUSE; morseState = 4; USART_Putstr("morse: "); USART_Putstr((char*)morseCode); USART_Putstr("\n"); } // Reset read index if necessary if (morseWriteIndex != morseReadIndex) { morseReadIndex = (morseReadIndex + 1) % MORSE_BUFFER_SIZE; } //morseState = 0; } USART_Putstr("\n"); } |
[ Voor 82% gewijzigd door RobIII op 02-03-2024 23:04 . Reden: Syntax highlighting ]