Credo di aver finito la realizzazione del prototipo che avevo in mente ...
Questa è la versione con l Display LCD.. configurato come da qui:
http://arduino.cc/en/Tutorial/LiquidCrystal// personalizzazione
int intervallo = 10 * 1000; // 10 è l'intervallo in secondi tra una trasmissione e l'altra...in realtà dovrà essere dell'ordine dei minuti
int velocita = 60 ; // velocità di manipolazione in caratteri al minuto, molto approssimativamente
String messaggio = "ABCDEF GHILMN OPQRS TUVZ"; // stringa da trasmettere
// fine personalizzazione464654 6 54 47
int tempo = int(5300 / velocita) ;
#include <LiquidCrystal.h>
int lMax = 16 ; // n° di caratteri max da visulaizzare sull'LCD
int nChar = 39; // n° di caratteri di cui si compone il codice morse (lettere, numeri, punteggiatura e qualche altro segno, vedi caratteri_alfab[] e caratteri_morse[]
char caratteri_alfab [] = { 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' ,'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T', 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , '0' , '1' , '2' , '3' , '4' , '5' ,'6' ,'7' , '8' ,'9' ,'.' ,',' ,'?' };
String caratteri_morse [] = { ".-" , "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--","-..-", "-.--", "--..", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", ".-.-.-", "--..--","..--.."};
String chrMorse;
const int onRadio = 9; // accende la radio
const int digitCW = 8; // digita il morse
const int tonePin = 7; // the number of the tone pin
const int onDisplay = 6; // accende display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
pinMode(onRadio, OUTPUT);
pinMode(digitCW, OUTPUT);
pinMode(tonePin, OUTPUT);
pinMode(onDisplay, INPUT);
lcd.begin(16, 2);
//Serial.begin(9600);
}
void stampa_seriale(String pm, char l, String m, String nC){ Serial.print(pm); Serial.print(" "); Serial.print(l); Serial.print(" "); Serial.print (m); Serial.print(" "); Serial.print (nC); Serial.println();}// serve solo per fare i controlli durantelo sviluppo
void stampa_lcd (String pm, char l, String m, String nC)
{
lcd.setCursor(0, 0) ; lcd.setCursor(0, 0); lcd.print(pm);
lcd.setCursor(12, 1); lcd.print(nC); lcd.print(" ");
lcd.setCursor(2, 1) ; lcd.print(" "); lcd.setCursor(1, 1); lcd.print(l); lcd.print(" "); lcd.print(m);
}
void trova_chrMorse (char l) // trova la stringa morse corrispondente al carattere l e la pone in chrMorse
{
if ( l != ' ' )
{
for( int i = 0; i < nChar; i++)
{
if (l == caratteri_alfab [i])
{chrMorse = caratteri_morse[i]; break;}
}
}
else {chrMorse ="";};
}
void digita_chrMorse (String m)
{
char segno;
for(int i = 0; i < m.length(); i++)
{
segno = m.charAt(i);
switch (segno)
{
case '.':
digitalWrite(digitCW, HIGH); tone(7, 1000); delay (1*tempo); digitalWrite(digitCW, LOW); noTone(7); delay (1*tempo);
break;
case '-':
digitalWrite(digitCW, HIGH); tone(7, 1000); delay (3*tempo); digitalWrite(digitCW, LOW); noTone(7); delay (1*tempo);
break;
}
}
}
void loop()
{
boolean displayOn=true;
int viaPulsante = millis();
int statoPulsante =0;
digitalWrite(onRadio, HIGH);delay(1000);
char lettera ;
String parte_messaggio = " " ;
messaggio = messaggio.toUpperCase(); // trasforma tutto in maiuscolo
for(int i = 0; i < messaggio.length(); i++)
{ statoPulsante = digitalRead(onDisplay);
if ( statoPulsante && millis()-viaPulsante>2000){viaPulsante = millis(); if (displayOn){lcd.noDisplay(); displayOn =false;} else {lcd.display(); displayOn =true;};};
lettera=messaggio.charAt(i);
parte_messaggio = parte_messaggio + lettera;
if (parte_messaggio.length() > lMax ){parte_messaggio = parte_messaggio.substring (parte_messaggio.length()-lMax );}; //taglia la parte di messaggio già trasmesso agli ultimi lMax caratteri. Per poter visualizzare sull'LCD - max 16 caratteri
trova_chrMorse (lettera);
stampa_lcd (parte_messaggio, lettera, chrMorse, String( messaggio.length()-i)); // invia i dati all'LCD
//stampa_seriale (parte_messaggio, lettera, chrMorse, String( messaggio.length()-i)); //invia i dati per il controllo durante lo sviluppo
digita_chrMorse(chrMorse);
if (messaggio.charAt (i+1) != ' ') {delay(3*tempo);} else {delay(7*tempo);};
}
lcd.clear() ;
delay(1000); digitalWrite(onRadio,LOW);
delay (intervallo);
}
senza LCD
// personalizzazione
int intervallo = 10 * 1000; // 10 è l'intervallo in secondi tra una trasmissione e l'altra...in realtà dovrà essere dell'ordine dei minuti
int velocita = 60 ; // velocità di manipolazione, in caratteri al minuto ...... approssimativamente .......
String messaggio = "ABCDEF GHILMN OPQRS TUVZ"; // stringa da trasmettere
// fine personalizzazione
int tempo = int(5300 / velocita);
int nChar = 39; // n° di caratteri di cui si compone il codice morse (lettere, numeri, punteggiatura e qualche altro segno, vedi caratteri_alfab[] e caratteri_morse[]
char caratteri_alfab [] = { 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' ,'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T', 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , '0' , '1' , '2' , '3' , '4' , '5' ,'6' ,'7' , '8' ,'9' ,'.' ,',' ,'?' };
String caratteri_morse [] = { ".-" , "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--","-..-", "-.--", "--..", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", ".-.-.-", "--..--","..--.."};
String chrMorse;
int lMax=14;
const int onRadio = 9; // accende la radio
const int digitCW = 8; // digita il codice morse ...
const int tonePin = 7; // the number of the tone pin
void setup()
{
pinMode(onRadio, OUTPUT);
pinMode(digitCW, OUTPUT);
pinMode(tonePin, OUTPUT);
//Serial.begin(9600);
}
void stampa_seriale(String pm, char l, String m, String nC){ Serial.print(pm); Serial.print(" "); Serial.print(l); Serial.print(" "); Serial.print (m); Serial.print(" "); Serial.print (nC); Serial.println();}// serve solo per fare i controlli durantelo sviluppo
void trova_chrMorse (char l) // trova la stringa morse corrispondente al carattere l e la pone in chrMorse
{
if ( l != ' ' )
{
for( int i = 0; i < nChar; i++)
{
if (l == caratteri_alfab [i])
{chrMorse = caratteri_morse[i]; break;}
}
}
else {chrMorse ="";};
}
void digita_chrMorse (String m)
{
char segno;
for(int i = 0; i < m.length(); i++)
{
segno = m.charAt(i);
switch (segno)
{
case '.':
digitalWrite(digitCW, HIGH); tone(7, 1000); delay (1*tempo); digitalWrite(digitCW, LOW); noTone(7); delay (1*tempo);
break;
case '-':
digitalWrite(digitCW, HIGH); tone(7, 1000); delay (3*tempo); digitalWrite(digitCW, LOW); noTone(7); delay (1*tempo);
break;
}
}
}
void loop()
{
digitalWrite(onRadio, HIGH);delay(1000);
char lettera ;
String parte_messaggio = " " ;
messaggio = messaggio.toUpperCase(); // trasforma tutto in maiuscolo
for(int i = 0; i < messaggio.length(); i++)
{ lettera=messaggio.charAt(i);
parte_messaggio = parte_messaggio + lettera;
if (parte_messaggio.length() > lMax ){parte_messaggio = parte_messaggio.substring (parte_messaggio.length()-lMax );}; //taglia la parte di messaggio già trasmesso agli ultimi lMax caratteri. Per poter visualizzare sull'LCD - max 16 caratteri
trova_chrMorse (lettera);
//stampa_seriale (parte_messaggio, lettera, chrMorse, String( messaggio.length()-i)); //invia i dati per il controllo durante lo sviluppo
digita_chrMorse(chrMorse);
if (messaggio.charAt (i+1) != ' ') {delay(3*tempo);} else {delay(7*tempo);};
}
delay(1000); digitalWrite(onRadio,LOW);
delay (intervallo);
}
.... questo è il primo esperimento.... adesso prepariamo l'hardaware.... il prototipo comunque funziona.... mi piace questo arduino.....