Guten Tag,
wir haben ein Problem mit unserem Projekt.
Es handelt sich um eine Morsestation, bestehend aus einem Arduino Uno, einem LCD-Dislpay(16x2), einem Laser-Modul, einem Speaker(Piezo) und drei Tastern.
Über Taster 1 lassen sich alle Buchstaben des Alphabets nacheinander durchschalten
(angezeigt in Zeile 1 des LCDs), Taster 2 dient zum
einlocken des gewählten Buchstabens in der unteren Zeile des LCDs und schiebt den Cursor danach um eine Stelle nach rechts.
Am Ende soll dort das gewünschte Wort stehen, welches im nächsten Schritt über Taster 3 zum Morsen freigegeben wird.
Laser und Speaker führen dann die im Switch Case hinterlegten Morsecodes aus.
Dies funktioniert problemlos, solange das eingegebene Wort nicht mehr als fünf Stellen hat.
Sobald ein Wort sechs Buchstaben oder mehr hat, werden schon ab der ersten Stelle nur noch die Lasersignale übertragen, Ton vom Speaker jedoch nicht.
Da dieses Problem sehr speziell ist, konnten wir über Google noch keine Lösung finden, hoffen nun aber hier Hilfe finden zu können.
Bitte habt Rücksicht mit unserem Code, wir sind keine Programmierer sondern blutige Anfänger.
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int x = 0;
int s = 0;
int schalterPin6 = 6;
int schalterPin8 = 8;
int schalterPin9 = 9;
int laserpin = 7;
int speaker = 10;
static char t[16];
void setup() {
// set up the LCD's number of columns and rows:
Serial.begin(9600);
pinMode(schalterPin6, INPUT);
pinMode(schalterPin8, INPUT);
pinMode(schalterPin9, INPUT);
pinMode(laserpin, OUTPUT);
pinMode(speaker, OUTPUT);
lcd.begin(16, 2);
}
void loop() {
int schalterBuchstWechs = digitalRead(schalterPin6);
int schalterBuchstLogin = digitalRead(schalterPin8);
int schalterBuchstSend = digitalRead(schalterPin9);
lcd.setCursor(0, 0);
char alphabet[26] = "";
alphabet[0] = 'a';
alphabet[1] = 'b';
alphabet[2] = 'c';
alphabet[3] = 'd';
alphabet[4] = 'e';
alphabet[5] = 'f';
alphabet[6] = 'g';
alphabet[7] = 'h';
alphabet[8] = 'i';
alphabet[9] = 'j';
alphabet[10] = 'k';
alphabet[11] = 'l';
alphabet[12] = 'm';
alphabet[13] = 'n';
alphabet[14] = 'o';
alphabet[15] = 'p';
alphabet[16] = 'q';
alphabet[17] = 'r';
alphabet[18] = 's';
alphabet[19] = 't';
alphabet[20] = 'u';
alphabet[21] = 'v';
alphabet[22] = 'w';
alphabet[23] = 'x';
alphabet[24] = 'y';
alphabet[25] = 'z';
if (schalterBuchstWechs == HIGH)
{
delay(250);
x = x + 1;
if (x > 25)
{
x = 0;
}
}
lcd.print(alphabet[x]);
if (schalterBuchstLogin == HIGH)
{
lcd.setCursor(s, 2);
lcd.print(alphabet[x]);
t[s] = alphabet[x] ;
Serial.print(t[0]);
s = s + 1;
delay(250);
}
if (schalterBuchstSend == HIGH)
{
for (int i=0;i<s;i++)
{
// t[i] = alphabet[x] ;
//int l = t[i];
switch (t[i]) {
case 'a':
digitalWrite(7, HIGH);
tone(10,1000);
delay(100);
digitalWrite(7, LOW);
noTone(10);
delay(100);
digitalWrite(7, HIGH);
tone(10,1000);
delay(300);
digitalWrite(7, LOW);
noTone(10);
delay(300);
break;
case 'b':
digitalWrite(7, HIGH);
tone(10,1000);
delay(300);
digitalWrite(7, LOW);
noTone(10);
delay(100);
digitalWrite(7, HIGH);
tone(10,1000);
delay(100);
digitalWrite(7, LOW);
noTone(10);
delay(100);
digitalWrite(7, HIGH);
tone(10,1000);
delay(100);
digitalWrite(7, LOW);
noTone(10);
delay(100);
digitalWrite(7, HIGH);
tone(10,1000);
delay(100);
digitalWrite(7, LOW);
noTone(10);
delay(300);
break;
case 'c':
digitalWrite(7, HIGH);
tone(10,1000);
delay(300);
digitalWrite(7, LOW);
noTone(10);
delay(100);
// dot
digitalWrite(7, HIGH);
tone(10,1000);
delay(100);
digitalWrite(7, LOW);
noTone(10);
delay(100);
digitalWrite(7, HIGH);
tone(10,1000);
delay(300);
digitalWrite(7, LOW);
noTone(10);
delay(100);
// dot
digitalWrite(7, HIGH);
tone(10,1000);
delay(100);
digitalWrite(7, LOW);
noTone(10);
delay(300);
break;
// [...] bis zum Buchstaben Z (siehe Anhang für *.ino File)
}
}
}
}
MfG Termi
Morse28_07_.ino (13.3 KB)