// Version 1.0 Manfred Weber DK1MWB (G35) // include the library code: #include // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); byte text[] = "Herzlich Willkommen zum Arduinoseminar wuenscht der VFDB mit dem Ortsverband Z12 und der DARC mit den Ortsverbaenden G10 und G35"; //######################### A U S G A B E T E X T ############################################################################## int ledPin = 13; // Ausgabe an pin D13 int tempo; // (WpM = Wörter pro Minute) (BpM = Buchstaben pro Minute) // 1200 ms ca. 1 WpM ca. 5 BpM // 600 ms ca. 2 WpM ca. 10 BpM // 240 ms ca. 5 WpM ca. 25 BpM // 120 ms ca. 10 WpM ca. 50 BpM // 100 ms ca. 12 WpM ca. 60 BpM // 60 ms ca. 20 WpM ca. 100 BpM // 22 ms ca. 55 WpM ca. 275 BpM int PotiA7 =A7; // Potentiometer am analogen Pin 7 int Lautsprecher = 9; // Lautsprecher an Pin 9 int TonHoehe = 700; // Tonhöhe = 700 Hz void setup () { pinMode(ledPin, OUTPUT); lcd.begin(16,2); // DCR160004 } // Serial.begin(9600);//****************************************************************************************************************************** void start(){ digitalWrite(ledPin, LOW); lcd.clear(); // DCR160004 lcd.setCursor(0,0); // DCR160004 // Serial.println(); } //****************************************************************************************************************************** //****************************************************************************************************************************** void di() { // Punkt innerhalb eines Zeichens digitalWrite(ledPin, HIGH); // LED 13 An, PTT An tone(Lautsprecher,TonHoehe); // DCR160003: Lautsprecher An delay(1 * tempo); // Länge Punkt = 1 * tempo digitalWrite(ledPin, LOW); // LED Aus, PTT Aus noTone(Lautsprecher); // DCR160003: Lautsprecher Aus delay(1 * tempo); // Länge zwischen Punkt und Strich = 1 * tempo = 1 * Pause } //****************************************************************************************************************************** void dit() { // Punkt am Ende des Zeichens digitalWrite(ledPin, HIGH); // LED 13 An, PTT AN tone(Lautsprecher,TonHoehe); // DCR160003: Lautsprecher An delay(1 * tempo); // Länge Punkt = 1 * tempo digitalWrite(ledPin, LOW); // LED Aus, PTT Aus noTone(Lautsprecher); // DCR160003: Lautsprecher Aus delay(1 * tempo); // Länge zwischen Punkt und Strich = 1 * tempo = 1 * Pause } //****************************************************************************************************************************** void dah() { // Strich digitalWrite(ledPin, HIGH); // LED 13 An, PTT AN tone(Lautsprecher,TonHoehe); // DCR160003: Lautsprecher An delay(3 * tempo); // Länge Strich = 3 * tempo digitalWrite(ledPin, LOW); // LED Aus, PTT Aus noTone(Lautsprecher); // DCR160003: Lautsprecher Aus delay(1 * tempo); // Länge zwischen Punkt und Strich = 1 * tempo = 1 * Pause } //****************************************************************************************************************************** // Abstand zwischen den Buchstaben 3 Punkte // Abstand zwischen den Worten 7 Punkte //****************************************************************************************************************************** void senden(byte Buchstabe) { lcd.write(Buchstabe); // DCR160004: Ausgabe auf LCD Display //Serial.write(Buchstabe); // Ausgabe Terminalprogramm switch (Buchstabe){ case 'a': case 'A': di(); dah(); break; case 'b': case 'B': dah(); di(); di(); dit(); break; case 'c': case 'C': dah(); di(); dah(); dit(); break; case 'd': case 'D': dah(); di(); dit(); break; case 'e': case 'E': dit(); break; case 'f': case 'F': di(); di(); dah(); dit(); break; case 'g': case 'G': dah(); dah(); dit(); break; case 'h': case 'H': di(); di(); di(); dit(); break; case 'i': case 'I': di(); dit(); break; case 'j': case 'J': di(); dah(); dah(); dah(); break; case 'k': case 'K': dah(); di(); dah(); break; case 'l': case 'L': di(); dah(); di(); dit(); break; case 'm': case 'M': dah(); dah(); break; case 'n': case 'N': dah(); dit(); break; case 'o': case 'O': dah(); dah(); dah(); break; case 'p': case 'P': di(); dah(); dah(); dit(); break; case 'q': case 'Q': dah(); dah(); di(); dah(); break; case 'r': case 'R': di(); dah(); dit(); break; case 's': case 'S': di(); di(); dit(); break; case 't': case 'T': dah(); break; case 'u': case 'U': di(); di(); dah(); break; case 'v': case 'V': di(); di(); di(); dah(); break; case 'w': case 'W': di(); dah(); dah(); break; case 'x': case 'X': dah(); di(); di(); dah(); break; case 'y': case 'Y': dah(); di(); dah(); dah(); break; case 'z': case 'Z': dah(); dah(); di(); dit(); break; case '1': di(); dah(); dah(); dah(); dah(); break; case '2': di(); di(); dah(); dah(); dah(); break; case '3': di(); di(); di(); dah(); dah(); break; case '4': di(); di(); di(); di(); dah(); break; case '5': di(); di(); di(); di(); dit(); break; case '6': dah(); di(); di(); di(); dit(); break; case '7': dah(); dah(); di(); di(); dit(); break; case '8': dah(); dah(); dah(); di(); dit(); break; case '9': dah(); dah(); dah(); dah(); dit(); break; case '0': dah(); dah(); dah(); dah(); dah(); break; case '=': // wird auch als BT (Pause) definiert. dah(); di(); di(); di(); dah(); break; //****************************************************************************************************************************** // zusätzliche Zeichen hier einbauen // case ' ': // neues ASCII - Zeichen // dah(); ...; di(); ........; // Punkte und Striche // break; //****************************************************************************************************************************** case ' ': // blank (Leerzeichen) = Trenner zwischen zwei Wörter delay(4 * tempo); // = 4 * Pause lcd.clear(); // DCR160004 lcd.setCursor(0,0); // DCR160004 break; default: // Du solltest nicht hier sein. // Ursache ist ein fehlendes Zeichen im (switch case) Bereich. // (Irrung) di(); di(); di(); di(); di(); di(); di(); dit(); break; } delay(2 * tempo); // = 2 * Pause nach jedem Zeichen // Das macht 3 * Pause nach jedem Buchstaben (1 * Pause bei jedem Strich bzw. Punkt + 2 * Pause nach jedem Zeichen) // und 7 * Pause nach jedem Wort (1 * Pause bei jedem Strich bzw. Punkt + 2 * Pause nach jedem Zeichen + 4 * Pause beim Leerzeichen ) } //****************************************************************************************************************************** void loop () { start(); for (int i = 0; i < sizeof(text) - 1; i++) { tempo = 1200/map(analogRead(PotiA7),0,1023,2,55); // DCR1600002: 2 WpM bis 55 WpM ergibt tempo = 600 ms bis 22 ms senden(text[i]); } delay(10000); // 10 Sekunden Pause nach dem Text. DCR160001 } //******************************************************************************************************************************