Forum: Compiler & IDEs Morsecode Generator Problem


von Joshua Martin (Gast)


Lesenswert?

Habe ein Problem mit dem Verständnis dieses Sketch Codes, Teilweise 
verstehe ich allerdings ab " void flashSequence(char* sequence)" sind 
bei mir nur noch Fragezeichen, und wieso wird immer dieses "char*"  vor 
dem Array geschrieben?
1
int ledPin = 8;
2
3
char* letters[] = {
4
  ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",    // A-I
5
  ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",  // J-R
6
  "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."          // S-Z
7
};
8
9
char* numbers[] = {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."};
10
11
int dotDelay = 250;
12
13
void setup()                 
14
{
15
  pinMode(ledPin, OUTPUT);
16
  Serial.begin(9600);
17
}
18
19
void loop()                    
20
{
21
  char ch;
22
  if (Serial.available())      // liegen Daten am USB Port vor?
23
  {
24
    ch = Serial.read();        // einzelne Buchstaben lesen
25
    if (ch >= 'a' && ch <= 'z')
26
    {
27
      flashSequence(letters[ch - 'a']); 
28
    }
29
    else if (ch >= 'A' && ch <= 'Z')
30
    {
31
      flashSequence(letters[ch - 'A']);
32
    }
33
    else if (ch >= '0' && ch <= '9')
34
    {
35
      flashSequence(numbers[ch - '0']);
36
    }
37
    else if (ch == ' ')
38
    {
39
     delay(dotDelay * 4);      
40
    }
41
  }
42
}
43
44
void flashSequence(char* sequence)
45
{
46
   int i = 0;
47
   while (sequence[i] != NULL)
48
   {
49
       flashDotOrDash(sequence[i]);
50
       i++;
51
   }
52
   delay(dotDelay * 3);    // Abstand zwischen den Buchstaben
53
}
54
55
void flashDotOrDash(char dotOrDash)
56
{
57
  digitalWrite(ledPin, HIGH);
58
  if (dotOrDash == '.')
59
  {
60
    delay(dotDelay);           
61
  }
62
  else // wenn es ein Strich ist 3* so lang
63
  {
64
    delay(dotDelay * 3);           
65
  }
66
  digitalWrite(ledPin, LOW);    
67
  delay(dotDelay); // Abstand zwischen Blinksignalen
68
}

von Falk S. (falkschilling)


Lesenswert?

Joshua Martin schrieb:
> Habe ein Problem mit dem Verständnis dieses Sketch Codes, Teilweise
> verstehe ich allerdings ab " void flashSequence(char* sequence)" sind
> bei mir nur noch Fragezeichen, und wieso wird immer dieses "char*"  vor
> dem Array geschrieben?

Weil es ein Array von Pointern sein muss. Die String-Literale werden in 
dein Codesegment im Controller abgeleget und sind für den Compiler nur 
Adressen. Lies mal ein zum Thema Strings, am besten bei den Herren 
Kernighan und Ritchie.

von Fabian O. (xfr)


Lesenswert?

Dir fehlt das Grundverständnis zu Strings in C. Der Rest des Programms 
dürfte dann ziemlich selbsterklärend sein, ansonsten frag nochmal 
konkreter nach.

Eine Einstieg wäre vielleicht dieser Artikel:
http://www.mikrocontroller.net/articles/String-Verarbeitung_in_C

Würde Dir aber auch unbedingt empfehlen, ein C-Buch durchzuarbeiten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.