// Programm CW-Partner V 1.27 // Torsten Blens, DL8KFO - 29.12.2010 - 27.3.2011 // Einbinden der LCD-Library #include // Einbinden der PgmSpace-Library #include // Einbinden der Funktionen für das interne EEPROM #include /* Belegung der Ports: Port 2,3,4,5: LCD Port 6: Taster down Port 7: Taster enter Port 8: Taster up Port 9: Interner Piezo Port 11,12: LCD Port 13: Kopfhörer Ausgang */ // Definition der einzelnen Arduino-Ports LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int speaker=13; // Port für NF-Ausgang Port 13 ist Kopfhörer, Port 9 ist interner Piezo. #define taster_up 6 #define taster_dwn 8 #define taster_enter 7 // Ports für Taster definieren. // Variablendefinition int cwspeed=60; // Anfangswerte für Verzögerungen int dot=cwspeed; int dash=cwspeed*3; int freq=650; // Frequenz der NF int wpm=20; // Anfangswert Geschwindigkeit int farnsworth=0; // Verlängerter Zeichenabstand? int durchgaenge=50; // Wie viele Durchgänge sind erwünscht bei den einzelnen Übungen? int warten=0; // Nach jedem gegebenen Wort Enter-Taste abwarten? Interaktiv-Modus int allezeichen=1; // Für 5er-Gruppen. 0: Nur Buchstaben werden gegeben. 1: Buchstaben und Ziffern werden gegeben. char rufzeichen1 [11]; // Das generierte Rufzeichen int aktuelles_qso=0; // Welches QSO wurde als letztes gegeben? char gruppe[6]; // Zwischenspeicher 5er-Gruppe boolean koch_method=false; // im Koch-Modus dürfen die Semikola zwischen den Zeichen nicht als Wortende gewertet werden int koch_lektion=1; #define programmversion "V1.27" int lcd_zeile=0; int lcd_spalte=0; //jeweils aktuelle Zeile des Displays // Definition Menüführung int menu_item=1; // Variablen für Menüpunkte Hauptmenü int setup_item=1; // Variablen für Menüpunkte Setup #define max_item 10 // Wieviele Menüpunkte gibt es? #define max_setup 8 // Menüpunkte im Setup boolean raus_hier=false; // Zum Abschluss der Setup-Funktion // Definition von Wortlisten prog_char zwei000[] PROGMEM = {"ok;"}; prog_char zwei001[] PROGMEM = {"wx;"}; prog_char zwei002[] PROGMEM = {"rx;"}; prog_char zwei003[] PROGMEM = {"tx;"}; prog_char zwei004[] PROGMEM = {"gd;"}; prog_char zwei005[] PROGMEM = {"dl;"}; prog_char zwei006[] PROGMEM = {"is;"}; prog_char zwei007[] PROGMEM = {"op;"}; prog_char zwei008[] PROGMEM = {"yl;"}; prog_char zwei009[] PROGMEM = {"de;"}; prog_char zwei010[] PROGMEM = {"ac;"}; prog_char zwei011[] PROGMEM = {"er;"}; prog_char zwei012[] PROGMEM = {"es;"}; prog_char zwei013[] PROGMEM = {"73;"}; prog_char zwei014[] PROGMEM = {"cq;"}; prog_char zwei015[] PROGMEM = {"hi;"}; prog_char zwei016[] PROGMEM = {"oe;"}; prog_char zwei017[] PROGMEM = {"gn;"}; prog_char zwei018[] PROGMEM = {"ov;"}; prog_char zwei019[] PROGMEM = {"wk;"}; prog_char zwei020[] PROGMEM = {"so;"}; prog_char zwei021[] PROGMEM = {"55;"}; prog_char zwei022[] PROGMEM = {"at;"}; prog_char zwei023[] PROGMEM = {"dx;"}; prog_char zwei024[] PROGMEM = {"fb;"}; prog_char zwei025[] PROGMEM = {"no;"}; prog_char zwei026[] PROGMEM = {"my;"}; prog_char zwei027[] PROGMEM = {"vy;"}; prog_char zwei028[] PROGMEM = {"to;"}; prog_char zwei029[] PROGMEM = {"of;"}; prog_char zwei030[] PROGMEM = {"eu;"}; prog_char zwei031[] PROGMEM = {"vl;"}; prog_char zwei032[] PROGMEM = {"it;"}; prog_char zwei033[] PROGMEM = {"me;"}; prog_char zwei034[] PROGMEM = {"cw;"}; prog_char zwei035[] PROGMEM = {"ja;"}; prog_char zwei036[] PROGMEM = {"ob;"}; prog_char zwei037[] PROGMEM = {"da;"}; prog_char zwei038[] PROGMEM = {"in;"}; prog_char zwei039[] PROGMEM = {"on;"}; prog_char zwei040[] PROGMEM = {"bk;"}; prog_char zwei041[] PROGMEM = {"do;"}; prog_char zwei042[] PROGMEM = {"ag;"}; prog_char zwei043[] PROGMEM = {"go;"}; prog_char zwei044[] PROGMEM = {"at;"}; prog_char zwei045[] PROGMEM = {"km;"}; prog_char zwei046[] PROGMEM = {"sp;"}; prog_char zwei047[] PROGMEM = {"by;"}; prog_char zwei048[] PROGMEM = {"hb;"}; prog_char zwei049[] PROGMEM = {"pa;"}; prog_char zwei050[] PROGMEM = {"dx;"}; prog_char zwei051[] PROGMEM = {"us;"}; prog_char zwei052[] PROGMEM = {"dl;"}; prog_char zwei053[] PROGMEM = {"gt;"}; prog_char zwei054[] PROGMEM = {"fm;"}; prog_char zwei055[] PROGMEM = {"am;"}; prog_char zwei056[] PROGMEM = {"gn;"}; prog_char zwei057[] PROGMEM = {"gp;"}; prog_char zwei058[] PROGMEM = {"hf;"}; prog_char zwei059[] PROGMEM = {"lw;"}; prog_char zwei060[] PROGMEM = {"nr;"}; prog_char zwei061[] PROGMEM = {"nw;"}; prog_char zwei062[] PROGMEM = {"om;"}; prog_char zwei063[] PROGMEM = {"rf;"}; prog_char zwei064[] PROGMEM = {"sn;"}; prog_char zwei065[] PROGMEM = {"vl;"}; prog_char zwei066[] PROGMEM = {"wl;"}; prog_char zwei067[] PROGMEM = {"yl;"}; prog_char zwei068[] PROGMEM = {"55;"}; prog_char zwei069[] PROGMEM = {"as;"}; PROGMEM const char *zwei_table[70] = { zwei000, zwei001, zwei002, zwei003, zwei004, zwei005, zwei006, zwei007, zwei008, zwei009, zwei010, zwei011, zwei012, zwei013, zwei014, zwei015, zwei016, zwei017, zwei018, zwei019, zwei020, zwei021, zwei022, zwei023, zwei024, zwei025, zwei026, zwei027, zwei028, zwei029, zwei030, zwei031, zwei032, zwei033, zwei034, zwei035, zwei036, zwei037, zwei038, zwei039, zwei040, zwei041, zwei042, zwei043, zwei044, zwei045, zwei046, zwei047, zwei048, zwei049, zwei050, zwei051, zwei052, zwei053, zwei054, zwei055, zwei056, zwei057, zwei058, zwei059, zwei060, zwei061, zwei062, zwei063, zwei064, zwei065, zwei066, zwei067, zwei068, zwei069 }; #define wordcount_zwei 70 // Wieviele Worte sind im Array? // Definition Worte via PROGMEM prog_char drei000[] PROGMEM = {"tnx;"}; prog_char drei001[] PROGMEM = {"sri;"}; prog_char drei002[] PROGMEM = {"qsb;"}; prog_char drei003[] PROGMEM = {"abt;"}; prog_char drei004[] PROGMEM = {"rig;"}; prog_char drei005[] PROGMEM = {"wir;"}; prog_char drei006[] PROGMEM = {"mit;"}; prog_char drei007[] PROGMEM = {"did;"}; prog_char drei008[] PROGMEM = {"uns;"}; prog_char drei009[] PROGMEM = {"she;"}; prog_char drei010[] PROGMEM = {"clr;"}; prog_char drei011[] PROGMEM = {"ant;"}; prog_char drei012[] PROGMEM = {"trx;"}; prog_char drei013[] PROGMEM = {"pse;"}; prog_char drei014[] PROGMEM = {"tks;"}; prog_char drei015[] PROGMEM = {"nil;"}; prog_char drei016[] PROGMEM = {"mir;"}; prog_char drei017[] PROGMEM = {"dir;"}; prog_char drei018[] PROGMEM = {"xyl;"}; prog_char drei019[] PROGMEM = {"two;"}; prog_char drei020[] PROGMEM = {"qso;"}; prog_char drei021[] PROGMEM = {"fer;"}; prog_char drei022[] PROGMEM = {"hat;"}; prog_char drei023[] PROGMEM = {"war;"}; prog_char drei024[] PROGMEM = {"hrd;"}; prog_char drei025[] PROGMEM = {"ltr;"}; prog_char drei026[] PROGMEM = {"ihm;"}; prog_char drei027[] PROGMEM = {"who;"}; prog_char drei028[] PROGMEM = {"cul;"}; prog_char drei029[] PROGMEM = {"was;"}; prog_char drei030[] PROGMEM = {"put;"}; prog_char drei031[] PROGMEM = {"bug;"}; prog_char drei032[] PROGMEM = {"ere;"}; prog_char drei033[] PROGMEM = {"ear;"}; prog_char drei034[] PROGMEM = {"ohr;"}; prog_char drei035[] PROGMEM = {"box;"}; prog_char drei036[] PROGMEM = {"big;"}; prog_char drei037[] PROGMEM = {"and;"}; prog_char drei038[] PROGMEM = {"und;"}; prog_char drei039[] PROGMEM = {"lot;"}; prog_char drei040[] PROGMEM = {"dem;"}; prog_char drei041[] PROGMEM = {"qsl;"}; prog_char drei042[] PROGMEM = {"wrk;"}; prog_char drei043[] PROGMEM = {"ein;"}; prog_char drei044[] PROGMEM = {"the;"}; prog_char drei045[] PROGMEM = {"qso;"}; prog_char drei046[] PROGMEM = {"sie;"}; prog_char drei047[] PROGMEM = {"qrp;"}; prog_char drei048[] PROGMEM = {"qro;"}; prog_char drei049[] PROGMEM = {"qsk;"}; prog_char drei050[] PROGMEM = {"ovv;"}; prog_char drei051[] PROGMEM = {"swr;"}; prog_char drei052[] PROGMEM = {"ruf;"}; prog_char drei053[] PROGMEM = {"los;"}; prog_char drei054[] PROGMEM = {"gnd;"}; prog_char drei055[] PROGMEM = {"air;"}; prog_char drei056[] PROGMEM = {"dwn;"}; prog_char drei057[] PROGMEM = {"fog;"}; prog_char drei058[] PROGMEM = {"nur;"}; prog_char drei059[] PROGMEM = {"boy;"}; prog_char drei060[] PROGMEM = {"sae;"}; prog_char drei061[] PROGMEM = {"ham;"}; prog_char drei062[] PROGMEM = {"irc;"}; prog_char drei063[] PROGMEM = {"von;"}; prog_char drei064[] PROGMEM = {"low;"}; prog_char drei065[] PROGMEM = {"let;"}; prog_char drei066[] PROGMEM = {"ufb;"}; prog_char drei067[] PROGMEM = {"too;"}; prog_char drei068[] PROGMEM = {"bci;"}; prog_char drei069[] PROGMEM = {"key;"}; prog_char drei070[] PROGMEM = {"ssb;"}; prog_char drei071[] PROGMEM = {"pkt;"}; prog_char drei072[] PROGMEM = {"tmw;"}; prog_char drei073[] PROGMEM = {"die;"}; prog_char drei074[] PROGMEM = {"das;"}; prog_char drei075[] PROGMEM = {"mni;"}; prog_char drei076[] PROGMEM = {"qrz;"}; prog_char drei077[] PROGMEM = {"rst;"}; prog_char drei078[] PROGMEM = {"frq;"}; prog_char drei079[] PROGMEM = {"use;"}; prog_char drei080[] PROGMEM = {"wpm;"}; prog_char drei081[] PROGMEM = {"bpm;"}; prog_char drei082[] PROGMEM = {"one;"}; prog_char drei083[] PROGMEM = {"bit;"}; prog_char drei084[] PROGMEM = {"swl;"}; prog_char drei085[] PROGMEM = {"rpt;"}; prog_char drei086[] PROGMEM = {"bug;"}; prog_char drei087[] PROGMEM = {"out;"}; prog_char drei088[] PROGMEM = {"why;"}; prog_char drei089[] PROGMEM = {"qsl;"}; prog_char drei090[] PROGMEM = {"vhf;"}; prog_char drei091[] PROGMEM = {"vfo;"}; prog_char drei092[] PROGMEM = {"qrm;"}; prog_char drei093[] PROGMEM = {"tvi;"}; prog_char drei094[] PROGMEM = {"vln;"}; prog_char drei095[] PROGMEM = {"lbr;"}; prog_char drei096[] PROGMEM = {"min;"}; prog_char drei097[] PROGMEM = {"dir;"}; prog_char drei098[] PROGMEM = {"cfm;"}; prog_char drei099[] PROGMEM = {"agn;"}; prog_char drei100[] PROGMEM = {"qrn;"}; prog_char drei101[] PROGMEM = {"qrg;"}; prog_char drei102[] PROGMEM = {"fun;"}; prog_char drei103[] PROGMEM = {"sun;"}; prog_char drei104[] PROGMEM = {"amp;"}; prog_char drei105[] PROGMEM = {"qrl;"}; prog_char drei106[] PROGMEM = {"led;"}; prog_char drei107[] PROGMEM = {"als;"}; prog_char drei108[] PROGMEM = {"das;"}; prog_char drei109[] PROGMEM = {"der;"}; PROGMEM const char *drei_table[110] = { drei000, drei001, drei002, drei003, drei004, drei005, drei006, drei007, drei008, drei009, drei010, drei011, drei012, drei013, drei014, drei015, drei016, drei017, drei018, drei019, drei020, drei021, drei022, drei023, drei024, drei025, drei026, drei027, drei028, drei029, drei030, drei031, drei032, drei033, drei034, drei035, drei036, drei037, drei038, drei039, drei040, drei041, drei042, drei043, drei044, drei045, drei046, drei047, drei048, drei049, drei050, drei051, drei052, drei053, drei054, drei055, drei056, drei057, drei058, drei059, drei060, drei061, drei062, drei063, drei064, drei065, drei066, drei067, drei068, drei069, drei070, drei071, drei072, drei073, drei074, drei075, drei076, drei077, drei078, drei079, drei080, drei081, drei082, drei083, drei084, drei085, drei086, drei087, drei088, drei089, drei090, drei091, drei092, drei093, drei094, drei095, drei096, drei097, drei098, drei099, drei100, drei101, drei102, drei103, drei104, drei105, drei106, drei107, drei108, drei109 }; #define wordcount_drei 110 // Wieviele Worte sind im Array? prog_char vier000[] PROGMEM = {"hand;"}; prog_char vier001[] PROGMEM = {"wire;"}; prog_char vier002[] PROGMEM = {"haus;"}; prog_char vier003[] PROGMEM = {"that;"}; prog_char vier004[] PROGMEM = {"sase;"}; prog_char vier005[] PROGMEM = {"mann;"}; prog_char vier006[] PROGMEM = {"snow;"}; prog_char vier007[] PROGMEM = {"dach;"}; prog_char vier008[] PROGMEM = {"roof;"}; prog_char vier009[] PROGMEM = {"cqdl;"}; prog_char vier010[] PROGMEM = {"mast;"}; prog_char vier011[] PROGMEM = {"lese;"}; prog_char vier012[] PROGMEM = {"most;"}; prog_char vier013[] PROGMEM = {"were;"}; prog_char vier014[] PROGMEM = {"dann;"}; prog_char vier015[] PROGMEM = {"fein;"}; prog_char vier016[] PROGMEM = {"temp;"}; prog_char vier017[] PROGMEM = {"seen;"}; prog_char vier018[] PROGMEM = {"rcvr;"}; prog_char vier019[] PROGMEM = {"rcvd;"}; prog_char vier020[] PROGMEM = {"same;"}; prog_char vier021[] PROGMEM = {"warm;"}; prog_char vier022[] PROGMEM = {"cool;"}; prog_char vier023[] PROGMEM = {"xmtr;"}; prog_char vier024[] PROGMEM = {"boys;"}; prog_char vier025[] PROGMEM = {"then;"}; prog_char vier026[] PROGMEM = {"made;"}; prog_char vier027[] PROGMEM = {"buch;"}; prog_char vier028[] PROGMEM = {"xcus;"}; prog_char vier029[] PROGMEM = {"when;"}; prog_char vier030[] PROGMEM = {"wrkd;"}; prog_char vier031[] PROGMEM = {"gebe;"}; prog_char vier032[] PROGMEM = {"such;"}; prog_char vier033[] PROGMEM = {"fone;"}; prog_char vier034[] PROGMEM = {"habe;"}; prog_char vier035[] PROGMEM = {"rein;"}; prog_char vier036[] PROGMEM = {"gehe;"}; prog_char vier037[] PROGMEM = {"zahl;"}; prog_char vier038[] PROGMEM = {"eben;"}; prog_char vier039[] PROGMEM = {"grad;"}; prog_char vier040[] PROGMEM = {"been;"}; prog_char vier041[] PROGMEM = {"fall;"}; prog_char vier042[] PROGMEM = {"home;"}; prog_char vier043[] PROGMEM = {"cond;"}; prog_char vier044[] PROGMEM = {"dann;"}; prog_char vier045[] PROGMEM = {"this;"}; prog_char vier046[] PROGMEM = {"that;"}; prog_char vier047[] PROGMEM = {"dxcc;"}; prog_char vier048[] PROGMEM = {"erde;"}; prog_char vier049[] PROGMEM = {"call;"}; prog_char vier050[] PROGMEM = {"ding;"}; prog_char vier051[] PROGMEM = {"mach;"}; prog_char vier052[] PROGMEM = {"more;"}; prog_char vier053[] PROGMEM = {"rtty;"}; prog_char vier054[] PROGMEM = {"also;"}; prog_char vier055[] PROGMEM = {"mist;"}; prog_char vier056[] PROGMEM = {"crds;"}; prog_char vier057[] PROGMEM = {"dort;"}; prog_char vier058[] PROGMEM = {"dann;"}; prog_char vier059[] PROGMEM = {"quer;"}; prog_char vier060[] PROGMEM = {"move;"}; prog_char vier061[] PROGMEM = {"over;"}; prog_char vier062[] PROGMEM = {"aber;"}; prog_char vier063[] PROGMEM = {"dash;"}; prog_char vier064[] PROGMEM = {"doch;"}; prog_char vier065[] PROGMEM = {"darc;"}; prog_char vier066[] PROGMEM = {"like;"}; prog_char vier067[] PROGMEM = {"rprt;"}; prog_char vier068[] PROGMEM = {"ihre;"}; prog_char vier069[] PROGMEM = {"dein;"}; prog_char vier070[] PROGMEM = {"hoch;"}; prog_char vier071[] PROGMEM = {"sked;"}; prog_char vier072[] PROGMEM = {"sigs;"}; prog_char vier073[] PROGMEM = {"nein;"}; prog_char vier074[] PROGMEM = {"mehr;"}; prog_char vier075[] PROGMEM = {"fuss;"}; prog_char vier076[] PROGMEM = {"funk;"}; prog_char vier077[] PROGMEM = {"denk;"}; prog_char vier078[] PROGMEM = {"dank;"}; prog_char vier079[] PROGMEM = {"kran;"}; prog_char vier080[] PROGMEM = {"nein;"}; prog_char vier081[] PROGMEM = {"beam;"}; prog_char vier082[] PROGMEM = {"icom;"}; prog_char vier083[] PROGMEM = {"sase;"}; prog_char vier084[] PROGMEM = {"xtal;"}; prog_char vier085[] PROGMEM = {"wtts;"}; prog_char vier086[] PROGMEM = {"info;"}; prog_char vier087[] PROGMEM = {"bcnu;"}; prog_char vier088[] PROGMEM = {"awdh;"}; prog_char vier089[] PROGMEM = {"inpt;"}; prog_char vier090[] PROGMEM = {"bpsk;"}; prog_char vier091[] PROGMEM = {"hoch;"}; prog_char vier092[] PROGMEM = {"tief;"}; prog_char vier093[] PROGMEM = {"aber;"}; prog_char vier094[] PROGMEM = {"noch;"}; prog_char vier095[] PROGMEM = {"yard;"}; prog_char vier096[] PROGMEM = {"seen;"}; prog_char vier097[] PROGMEM = {"band;"}; prog_char vier098[] PROGMEM = {"berg;"}; prog_char vier099[] PROGMEM = {"meer;"}; prog_char vier100[] PROGMEM = {"sieg;"}; prog_char vier101[] PROGMEM = {"arrl;"}; prog_char vier102[] PROGMEM = {"mief;"}; prog_char vier103[] PROGMEM = {"ader;"}; prog_char vier104[] PROGMEM = {"wein;"}; prog_char vier105[] PROGMEM = {"sekt;"}; prog_char vier106[] PROGMEM = {"zaun;"}; prog_char vier107[] PROGMEM = {"kaum;"}; prog_char vier108[] PROGMEM = {"raum;"}; prog_char vier109[] PROGMEM = {"jump;"}; PROGMEM const char *vier_table[110] = { vier000, vier001, vier002, vier003, vier004, vier005, vier006, vier007, vier008, vier009, vier010, vier011, vier012, vier013, vier014, vier015, vier016, vier017, vier018, vier019, vier020, vier021, vier022, vier023, vier024, vier025, vier026, vier027, vier028, vier029, vier030, vier031, vier032, vier033, vier034, vier035, vier036, vier037, vier038, vier039, vier040, vier041, vier042, vier043, vier044, vier045, vier046, vier047, vier048, vier049, vier050, vier051, vier052, vier053, vier054, vier055, vier056, vier057, vier058, vier059, vier060, vier061, vier062, vier063, vier064, vier065, vier066, vier067, vier068, vier069, vier070, vier071, vier072, vier073, vier074, vier075, vier076, vier077, vier078, vier079, vier080, vier081, vier082, vier083, vier084, vier085, vier086, vier087, vier088, vier089, vier090, vier091, vier092, vier093, vier094, vier095, vier096, vier097, vier098, vier099, vier100, vier101, vier102, vier103, vier104, vier105, vier106, vier107, vier108, vier109 }; #define wordcount_vier 110 // Wieviele Worte sind im Array? // Definition längerer Worte aus dem Sprachgebrauch prog_char wort000[] PROGMEM = {"glaube;"}; prog_char wort001[] PROGMEM = {"nicht;"}; prog_char wort002[] PROGMEM = {"immer;"}; prog_char wort003[] PROGMEM = {"wieder;"}; prog_char wort004[] PROGMEM = {"funken;"}; prog_char wort005[] PROGMEM = {"antenne;"}; prog_char wort006[] PROGMEM = {"dipol;"}; prog_char wort007[] PROGMEM = {"langdraht;"}; prog_char wort008[] PROGMEM = {"himmel;"}; prog_char wort009[] PROGMEM = {"auto;"}; prog_char wort010[] PROGMEM = {"fahren;"}; prog_char wort011[] PROGMEM = {"treffen;"}; prog_char wort012[] PROGMEM = {"kabel;"}; prog_char wort013[] PROGMEM = {"finden;"}; prog_char wort014[] PROGMEM = {"kaufen;"}; prog_char wort015[] PROGMEM = {"internet;"}; prog_char wort016[] PROGMEM = {"relais;"}; prog_char wort017[] PROGMEM = {"langyagi;"}; prog_char wort018[] PROGMEM = {"drehen;"}; prog_char wort019[] PROGMEM = {"rotor;"}; prog_char wort020[] PROGMEM = {"groundplane;"}; prog_char wort021[] PROGMEM = {"kaelter;"}; prog_char wort022[] PROGMEM = {"wetter;"}; prog_char wort023[] PROGMEM = {"sonne;"}; prog_char wort024[] PROGMEM = {"regen;"}; prog_char wort025[] PROGMEM = {"gesehen;"}; prog_char wort026[] PROGMEM = {"lange;"}; prog_char wort027[] PROGMEM = {"teuer;"}; prog_char wort028[] PROGMEM = {"pruefung;"}; prog_char wort029[] PROGMEM = {"station;"}; prog_char wort030[] PROGMEM = {"sender;"}; prog_char wort031[] PROGMEM = {"yaesu;"}; prog_char wort032[] PROGMEM = {"elecraft;"}; prog_char wort033[] PROGMEM = {"kenwood;"}; prog_char wort034[] PROGMEM = {"gearbeitet;"}; prog_char wort035[] PROGMEM = {"endstufe;"}; prog_char wort036[] PROGMEM = {"leider;"}; prog_char wort037[] PROGMEM = {"sicher;"}; prog_char wort038[] PROGMEM = {"geben;"}; prog_char wort039[] PROGMEM = {"morgen;"}; prog_char wort040[] PROGMEM = {"super;"}; prog_char wort041[] PROGMEM = {"fernsehen;"}; prog_char wort042[] PROGMEM = {"monitor;"}; prog_char wort043[] PROGMEM = {"computer;"}; prog_char wort044[] PROGMEM = {"worte;"}; prog_char wort045[] PROGMEM = {"leistung;"}; prog_char wort046[] PROGMEM = {"bedingung;"}; prog_char wort047[] PROGMEM = {"schlecht;"}; prog_char wort048[] PROGMEM = {"besser;"}; prog_char wort049[] PROGMEM = {"cuagn;"}; prog_char wort050[] PROGMEM = {"xcus;"}; prog_char wort051[] PROGMEM = {"condx;"}; prog_char wort052[] PROGMEM = {"information;"}; prog_char wort053[] PROGMEM = {"nummer;"}; prog_char wort054[] PROGMEM = {"jetzt;"}; prog_char wort055[] PROGMEM = {"taste;"}; prog_char wort056[] PROGMEM = {"telefonie;"}; prog_char wort057[] PROGMEM = {"telegrafie;"}; prog_char wort058[] PROGMEM = {"spaet;"}; prog_char wort059[] PROGMEM = {"frueh;"}; prog_char wort060[] PROGMEM = {"spule;"}; prog_char wort061[] PROGMEM = {"kondensator;"}; prog_char wort062[] PROGMEM = {"sperrkreis;"}; prog_char wort063[] PROGMEM = {"fliegen;"}; prog_char wort064[] PROGMEM = {"lizenziert;"}; prog_char wort065[] PROGMEM = {"problem;"}; prog_char wort066[] PROGMEM = {"trinken;"}; prog_char wort067[] PROGMEM = {"essen;"}; prog_char wort068[] PROGMEM = {"elbug;"}; prog_char wort069[] PROGMEM = {"award;"}; prog_char wort070[] PROGMEM = {"bedingung;"}; prog_char wort071[] PROGMEM = {"hobby;"}; prog_char wort072[] PROGMEM = {"amateurfunk;"}; prog_char wort073[] PROGMEM = {"satellit;"}; prog_char wort074[] PROGMEM = {"fussball;"}; prog_char wort075[] PROGMEM = {"traum;"}; prog_char wort076[] PROGMEM = {"experiment;"}; prog_char wort077[] PROGMEM = {"deutlich;"}; prog_char wort078[] PROGMEM = {"schwer;"}; prog_char wort079[] PROGMEM = {"leicht;"}; prog_char wort080[] PROGMEM = {"unter;"}; prog_char wort081[] PROGMEM = {"stunden;"}; prog_char wort082[] PROGMEM = {"minuten;"}; prog_char wort083[] PROGMEM = {"kommen;"}; prog_char wort084[] PROGMEM = {"kopfhoerer;"}; prog_char wort085[] PROGMEM = {"lautsprecher;"}; prog_char wort086[] PROGMEM = {"informieren;"}; prog_char wort087[] PROGMEM = {"drucken;"}; prog_char wort088[] PROGMEM = {"morsetaste;"}; prog_char wort089[] PROGMEM = {"contest;"}; prog_char wort090[] PROGMEM = {"hobby;"}; prog_char wort091[] PROGMEM = {"vormittags;"}; prog_char wort092[] PROGMEM = {"leiser;"}; prog_char wort093[] PROGMEM = {"lauter;"}; prog_char wort094[] PROGMEM = {"radio;"}; prog_char wort095[] PROGMEM = {"durch;"}; prog_char wort096[] PROGMEM = {"gegen;"}; prog_char wort097[] PROGMEM = {"meter;"}; prog_char wort098[] PROGMEM = {"nebel;"}; prog_char wort099[] PROGMEM = {"euren;"}; prog_char wort100[] PROGMEM = {"wenig;"}; prog_char wort101[] PROGMEM = {"viele;"}; prog_char wort102[] PROGMEM = {"uhren;"}; prog_char wort103[] PROGMEM = {"stift;"}; prog_char wort104[] PROGMEM = {"essen;"}; prog_char wort105[] PROGMEM = {"sogar;"}; prog_char wort106[] PROGMEM = {"hebel;"}; prog_char wort107[] PROGMEM = {"taste;"}; prog_char wort108[] PROGMEM = {"keyer;"}; prog_char wort109[] PROGMEM = {"haende;"}; prog_char wort110[] PROGMEM = {"sender;"}; prog_char wort111[] PROGMEM = {"lampen;"}; prog_char wort112[] PROGMEM = {"filter;"}; prog_char wort113[] PROGMEM = {"tiefer;"}; prog_char wort114[] PROGMEM = {"hoeher;"}; prog_char wort115[] PROGMEM = {"weiter;"}; prog_char wort116[] PROGMEM = {"sorgen;"}; prog_char wort117[] PROGMEM = {"dummer;"}; prog_char wort118[] PROGMEM = {"arbeit;"}; prog_char wort119[] PROGMEM = {"ziehen;"}; prog_char wort120[] PROGMEM = {"sonnig;"}; prog_char wort121[] PROGMEM = {"hoeren;"}; prog_char wort122[] PROGMEM = {"wolkig;"}; prog_char wort123[] PROGMEM = {"gleich;"}; prog_char wort124[] PROGMEM = {"muster;"}; prog_char wort125[] PROGMEM = {"funker;"}; prog_char wort126[] PROGMEM = {"helfer;"}; prog_char wort127[] PROGMEM = {"briefe;"}; prog_char wort128[] PROGMEM = {"beginn;"}; prog_char wort129[] PROGMEM = {"allein;"}; prog_char wort130[] PROGMEM = {"ferien;"}; prog_char wort131[] PROGMEM = {"langes;"}; prog_char wort132[] PROGMEM = {"findet;"}; prog_char wort133[] PROGMEM = {"glaube;"}; prog_char wort134[] PROGMEM = {"diplom;"}; prog_char wort135[] PROGMEM = {"anteil;"}; prog_char wort136[] PROGMEM = {"morsen;"}; prog_char wort137[] PROGMEM = {"schlaf;"}; prog_char wort138[] PROGMEM = {"kriege;"}; prog_char wort139[] PROGMEM = {"kommen;"}; prog_char wort140[] PROGMEM = {"freund;"}; prog_char wort141[] PROGMEM = {"hoerer;"}; prog_char wort142[] PROGMEM = {"kasten;"}; prog_char wort143[] PROGMEM = {"sieben;"}; prog_char wort144[] PROGMEM = {"bringt;"}; prog_char wort145[] PROGMEM = {"schade;"}; prog_char wort146[] PROGMEM = {"kosten;"}; prog_char wort147[] PROGMEM = {"kartei;"}; prog_char wort148[] PROGMEM = {"sauber;"}; prog_char wort149[] PROGMEM = {"finger;"}; prog_char wort150[] PROGMEM = {"absicht;"}; prog_char wort151[] PROGMEM = {"traeger;"}; prog_char wort152[] PROGMEM = {"stoeren;"}; prog_char wort153[] PROGMEM = {"groesse;"}; prog_char wort154[] PROGMEM = {"logbuch;"}; prog_char wort155[] PROGMEM = {"vermerk;"}; prog_char wort156[] PROGMEM = {"hinweis;"}; prog_char wort157[] PROGMEM = {"arbeite;"}; prog_char wort158[] PROGMEM = {"findest;"}; prog_char wort159[] PROGMEM = {"notizen;"}; prog_char wort160[] PROGMEM = {"gelesen;"}; prog_char wort161[] PROGMEM = {"nochmal;"}; prog_char wort162[] PROGMEM = {"vorlage;"}; prog_char wort163[] PROGMEM = {"langsam;"}; prog_char wort164[] PROGMEM = {"schnell;"}; prog_char wort165[] PROGMEM = {"zeichen;"}; prog_char wort166[] PROGMEM = {"gleiche;"}; prog_char wort167[] PROGMEM = {"dagegen;"}; prog_char wort168[] PROGMEM = {"frueher;"}; prog_char wort169[] PROGMEM = {"dauernd;"}; prog_char wort170[] PROGMEM = {"geraete;"}; prog_char wort171[] PROGMEM = {"gehoert;"}; prog_char wort172[] PROGMEM = {"brauche;"}; prog_char wort173[] PROGMEM = {"gestern;"}; prog_char wort174[] PROGMEM = {"zukunft;"}; prog_char wort175[] PROGMEM = {"methode;"}; prog_char wort176[] PROGMEM = {"artikel;"}; prog_char wort177[] PROGMEM = {"gemacht;"}; prog_char wort178[] PROGMEM = {"klingel;"}; prog_char wort179[] PROGMEM = {"wichtig;"}; prog_char wort180[] PROGMEM = {"schwach;"}; prog_char wort181[] PROGMEM = {"bringen;"}; prog_char wort182[] PROGMEM = {"wuerden;"}; prog_char wort183[] PROGMEM = {"besorge;"}; prog_char wort184[] PROGMEM = {"katalog;"}; prog_char wort185[] PROGMEM = {"dunkler;"}; prog_char wort186[] PROGMEM = {"laestig;"}; prog_char wort187[] PROGMEM = {"schnitt;"}; prog_char wort188[] PROGMEM = {"sprache;"}; prog_char wort189[] PROGMEM = {"gedanke;"}; prog_char wort190[] PROGMEM = {"aussicht;"}; prog_char wort191[] PROGMEM = {"sinnvoll;"}; prog_char wort192[] PROGMEM = {"tastatur;"}; prog_char wort193[] PROGMEM = {"nachteil;"}; prog_char wort194[] PROGMEM = {"dahinter;"}; prog_char wort195[] PROGMEM = {"verkaufe;"}; prog_char wort196[] PROGMEM = {"gewinner;"}; prog_char wort197[] PROGMEM = {"erledigt;"}; prog_char wort198[] PROGMEM = {"manchmal;"}; prog_char wort199[] PROGMEM = {"bandplan;"}; prog_char wort200[] PROGMEM = {"schwester;"}; prog_char wort201[] PROGMEM = {"verlieren;"}; prog_char wort202[] PROGMEM = {"schneller;"}; prog_char wort203[] PROGMEM = {"abkuerzen;"}; prog_char wort204[] PROGMEM = {"amateuren;"}; prog_char wort205[] PROGMEM = {"notizbuch;"}; prog_char wort206[] PROGMEM = {"vormerken;"}; prog_char wort207[] PROGMEM = {"bleistift;"}; prog_char wort208[] PROGMEM = {"genaueres;"}; prog_char wort209[] PROGMEM = {"grundsatz;"}; prog_char wort210[] PROGMEM = {"behoerden;"}; prog_char wort211[] PROGMEM = {"genaueres;"}; prog_char wort212[] PROGMEM = {"mithoeren;"}; prog_char wort213[] PROGMEM = {"allgemein;"}; prog_char wort214[] PROGMEM = {"notwendig;"}; prog_char wort215[] PROGMEM = {"nachricht;"}; prog_char wort216[] PROGMEM = {"gebraucht;"}; prog_char wort217[] PROGMEM = {"kurzwelle;"}; prog_char wort218[] PROGMEM = {"beruflich;"}; prog_char wort219[] PROGMEM = {"wunderbar;"}; prog_char wort220[] PROGMEM = {"dachboden;"}; prog_char wort221[] PROGMEM = {"einseitig;"}; prog_char wort222[] PROGMEM = {"vorzeitig;"}; prog_char wort223[] PROGMEM = {"geradeaus;"}; prog_char wort224[] PROGMEM = {"verbrauch;"}; prog_char wort225[] PROGMEM = {"buchstabe;"}; prog_char wort226[] PROGMEM = {"mehrmalig;"}; prog_char wort227[] PROGMEM = {"bewundert;"}; prog_char wort228[] PROGMEM = {"haeufiger;"}; prog_char wort229[] PROGMEM = {"landkarte;"}; prog_char wort230[] PROGMEM = {"versorgen;"}; prog_char wort231[] PROGMEM = {"werkstatt;"}; prog_char wort232[] PROGMEM = {"beitraege;"}; prog_char wort233[] PROGMEM = {"messplatz;"}; prog_char wort234[] PROGMEM = {"einspruch;"}; prog_char wort235[] PROGMEM = {"eisenbahn;"}; prog_char wort236[] PROGMEM = {"woertlich;"}; prog_char wort237[] PROGMEM = {"nachfrage;"}; prog_char wort238[] PROGMEM = {"aussuchen;"}; prog_char wort239[] PROGMEM = {"bemerkbar;"}; prog_char wort240[] PROGMEM = {"unbekannt;"}; prog_char wort241[] PROGMEM = {"noerdlich;"}; prog_char wort242[] PROGMEM = {"foermlich;"}; prog_char wort243[] PROGMEM = {"apfelsine;"}; prog_char wort244[] PROGMEM = {"rosenbeet;"}; prog_char wort245[] PROGMEM = {"moegliche;"}; prog_char wort246[] PROGMEM = {"vorsichtig;"}; prog_char wort247[] PROGMEM = {"stoerendes;"}; prog_char wort248[] PROGMEM = {"naechtlich;"}; prog_char wort249[] PROGMEM = {"vormittags;"}; prog_char wort250[] PROGMEM = {"gruendlich;"}; prog_char wort251[] PROGMEM = {"nachteilig;"}; prog_char wort252[] PROGMEM = {"ungestoert;"}; prog_char wort253[] PROGMEM = {"wundervoll;"}; prog_char wort254[] PROGMEM = {"frankreich;"}; prog_char wort255[] PROGMEM = {"einsichtig;"}; prog_char wort256[] PROGMEM = {"tiefsinnig;"}; prog_char wort257[] PROGMEM = {"grossartig;"}; prog_char wort258[] PROGMEM = {"vielseitig;"}; prog_char wort259[] PROGMEM = {"transistor;"}; prog_char wort260[] PROGMEM = {"loetkolben;"}; prog_char wort261[] PROGMEM = {"messgeraet;"}; prog_char wort262[] PROGMEM = {"wettbewerb;"}; prog_char wort263[] PROGMEM = {"gegenseite;"}; prog_char wort264[] PROGMEM = {"supermarkt;"}; prog_char wort265[] PROGMEM = {"stoerungen;"}; prog_char wort266[] PROGMEM = {"leistungen;"}; prog_char wort267[] PROGMEM = {"gesundheit;"}; prog_char wort268[] PROGMEM = {"unterkunft;"}; prog_char wort269[] PROGMEM = {"funkfreund;"}; prog_char wort270[] PROGMEM = {"isolatoren;"}; prog_char wort271[] PROGMEM = {"verabredet;"}; prog_char wort272[] PROGMEM = {"informativ;"}; prog_char wort273[] PROGMEM = {"uebersicht;"}; prog_char wort274[] PROGMEM = {"vorschrift;"}; prog_char wort275[] PROGMEM = {"gluecklich;"}; prog_char wort276[] PROGMEM = {"freundlich;"}; prog_char wort277[] PROGMEM = {"mitglieder;"}; prog_char wort278[] PROGMEM = {"aufmerksam;"}; prog_char wort279[] PROGMEM = {"rundspruch;"}; prog_char wort280[] PROGMEM = {"abkuerzung;"}; prog_char wort281[] PROGMEM = {"treffpunkt;"}; prog_char wort282[] PROGMEM = {"widerspruch;"}; prog_char wort283[] PROGMEM = {"daempfung;"}; prog_char wort284[] PROGMEM = {"abendhimmel;"}; prog_char wort285[] PROGMEM = {"wolkenlos;"}; prog_char wort286[] PROGMEM = {"unfreundlich;"}; prog_char wort287[] PROGMEM = {"teilnehmer;"}; prog_char wort288[] PROGMEM = {"flohmarkt;"}; prog_char wort289[] PROGMEM = {"rundstrahler;"}; prog_char wort290[] PROGMEM = {"fernsteuerung;"}; prog_char wort291[] PROGMEM = {"abspannen;"}; prog_char wort292[] PROGMEM = {"uebertragen;"}; prog_char wort293[] PROGMEM = {"display;"}; prog_char wort294[] PROGMEM = {"sonnenflecken;"}; prog_char wort295[] PROGMEM = {"maximal;"}; prog_char wort296[] PROGMEM = {"unglaublich;"}; prog_char wort297[] PROGMEM = {"platine;"}; prog_char wort298[] PROGMEM = {"drehkondensator;"}; prog_char wort299[] PROGMEM = {"verbesserung;"}; prog_char wort300[] PROGMEM = {"beschweren;"}; prog_char wort301[] PROGMEM = {"nachbarschaft;"}; prog_char wort302[] PROGMEM = {"alternative;"}; prog_char wort303[] PROGMEM = {"oszillator;"}; prog_char wort304[] PROGMEM = {"baumarkt;"}; prog_char wort305[] PROGMEM = {"bausatz;"}; prog_char wort306[] PROGMEM = {"einstellung;"}; prog_char wort307[] PROGMEM = {"parameter;"}; prog_char wort308[] PROGMEM = {"hochpassfilter;"}; prog_char wort309[] PROGMEM = {"emitterschaltung;"}; prog_char wort310[] PROGMEM = {"feldeffekttransistor;"}; prog_char wort311[] PROGMEM = {"rotorsteuerung;"}; prog_char wort312[] PROGMEM = {"schaltnetzteil;"}; prog_char wort313[] PROGMEM = {"ruhestrom;"}; prog_char wort314[] PROGMEM = {"leuchtdiode;"}; prog_char wort315[] PROGMEM = {"kathode;"}; prog_char wort316[] PROGMEM = {"lichtquelle;"}; prog_char wort317[] PROGMEM = {"signal;"}; prog_char wort318[] PROGMEM = {"schaltplan;"}; prog_char wort319[] PROGMEM = {"platinenlayout;"}; prog_char wort320[] PROGMEM = {"zeitung;"}; prog_char wort321[] PROGMEM = {"quadrat;"}; prog_char wort322[] PROGMEM = {"parallel;"}; prog_char wort323[] PROGMEM = {"seriell;"}; prog_char wort324[] PROGMEM = {"umschalter;"}; prog_char wort325[] PROGMEM = {"aussicht;"}; prog_char wort326[] PROGMEM = {"vielleicht;"}; prog_char wort327[] PROGMEM = {"selten;"}; prog_char wort328[] PROGMEM = {"stadt;"}; prog_char wort329[] PROGMEM = {"autobahn;"}; prog_char wort330[] PROGMEM = {"parkplatz;"}; prog_char wort331[] PROGMEM = {"digital;"}; prog_char wort332[] PROGMEM = {"kamera;"}; prog_char wort333[] PROGMEM = {"transceiver;"}; prog_char wort334[] PROGMEM = {"raster;"}; prog_char wort335[] PROGMEM = {"alarm;"}; prog_char wort336[] PROGMEM = {"notfall;"}; prog_char wort337[] PROGMEM = {"polizei;"}; prog_char wort338[] PROGMEM = {"umrechnen;"}; prog_char wort339[] PROGMEM = {"zerstoeren;"}; prog_char wort340[] PROGMEM = {"baken;"}; prog_char wort341[] PROGMEM = {"umsetzer;"}; prog_char wort342[] PROGMEM = {"ausbreitung;"}; prog_char wort343[] PROGMEM = {"newcomer;"}; prog_char wort344[] PROGMEM = {"verstehen;"}; prog_char wort345[] PROGMEM = {"empfangen;"}; prog_char wort346[] PROGMEM = {"senden;"}; prog_char wort347[] PROGMEM = {"schlafen;"}; prog_char wort348[] PROGMEM = {"nacht;"}; prog_char wort349[] PROGMEM = {"aufgewacht;"}; prog_char wort350[] PROGMEM = {"weather;"}; prog_char wort351[] PROGMEM = {"solar;"}; prog_char wort352[] PROGMEM = {"forecast;"}; prog_char wort353[] PROGMEM = {"soldering;"}; prog_char wort354[] PROGMEM = {"monitoring;"}; prog_char wort355[] PROGMEM = {"intruder;"}; prog_char wort356[] PROGMEM = {"repeat;"}; prog_char wort357[] PROGMEM = {"portabel;"}; prog_char wort358[] PROGMEM = {"denkbar;"}; prog_char wort359[] PROGMEM = {"herbst;"}; prog_char wort360[] PROGMEM = {"winter;"}; prog_char wort361[] PROGMEM = {"sommer;"}; prog_char wort362[] PROGMEM = {"fruehling;"}; prog_char wort363[] PROGMEM = {"schnee;"}; prog_char wort364[] PROGMEM = {"ausflug;"}; prog_char wort365[] PROGMEM = {"bandbreite;"}; prog_char wort366[] PROGMEM = {"taeglich;"}; prog_char wort367[] PROGMEM = {"studenten;"}; prog_char wort368[] PROGMEM = {"schueler;"}; prog_char wort369[] PROGMEM = {"lehrer;"}; prog_char wort370[] PROGMEM = {"baustelle;"}; prog_char wort371[] PROGMEM = {"leben;"}; prog_char wort372[] PROGMEM = {"bausteine;"}; prog_char wort373[] PROGMEM = {"unverschaemt;"}; prog_char wort374[] PROGMEM = {"rechnen;"}; prog_char wort375[] PROGMEM = {"mitschreiben;"}; prog_char wort376[] PROGMEM = {"zuhoerer;"}; prog_char wort377[] PROGMEM = {"fachgeschaeft;"}; prog_char wort378[] PROGMEM = {"statistik;"}; prog_char wort379[] PROGMEM = {"wetterbericht;"}; prog_char wort380[] PROGMEM = {"registrieren;"}; prog_char wort381[] PROGMEM = {"scanner;"}; prog_char wort382[] PROGMEM = {"neuwertig;"}; prog_char wort383[] PROGMEM = {"blitz;"}; prog_char wort384[] PROGMEM = {"windrad;"}; prog_char wort385[] PROGMEM = {"urlaubsort;"}; prog_char wort386[] PROGMEM = {"kompakt;"}; prog_char wort387[] PROGMEM = {"ferngesteuert;"}; prog_char wort388[] PROGMEM = {"alkohol;"}; prog_char wort389[] PROGMEM = {"vorstufe;"}; PROGMEM const char *wort_table[390] = { wort000, wort001, wort002, wort003, wort004, wort005, wort006, wort007, wort008, wort009, wort010, wort011, wort012, wort013, wort014, wort015, wort016, wort017, wort018, wort019, wort020, wort021, wort022, wort023, wort024, wort025, wort026, wort027, wort028, wort029, wort030, wort031, wort032, wort033, wort034, wort035, wort036, wort037, wort038, wort039, wort040, wort041, wort042, wort043, wort044, wort045, wort046, wort047, wort048, wort049, wort050, wort051, wort052, wort053, wort054, wort055, wort056, wort057, wort058, wort059, wort060, wort061, wort062, wort063, wort064, wort065, wort066, wort067, wort068, wort069, wort070, wort071, wort072, wort073, wort074, wort075, wort076, wort077, wort078, wort079, wort080, wort081, wort082, wort083, wort084, wort085, wort086, wort087, wort088, wort089, wort090, wort091, wort092, wort093, wort094, wort095, wort096, wort097, wort098, wort099, wort100, wort101, wort102, wort103, wort104, wort105, wort106, wort107, wort108, wort109, wort110, wort111, wort112, wort113, wort114, wort115, wort116, wort117, wort118, wort119, wort120, wort121, wort122, wort123, wort124, wort125, wort126, wort127, wort128, wort129, wort130, wort131, wort132, wort133, wort134, wort135, wort136, wort137, wort138, wort139, wort140, wort141, wort142, wort143, wort144, wort145, wort146, wort147, wort148, wort149, wort150, wort151, wort152, wort153, wort154, wort155, wort156, wort157, wort158, wort159, wort160, wort161, wort162, wort163, wort164, wort165, wort166, wort167, wort168, wort169, wort170, wort171, wort172, wort173, wort174, wort175, wort176, wort177, wort178, wort179, wort180, wort181, wort182, wort183, wort184, wort185, wort186, wort187, wort188, wort189, wort190, wort191, wort192, wort193, wort194, wort195, wort196, wort197, wort198, wort199, wort200, wort201, wort202, wort203, wort204, wort205, wort206, wort207, wort208, wort209, wort210, wort211, wort212, wort213, wort214, wort215, wort216, wort217, wort218, wort219, wort220, wort221, wort222, wort223, wort224, wort225, wort226, wort227, wort228, wort229, wort230, wort231, wort232, wort233, wort234, wort235, wort236, wort237, wort238, wort239, wort240, wort241, wort242, wort243, wort244, wort245, wort246, wort247, wort248, wort249, wort250, wort251, wort252, wort253, wort254, wort255, wort256, wort257, wort258, wort259, wort260, wort261, wort262, wort263, wort264, wort265, wort266, wort267, wort268, wort269, wort270, wort271, wort272, wort273, wort274, wort275, wort276, wort277, wort278, wort279, wort280, wort281, wort282, wort283, wort284, wort285, wort286, wort287, wort288, wort289, wort290, wort291, wort292, wort293, wort294, wort295, wort296, wort297, wort298, wort299, wort300, wort301, wort302, wort303, wort304, wort305, wort306, wort307, wort308, wort309, wort310, wort311, wort312, wort313, wort314, wort315, wort316, wort317, wort318, wort319, wort320, wort321, wort322, wort323, wort324, wort325, wort326, wort327, wort328, wort329, wort330, wort331, wort332, wort333, wort334, wort335, wort336, wort337, wort338, wort339, wort340, wort341, wort342, wort343, wort344, wort345, wort346, wort347, wort348, wort349, wort250, wort351, wort352, wort353, wort354, wort355, wort356, wort357, wort358, wort359, wort360, wort361, wort362, wort363, wort364, wort365, wort366, wort367, wort368, wort369, wort370, wort371, wort372, wort373, wort374, wort375, wort376, wort377, wort378, wort379, wort380, wort381, wort382, wort383, wort384, wort385, wort386, wort387, wort388, wort389 }; #define wordcount_wort 390 // Wieviele Worte sind im Array? char praefix [][5]= {"3h;","dk;","dl;","4o;","5a;","6d;","9h;","a;","cb;","ck;", "cn;","ct;","d6;","dj;","ea;","ea;","ei;","es;","f;","fy;", "g;","gn;","h2;","ha;","hb;","hv;","i;","j4;","k;","m;", "n;","ok;","on;","oz;","pa;","pd;","s5;","sv;","t9;","ta;", "ua;","un;","ur;","vr;","w;","xa;","xv;","yo;","z3;","zl;", "zp;","zr;","zv;","tf;","vu;","vs6;","ja;","xe;","zs;","la;" }; #define wordcount_praefix 60 // Wieviele Präfixe sind im Array? char koch [][3] = {"k;","m;","u;","r;","e;","s;","n;","a;","p;","t;", // Die Zeichenfolge der Koch-Methode "l;","w;","i;",".;","j;","z;","f;","o;","y;",",;", "v;","g;","5;","/;","q;","9;","2;","h;","3;","8;", "b;","?;","4;","7;","c;","1;","d;","6;","0;","x;", "=;"}; #define wordcount_koch 41 // Definition von QSOs via PROGMEM prog_char qso00[] PROGMEM = {"dl8kfo de dl1kbp = tnx fer rprt 599 from cologne = ur rst is 579 57n = qth is nr aachen aachen = name is frank frank = hpe ok? dl8kfo de dl1kbp pse k;"}; prog_char qso01[] PROGMEM = {"w8ysd de dl2tun = all right dear bryan = qsl via bureau ok = tnx fer nice qso and a nice weekend = hpe cuagn soon = w8ysd de dl2tun nw qrt e e;"}; prog_char qso02[] PROGMEM = {"dl6kbl de i5opf = excus dr om ben = hr nil info abt my outpt = my pwr mtr nil ok = pa tbs 2x6146 = inpt abt 160 wtts = dl6kbl de i5opf pse k;"}; prog_char qso03[] PROGMEM = {"dj1kko de ea9mc = all ok dr albert = pse qrp = ur sign vy gd = rst 5nn 5nn = my tx outpt nw 2 wtts = hw cpi? = dj1kko de ea9mc pse k;"}; prog_char qso04[] PROGMEM = {"dl4fa de hb9lq = ok my sigs rst 469 so agn mni tnx fer info = my ant fer 40 mtrs 2 el yagi so sure wl cpi you tmw on 7002 khz = dl4fa de hb9lq pse k;"}; prog_char qso05[] PROGMEM = {"dk9ar de dg8kcr = tnx fer call dr frd = ur sign rst 378k 378k= qth kassel es name willi = rig trvcr homemade fer cw es ssb = pwr abt 5 wtts ant dipole = hw cpi? = dk9ar de dg8kcr pse k;"}; prog_char qso06[] PROGMEM = {"df7olx de pa3er = vy sri dr om klaus = nil cpi ur sigs = agc in my trcvr nil ok = pse 5 min = wl call u agn sn = agn excus = df7olx de pa3er;"}; prog_char qso07[] PROGMEM = {"dl9vg de dj3was = guten abend lieber toni = schoen dich zu hoeren = dein rst ist 599 5nn = ich hoffe, du hattest einen guten tag? = dl9vg de dj3was pse k;"}; prog_char qso08[] PROGMEM = {"dk4xy de dl7kzo = nein, michael ich habe keine neue antenne = ant fb33 fb33 = fuer 20m reicht mir das vollkommen hi = wann kommt denn dein neuer mast? = dk4xy de dl7kzo pse k;"}; prog_char qso09[] PROGMEM = {"w1aw de dl9zm = stn hr 75t wtts output es ant 5 el yagi abt 18 mtr up = wx ufb wid temp 30 c = pse qsy 2 khz dwn = hr qrm frm rtty stn = pse k;"}; prog_char qso10[] PROGMEM = {"df4kx de dj1jw = gm lbr ulli es vln dk fer info abt contest = conds ufb = pse qrq = my rx homemade wid 23 tbs = wx fb 21 c = hpe awdh tmw ==;"}; prog_char qso11[] PROGMEM = {"dm9ee de dk8zf = habe hier starkes qrm durch eine station aus yo = ihr name und ihr qth war nicht aufzunehmen = bitte gehen sie zum senden 5 khz hoeher = mein name ist karlheinz und mein qth ist waldsassen nr ok grenze =;"}; prog_char qso12[] PROGMEM = {"wa2qw de on5fk = ge dr om bob es mni tnx fer ufb rprt = ur sigs hr nw rst 479 47n = my stn trcvr wid 100 w inpt es ant gp = pse k;"}; prog_char qso13[] PROGMEM = {"k1ws de dl2wys = ok wid info abt ur rig dr om jim = hr rcvd all fb = hw abt sked fer tmw on 10m ? = qrv in sstv = qrk? = k1ws de dl2wys pse k;"}; prog_char qso14[] PROGMEM = {"ka1abc de py0mag = ufb dr frd = pse ur qsl wid sae es 2 irc = wl qsl via direct es sure cfm swl rprts ==;"}; prog_char qso15[] PROGMEM = {"f3tr de dj9pwq = ur rprt rst 599 = sum qsb = pwr hr 75 wtts frm homemade tx = gl wid ur award = mni stns frm dl wl call in test tmw ==;"}; prog_char qso16[] PROGMEM = {"dj1jw de dl2ktg = ga lbr om stefan es tnx fer call = ur rst is 599 5nn es ufb sigs = my qth is stuttgart stuttgart = name andreas andreas = hpe ok? dj1jw de dl1ktg pse k;"}; prog_char qso17[] PROGMEM = {"dk1ot de dm4ztf = hallo lieber ralf = schoen, mal wieder von dir zu hoeren = ist alles okay bei euch? was macht die xyl? wir treffen uns naechste woche zum fd, kommt ihr auch? dk1ob de dm4ztf pse k;"}; prog_char qso18[] PROGMEM = {"g7un de dl3rtb = ge dr op ex tnx fer ur rprt 599 = ur rst is 599 5nn too = your k3 is ufb = my rig is icom 7600 icom 7600 pwr 1tt wtts ant 3 el beam = qth munich munich = g7un de dl3rtb pse k;"}; prog_char qso19[] PROGMEM = {"dj6kbl de dl8zpl = hallo dieter, vielen dank fuer deinen rprt 579 = mein umzug ins neue qth ist in 2 wochen = ich hoffe, dass der mast naechstes wochenende aufgebaut wird = 73 und bis zum naechsten ov abend = dj6kbl de dl8zpl pse k;"}; prog_char qso20[] PROGMEM = {"dg6tr de la1as = tnx fer rprt dr andreas = my rig is a kenwood ts590 ts590 = pwr nw 50 wtts 5t wtts = ant is g5rv g5rv = wx ere is snow abt 1 c = mni tnx fer qso = qsl ok via bureau = pse k;"}; prog_char qso21[] PROGMEM = {"dl1abc de dk5ltr = ga lbr om joachim = habe von deinem erfolg beim kontest gehoert, congrats = bist du naechste woche auf dem fieldday vom ov dabei? ich wueerde mich freuen ==;"}; prog_char qso22[] PROGMEM = {"df7kbv de dl8fwg = sri lbr om franz = rst 329 329 = der sturm letzte woche hat meine antenne beschaedigt = im moment kann ich nur mit dipol und 10 wtts senden = hoffe, du kannst mich empfangen? pse k;"}; prog_char qso23[] PROGMEM = {"dl9ddq de pa1wq = ge dr om thomas es tnx fer call = dein rst is 599 5tt = qth is near roermond roermond = name is phil phil = rig is yaesu ft2000 ft2000 pwr nw 80 wtts = ok? dl9ddq de pa1wq pse k;"}; prog_char qso24[] PROGMEM = {"dl2kbd de dj3kkp = nein bernd, du gibst noch immer so schlecht wie damals = vielleicht waere ssb eher etwas fuer dich? hi = dl2kbd de dj3kkp pse k;"}; prog_char qso25[] PROGMEM = {"dl3ifa de dk9vfz = gt om martin = dk fer ruf = ur 599 5nn in kelkheim kelkheim = dok f27 f27 = name wolfgang wolfgang = de dk9vfz pse k;"}; prog_char qso26[] PROGMEM = {"da0aa de db9zz = ufb dr frd = pse ur qsl wid sae es 2 irc via direct es sure cfm swl rprts = tnx fer qso es hpe cuagn sn = da0aa de db9zz pse k;"}; prog_char qso27[] PROGMEM = {"dg8kcr de dm1ogk = nein lbr jan ich habe noch nichts von deinem neuen qth gesehen = steht denn deine antenne schon? dann komme ich morgen mal vorbei = dg8kcr de dm1ogk pse k;"}; prog_char qso28[] PROGMEM = {"dl2ala de dk7vjv = pse qrp = wir wohnen 10 km entfernt, da brauchst du keine 750 wtts = ich kann dich laut und deutlich hoeren = dl2ala de dk7vv pse k;"}; prog_char qso29[] PROGMEM = {"dl9kku de dl5tew = hallo lbr ralf = hast du deinen k2 endlich fertig? klingt gut = rst 579 57n = meine antenne ist ein 4 el beam = pwr abt 200 wtts = all ok? pse k ==;"}; // Erstellen einer mehrsimensionalen Variablen PROGMEM const char *qso_table[30] = { qso00, qso01, qso02, qso03, qso04, qso05, qso06, qso07, qso08, qso09, qso10, qso11, qso12, qso13, qso14, qso15, qso16, qso17, qso18, qso19, qso20, qso21, qso22, qso23, qso24, qso25, qso26, qso27, qso28, qso29 }; #define wordcount_qso 29 // Letztes vorhandenes QSO Also nicht Anzahl!! /* Routinen für das Lesen und Schreiben der Setup-Werte ins EEPROM Adresse 0-1: wpm Adresse 2-3: freq Adresse 4-5: durchgaenge Adresse 6-7: farnsworth Adresse 8-9: koch_lektion Adresse 10-11: NF-Ausgang Adresse 12-13: Wartefunktion Adresse 14-15: Zeichenumfang 5er-Gruppen Adresse 16-17: Aktuelles QSO */ //This function will write a 2 byte integer to the eeprom at the specified address and address + 1 void EEPROMWriteInt(int p_address, int p_value) { byte lowByte = ((p_value >> 0) & 0xFF); byte highByte = ((p_value >> 8) & 0xFF); EEPROM.write(p_address, lowByte); EEPROM.write(p_address + 1, highByte); } //This function will read a 2 byte integer from the eeprom at the specified address and address + 1 unsigned int EEPROMReadInt(int p_address) { byte lowByte = EEPROM.read(p_address); byte highByte = EEPROM.read(p_address + 1); return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00); } void setup_read() //Liest die Einstellungen aus dem EEPROM { wpm=EEPROMReadInt(0); freq=EEPROMReadInt(2); durchgaenge=EEPROMReadInt(4); farnsworth=EEPROMReadInt(6); koch_lektion=EEPROMReadInt(8); speaker=EEPROMReadInt(10); warten=EEPROMReadInt(12); allezeichen=EEPROMReadInt(14); aktuelles_qso=EEPROMReadInt(16); } // Die ganz basalen Geberoutinen findest Du hier void piep() //Kurze Bestätigung eines Tastendrucks { tone(speaker,1500); delay(50); noTone(speaker); } void zeichendruck(char zeichen) { lcd_spalte++; // Cursor vorrücken lcd.setCursor(lcd_spalte,1); // Cursor in der zweiten Zeile plazieren if (lcd_spalte>15) { lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd_spalte=0; } lcd.write(zeichen); } void punkt() { tone(speaker,freq); delay(dot); noTone(speaker); delay(dot); } void strich() { tone(speaker,freq); delay(dash); noTone(speaker); delay(dot); } void pausechar() { int zaehler=0; if (farnsworth!=0) { for (zaehler=0;zaehler122) { randomchar=randomchar-75; // Wir "mappen" die Variable um, damit wir Ziffern geben können gruppe[lauf]=randomchar; } random_char=char(randomchar); // Umwandeln in Character cw(random_char); } gruppe[5]=';'; //Abschluss pauseword(); pauseword(); } } void geben_koch(int lektion,int anzahl) // Gibt den Kurs nach der Kochmethode *lektion=1 beginnt mit 2 Buchstaben, *anzahl gibt die Zeichenanzahl { koch_method=true; // keine Zeichenpausen beim Semikolon int i=0; int zufall=0; for (i=0;imax_setup) // Schützt vor nicht vorhandenen Menüpunkten { setup_item=1; piep(); } delay(200); } if (digitalRead(taster_dwn)==LOW) { setup_item--; auswahl1=true; if (setup_item<1) { setup_item=max_setup; } delay(200); } if (digitalRead(taster_enter)==LOW) { enter1=true; auswahl1=true; delay(200); } switch(setup_item) { case 1: lcd.setCursor(0,1); lcd.print("Geschwindigkeit"); auswahl1=false; if (enter1==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Geschwindigkeit"); lcd.setCursor(0,1); lcd.print("WPM (10-60):"); lcd.setCursor(12,1); lcd.print(wpm); enter1=false; delay(150); while (!enter1) { if (digitalRead(taster_up)==LOW) { wpm++; delay(200); if (wpm>60) // Tempo zu hoch? {wpm=60;} lcd.print(" "); lcd.setCursor(12,1); lcd.print(wpm); auswahl1=true; } if (digitalRead(taster_dwn)==LOW) { wpm--; delay(200); if (wpm<10) // Zu langsam? {wpm=10;} lcd.print(" "); lcd.setCursor(12,1); lcd.print(wpm); auswahl1=true; } if (digitalRead(taster_enter)==LOW) { enter1=true; auswahl1=true; lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); delay(100); raus_hier=true; } } } lcd_spalte=0; cwspeed=int(1200/wpm); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Neue Geschwindigkeit übernehmen enter1=false; auswahl1=false; EEPROMWriteInt(0,wpm); // Geschwindigkeit ins EEPROM schreiben break; case 2: lcd.setCursor(0,1); lcd.print("Durchgaenge"); auswahl1=false; if (enter1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Durchgaenge"); lcd.setCursor(0,1); lcd.print("(25-500):"); lcd.setCursor(10,1); lcd.print(durchgaenge); enter1=false; delay(150); while (!enter1) { if (digitalRead(taster_up)==LOW) { durchgaenge+=25; delay(200); if (durchgaenge>500) {durchgaenge=500;} lcd.print(" "); lcd.setCursor(10,1); lcd.print(durchgaenge); auswahl1=true; } if (digitalRead(taster_dwn)==LOW) { durchgaenge-=25; delay(200); if (durchgaenge<25) {durchgaenge=25;} lcd.print(" "); lcd.setCursor(10,1); lcd.print(durchgaenge); auswahl1=true; } if (digitalRead(taster_enter)==LOW) { enter1=true; auswahl1=true; lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); delay(100); raus_hier=true; } } enter1=false; auswahl1=false; } EEPROMWriteInt(4,durchgaenge); // Neue Anzahl ins EEPROM break; case 3: lcd.setCursor(0,1); lcd.print("Tonhoehe"); auswahl1=false; if (enter1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Tonhoehe (Hz)"); lcd.setCursor(0,1); lcd.print("500-1200:"); lcd.setCursor(10,1); lcd.print(freq); enter1=false; delay(150); while (!enter1) { if (digitalRead(taster_up)==LOW) { freq+=50; delay(200); if (freq>1200) {freq=1200;} lcd.print(" "); lcd.setCursor(10,1); lcd.print(freq); auswahl1=true; } if (digitalRead(taster_dwn)==LOW) { freq-=50; delay(200); if (freq<500) {freq=500;} lcd.print(" "); lcd.setCursor(10,1); lcd.print(freq); auswahl1=true; } if (digitalRead(taster_enter)==LOW) { enter1=true; auswahl1=true; lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); delay(100); raus_hier=true; } } enter1=false; auswahl1=false; } EEPROMWriteInt(2,freq); //Neue Frequenz ins EEPROM break; case 4: lcd.setCursor(0,1); lcd.print("Farnsworth"); auswahl1=false; if (enter1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Farnsworth"); lcd.setCursor(0,1); lcd.print("Dots:"); lcd.setCursor(6,1); lcd.print(farnsworth); enter1=false; delay(150); while (!enter1) { if (digitalRead(taster_up)==LOW) { farnsworth++; delay(200); if (farnsworth>9) {farnsworth=9;} lcd.print(" "); lcd.setCursor(6,1); lcd.print(farnsworth); auswahl1=true; } if (digitalRead(taster_dwn)==LOW) { farnsworth--; delay(200); if (farnsworth<0) {farnsworth=0;} lcd.print(" "); lcd.setCursor(6,1); lcd.print(farnsworth); auswahl1=true; } if (digitalRead(taster_enter)==LOW) { enter1=true; auswahl1=true; lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); delay(100); raus_hier=true; } } enter1=false; auswahl1=false; } EEPROMWriteInt(6,farnsworth); //Neuer Zeichenabstand ins EEPROM break; case 5: lcd.setCursor(0,1); lcd.print("Ausgang"); auswahl1=false; if (enter1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Ausgang"); lcd.setCursor(0,1); if (speaker==13) { lcd.print(" extern"); } else { lcd.print(" intern"); } enter1=false; delay(150); while (!enter1) { if (digitalRead(taster_up)==LOW) { lcd.setCursor(0,1); lcd.print(" intern"); speaker=9; // NF läuft über Piezo auswahl1=true; } if (digitalRead(taster_dwn)==LOW) { lcd.setCursor(0,1); lcd.print(" extern"); speaker=13; // NF läuft über externen Ausgang auswahl1=true; } if (digitalRead(taster_enter)==LOW) { enter1=true; auswahl1=true; lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); delay(100); raus_hier=true; } } enter1=false; auswahl1=false; } EEPROMWriteInt(10,speaker); pinMode(13,INPUT); pinMode(9,INPUT); pinMode(speaker,OUTPUT); break; case 6: lcd.setCursor(0,1); lcd.print("Interaktiv"); auswahl1=false; if (enter1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Interaktiv"); lcd.setCursor(0,1); if (warten==0) { lcd.print(" aus"); } else { lcd.print(" ein"); } enter1=false; delay(150); while (!enter1) { if (digitalRead(taster_dwn)==LOW) { lcd.setCursor(0,1); lcd.print(" aus"); warten=0; // Wartefunktion aus auswahl1=true; } if (digitalRead(taster_up)==LOW) { lcd.setCursor(0,1); lcd.print(" ein"); warten=1; // Wartefunktion ein auswahl1=true; } if (digitalRead(taster_enter)==LOW) { enter1=true; auswahl1=true; lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); delay(100); raus_hier=true; } } enter1=false; auswahl1=false; } EEPROMWriteInt(12,warten); break; case 7: lcd.setCursor(0,1); lcd.print("5er-Gruppen"); auswahl1=false; if (enter1) { lcd.clear(); lcd.setCursor(0,0); lcd.print("5er-Gruppen"); lcd.setCursor(0,1); if (allezeichen==0) { lcd.print(" A-Z"); } else { lcd.print(" A-Z, 0-9"); } enter1=false; delay(150); while (!enter1) { if (digitalRead(taster_dwn)==LOW) { lcd.setCursor(0,1); lcd.print(" A-Z"); allezeichen=0; // Nur Buchstaben werden gegeben auswahl1=true; } if (digitalRead(taster_up)==LOW) { lcd.setCursor(0,1); lcd.print(" A-Z, 0-9"); allezeichen=1; // Buchstaben und Ziffern werden gegeben auswahl1=true; } if (digitalRead(taster_enter)==LOW) { enter1=true; auswahl1=true; lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); delay(100); raus_hier=true; } } enter1=false; auswahl1=false; } EEPROMWriteInt(14,allezeichen); break; case 8: lcd.setCursor(0,1); lcd.print("QSO-Auswahl"); auswahl1=false; if (enter1==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("QSO-Auswahl"); lcd.setCursor(0,1); lcd.print("QSO (0-"); lcd.print(wordcount_qso); lcd.print("):"); lcd.setCursor(13,1); lcd.print(aktuelles_qso); enter1=false; delay(150); while (!enter1) { if (digitalRead(taster_up)==LOW) { aktuelles_qso++; delay(200); if (aktuelles_qso>wordcount_qso) // QSO nicht vorhanden? {aktuelles_qso=wordcount_qso;} lcd.print(" "); lcd.setCursor(13,1); lcd.print(aktuelles_qso); auswahl1=true; } if (digitalRead(taster_dwn)==LOW) { aktuelles_qso--; delay(200); if (aktuelles_qso<0) // QSO nicht vorhanden? {aktuelles_qso=0;} lcd.print(" "); lcd.setCursor(13,1); lcd.print(aktuelles_qso); auswahl1=true; } if (digitalRead(taster_enter)==LOW) { enter1=true; auswahl1=true; lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); delay(100); raus_hier=true; } } } lcd_spalte=0; enter1=false; auswahl1=false; EEPROMWriteInt(16,aktuelles_qso); // EEPROM schreiben break; } } void hauptmenue() { boolean auswahl=false; boolean enter=false; int i=0; // Einfache Schleifenvariable int zufall=0; // Für das Worttraining int temp=0; // Temporäre Variable für die Zufallsgeneratoren int wpm_slow; // Für den Interaktiv-Modus lcd.clear(); lcd.setCursor(0,0); lcd.print("Hauptmenue:"); if (digitalRead(taster_up)==LOW) { menu_item++; auswahl=true; if (menu_item>max_item) // Schützt vor nicht vorhandenen Menüpunkten { menu_item=1; piep(); } } if (digitalRead(taster_dwn)==LOW) { menu_item--; auswahl=true; if (menu_item<1) { menu_item=max_item; } } if (digitalRead(taster_enter)==LOW) { enter=true; auswahl=true; delay(100); } switch(menu_item) { case 1: lcd.setCursor(0,1); lcd.print("Worttraining"); auswahl=false; if (enter==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Worte :"); lcd_spalte=0; for (i=1;i<(durchgaenge+1);i++) { lcd.setCursor(12,0); lcd.print(i); lcd.setCursor(1,lcd_spalte); zufall=random(2,9); if (zufall==2) { geben_zwei(random(0,wordcount_zwei+1)); } if (zufall==3) { geben_drei(random(0,wordcount_drei+1)); } if (zufall==4) { geben_vier(random(0,wordcount_vier+1)); } if (zufall > 4) { geben_wort(random(0,wordcount_wort+1)); } lcd_spalte--; // Damit nicht 2 Zeichen Abstand entstehen if(warten==1) { while(digitalRead(taster_enter)); // Warten auf Enter piep(); delay(1000); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd_spalte=0; } } enter=false; } break; case 2: lcd.setCursor(0,1); lcd.print("QSO-Training"); auswahl=false; if (enter==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("QSO Nr.:"); lcd_spalte=0; lcd.setCursor(12,0); if (aktuelles_qso<0) // Schützt vor Absturz wenn das EEPROM noch nicht beschrieben wurde { aktuelles_qso=0; } lcd.print(aktuelles_qso); // Welches QSO wird gegeben? lcd.setCursor(1,lcd_spalte); geben_qso(aktuelles_qso); aktuelles_qso++; if (aktuelles_qso>wordcount_qso) { aktuelles_qso=0; } EEPROMWriteInt(16,aktuelles_qso); //Aktuelles QSO im EEPROM speichern. enter=false; } break; case 3: lcd.setCursor(0,1); lcd.print("Worte 2 Zeichen"); auswahl=false; if (enter==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Worte 2 BS:"); lcd_spalte=0; for (i=1;i<(durchgaenge+1);i++) { lcd.setCursor(12,0); lcd.print(i); lcd.setCursor(lcd_spalte,1); temp=random(0,wordcount_zwei); geben_zwei(temp); lcd_spalte--; // Damit nicht 2 Zeichen Abstand entstehen if(warten==1) // Interaktiv-Modus? { wpm_slow=wpm-4; // Geschwindidkeit verringern für taster_dwn while(digitalRead(taster_enter)) // Warten auf Enter { if(digitalRead(taster_up)==LOW) { piep(); delay(1000); geben_zwei(temp); // Letztes Wort nochmals geben } if(digitalRead(taster_dwn)==LOW) { piep(); delay(1000); cwspeed=int(1200/wpm_slow); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Neue Geschwindigkeit übernehmen geben_zwei(temp); // Letztes Wort nochmals geben wpm_slow-=4; // Falls nötig, Geschwindigkeit weiter verringern } delay(200); } piep(); delay(1000); cwspeed=int(1200/wpm); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Alte Geschwindigkeit übernehmen lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd_spalte=0; } } enter=false; } break; case 4: lcd.setCursor(0,1); lcd.print("Worte 3 Zeichen"); auswahl=false; if (enter==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Worte 3 BS:"); lcd_spalte=0; for (i=1;i<(durchgaenge+1);i++) { lcd.setCursor(12,0); lcd.print(i); lcd.setCursor(lcd_spalte,1); temp=random(0,wordcount_drei); geben_drei(temp); lcd_spalte--; // Damit nicht 2 Zeichen Abstand entstehen if(warten==1) // Interaktiv-Modus? { wpm_slow=wpm-4; // Geschwindidkeit verringern für taster_dwn while(digitalRead(taster_enter)) // Warten auf Enter { if(digitalRead(taster_up)==LOW) { piep(); delay(1000); geben_drei(temp); // Letztes Wort nochmals geben } if(digitalRead(taster_dwn)==LOW) { piep(); delay(1000); cwspeed=int(1200/wpm_slow); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Neue Geschwindigkeit übernehmen geben_drei(temp); // Letztes Wort nochmals geben wpm_slow-=4; // Falls nötig, Geschwindigkeit weiter verringern } delay(200); } piep(); delay(1000); cwspeed=int(1200/wpm); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Alte Geschwindigkeit übernehmen lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd_spalte=0; } } enter=false; } break; case 5: lcd.setCursor(0,1); lcd.print("Worte 4 Zeichen"); auswahl=false; if (enter==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Worte 4 BS:"); lcd_spalte=0; for (i=1;i<(durchgaenge+1);i++) { lcd.setCursor(12,0); lcd.print(i); lcd.setCursor(lcd_spalte,1); temp=random(0,wordcount_vier); geben_vier(temp); lcd_spalte--; // Damit nicht 2 Zeichen Abstand entstehen if(warten==1) // Interaktiv-Modus? { wpm_slow=wpm-4; // Geschwindidkeit verringern für taster_dwn while(digitalRead(taster_enter)) // Warten auf Enter { if(digitalRead(taster_up)==LOW) { piep(); delay(1000); geben_vier(temp); // Letztes Wort nochmals geben } if(digitalRead(taster_dwn)==LOW) { piep(); delay(1000); cwspeed=int(1200/wpm_slow); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Neue Geschwindigkeit übernehmen geben_vier(temp); // Letztes Wort nochmals geben wpm_slow-=4; // Falls nötig, Geschwindigkeit weiter verringern } delay(200); } piep(); delay(1000); cwspeed=int(1200/wpm); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Alte Geschwindigkeit übernehmen lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd_spalte=0; } } enter=false; } break; case 6: lcd.setCursor(0,1); lcd.print("Laengere Worte"); auswahl=false; if (enter==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Worte :"); lcd_spalte=0; for (i=1;i<(durchgaenge+1);i++) { lcd.setCursor(12,0); lcd.print(i); lcd.setCursor(lcd_spalte,1); temp=random(0,wordcount_wort); geben_wort(temp); lcd_spalte--; // Damit nicht 2 Zeichen Abstand entstehen if(warten==1) // Interaktiv-Modus? { wpm_slow=wpm-4; // Geschwindidkeit verringern für taster_dwn while(digitalRead(taster_enter)) // Warten auf Enter { if(digitalRead(taster_up)==LOW) { piep(); delay(1000); geben_wort(temp); // Letztes Wort nochmals geben } if(digitalRead(taster_dwn)==LOW) { piep(); delay(1000); cwspeed=int(1200/wpm_slow); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Neue Geschwindigkeit übernehmen geben_wort(temp); // Letztes Wort nochmals geben wpm_slow-=4; // Falls nötig, Geschwindigkeit weiter verringern } delay(200); } piep(); delay(1000); cwspeed=int(1200/wpm); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Alte Geschwindigkeit übernehmen lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd_spalte=0; } } enter=false; } break; case 7: lcd.setCursor(0,1); lcd.print("Rufzeichen"); auswahl=false; if (enter==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Rufzeichen"); lcd_spalte=0; for (i=1;i<(durchgaenge+1);i++) { lcd.setCursor(12,0); lcd.print(i); lcd.setCursor(lcd_spalte,1); geben_call(rufzeichen1); if(warten==1) // Interaktiv-Modus? { wpm_slow=wpm-4; // Geschwindidkeit verringern für taster_dwn while(digitalRead(taster_enter)) // Warten auf Enter { if(digitalRead(taster_up)==LOW) { piep(); delay(1000); geben(rufzeichen1); // Letztes Wort nochmals geben } if(digitalRead(taster_dwn)==LOW) { piep(); delay(1000); cwspeed=int(1200/wpm_slow); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Neue Geschwindigkeit übernehmen geben(rufzeichen1); // Letztes Wort nochmals geben wpm_slow-=4; // Falls nötig, Geschwindigkeit weiter verringern } delay(200); } piep(); delay(1000); cwspeed=int(1200/wpm); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Alte Geschwindigkeit übernehmen lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd_spalte=0; } } enter=false; } break; case 8: lcd.setCursor(0,1); lcd.print("5er-Gruppen"); auswahl=false; if (enter==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("5er-Gruppen:"); lcd_spalte=0; for (i=1;i<(durchgaenge+1);i++) { lcd.setCursor(12,0); lcd.print(i); lcd.setCursor(lcd_spalte,1); geben_fuenfer_gruppen(1); lcd_spalte--; // Damit nicht 2 Zeichen Abstand entstehen if(warten==1) // Interaktiv-Modus? { wpm_slow=wpm-4; // Geschwindidkeit verringern für taster_dwn while(digitalRead(taster_enter)) // Warten auf Enter { if(digitalRead(taster_up)==LOW) { piep(); delay(1000); geben(gruppe); // Letzte Gruppe nochmals geben } if(digitalRead(taster_dwn)==LOW) { piep(); delay(1000); cwspeed=int(1200/wpm_slow); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Neue Geschwindigkeit übernehmen geben(gruppe); // Letzte Gruppe nochmals geben wpm_slow-=4; // Falls nötig, Geschwindigkeit weiter verringern } delay(200); } piep(); delay(1000); cwspeed=int(1200/wpm); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; // Alte Geschwindigkeit übernehmen lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd_spalte=0; } } enter=false; } break; case 9: lcd.setCursor(0,1); lcd.print("Koch-Methode"); auswahl=false; if (enter==true) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Koch-Methode"); lcd.setCursor(0,1); lcd.print("(1-39): "); lcd.setCursor(10,1); lcd.print(koch_lektion); enter=false; delay(150); while (!enter) { if (digitalRead(taster_up)==LOW) { koch_lektion++; delay(200); if (koch_lektion>39) // Schützt vor nicht vorhandenen Lektionen {koch_lektion=39;} lcd.print(" "); lcd.setCursor(10,1); lcd.print(koch_lektion); auswahl=true; } if (digitalRead(taster_dwn)==LOW) { koch_lektion--; delay(200); if (koch_lektion<1) // Schützt vor nicht vorhandenen Lektionen {koch_lektion=1;} lcd.print(" "); lcd.setCursor(10,1); lcd.print(koch_lektion); auswahl=true; } if (digitalRead(taster_enter)==LOW) { enter=true; auswahl=true; lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); } EEPROMWriteInt(8,koch_lektion); //Aktuelle Koch-Lektion im EEPROM speichern. } lcd_spalte=0; geben_koch(koch_lektion,durchgaenge*5); enter=false; auswahl=false; } break; case 10: lcd.setCursor(0,1); lcd.print("Setup"); auswahl=false; if (enter==true) { delay(200); while (!raus_hier) {setup_menue(); delay(100);} } enter=false; auswahl=false; raus_hier=false; delay(100); break; } } // Diese Funktion wird bei jedem Init aufgerufen void setup() { setup_read(); // Konfiguration aus dem EEPROM lesen. pinMode(speaker,OUTPUT); // NF-Ausgang pinMode(taster_up,INPUT); digitalWrite(taster_up,HIGH); pinMode(taster_dwn,INPUT); digitalWrite(taster_dwn,HIGH); pinMode(taster_enter,INPUT); digitalWrite(taster_enter,HIGH); // Tastereingänge initialisieren Serial.begin(9600); randomSeed(analogRead(0)); // Zufallsgenerator durch einen Lesevorgang von Port 0 initialisieren lcd.begin(16,2); lcd.print("CW-Partner "); lcd.print(programmversion); lcd.setCursor(0,1); lcd.print("Ver. 328, DL8KFO;"); delay(2500); lcd.clear(); cwspeed=int(1200/wpm); //Zeiten für eine Puntklänge errechnen dot=cwspeed; dash=cwspeed*3; } void loop() { hauptmenue(); delay(180); }