hamradioweb.org

 


Vai indietro   hamradioweb.org > Discussioni / Areas of discussion > Elettronica digitale rivolta al mondo Hamradio

Avvisi

Elettronica digitale rivolta al mondo Hamradio elettronica digitale, microcontrollori e schede di sviluppo destinate al campo radioamatoriale, funzionamenti/costruzione di strumenti di misura digitali, controllo hardware (motori passo passo, servomotori, encoders rotativi), beacon e sistemi automatizzati, schede di controllo remoto sia wireless che web e tutto quello che riguarda l'elettronica digitale orientata al nostro mondo.

Rispondi
 
Strumenti della discussione Cerca in questa discussione
Vecchio 23-11-13, 00:35   #1
IZ7PDX
Senior Member
 
L'avatar di IZ7PDX
 
Registrato dal: Sep 2008
ubicazione: Locorotondo
Messaggi: 1,120
Piccoli esperimenti con Arduino crescono...

Partendo dal programma per fare lampeggiare il led on board (pin13) presente nell'archivio del software di Arduino ho implementato seguendo puramente l'istinto una serie di modifiche atte a far diventare più interessante l'esperimento.



Tramite una serie di istruzioni viene eseguito un loop di "chiamata" CQ IZ7PDX che fa lampeggiare il led on board del pin digitale 13.
L'unità di tempo "DI" pò assumere valori a nostro piacimento e verranno rispettati tutti i tempi del codice CW durante la trasmissione del lampeggio.
Si potrebbe creare una funzione matematica per rapportare l'unità di tempo a WPM ma ciò esula dall'intento didattico del programmino.
Ci sono una serie di informazioni che vengono "stampate" sulla seriale di Arduino (led tx), si potrebbe scrivere su un display a cristalli... ma anche questa cosa non è essenziale.

/*
Blink CQ IZ7PDX

*/

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// si dichiara una variabile a cuiè assegnato il valore ti tempo che desideriamo in milli secondi
int inputUnita = 150;
// the setup routine runs once when you press reset:
void setup()
{
// initialize serial:
Serial.begin(9600);
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
// Per i profani del CW come me ... RICORDA:
// DI (punto) = 1 unità (impostato come 500 ms )
// DA (linea) = 3 unità (impostato come 1500 ms)
// Spazio tra i suoni che compongono una stessa lettera = 1 unità (impostato come 500 ms)
// Spazio tra 2 lettere diverse di una stessa parola = 3 unità (impostato come 1500 ms)
// Spazio tra 2 diverse parole = 5 unità (impostato come 2500 ms)

void loop() {
// stampa l'unità di tempo sulla seriale:
Serial.print(" CQ IZ7PDX ");
Serial.print(" L'unita' di tempo (DI) e' stata impostata al valore di millisecondi: ");
Serial.println(inputUnita);

// LETTERA C
digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita*5); // wait for 5 unità.

// LETTERA Q
digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità..

digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita*5); // wait for 5 unità.

// LETTERA I
digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita*5); // wait for 5 unità.

// LETTERA Z
digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita*5); // wait for 5 unità.

// NUMERO 7
digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita*5); // wait for 5 unità.

// LETTERA P
digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita*5); // wait for 5 unità.

// LETTERA D
digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita*5); // wait for 5 unità.

// LETTERA X
digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
delay(inputUnita); // wait for 1 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita); // wait for 1 unità.

digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
delay(inputUnita*3); // wait for 3 unità.
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(inputUnita*5); // wait for 5 unità.

// print the number of seconds since reset:
Serial.print(" DURATA DEL LOOP DI CHIAMATA sec 18. ");
Serial.print(" TEMPO TOTALE DA INIZIO ASCOLTO SU SERIALE DEL LOOP CQ IZ7PDX sec. ");
Serial.println(millis()/1000);

}


Questo è il codice da me modificato ed ampliato, sicuramente esiste un modo diverso per ottenere un risultato simile o migliore utilizzando anche meno codice ma ripeto è solo uno dei miei primi esperimenti pensando con la mente DOS di 30 anni fa.
Magari dichiarando delle variabili aggiuntive e facendo lampeggiare qualsiasi nominativo o frase.... magari collegando una normale tastiera di PC si potrebbe battere sui tasti e vedere e sentire il Morse.

Sono solo all'inizio, scusate le banalità.

Ultima modifica di IZ7PDX; 23-11-13 a 17:55
IZ7PDX non  è collegato   Rispondi quotando
Vecchio 23-11-13, 18:03   #2
IZ0IEN
Moderator
 
L'avatar di IZ0IEN
 
Registrato dal: Nov 2008
ubicazione: Frosinone JN61sp
Messaggi: 1,690
Re: Piccoli esperimenti con Arduino crescono...

Quote:
Originariamente inviata da IZ7PDX Visualizza il messaggio
Questo è il codice da me modificato ed ampliato, sicuramente esiste un modo diverso per ottenere un risultato simile o migliore utilizzando anche meno codice ma ripeto è solo uno dei miei primi esperimenti pensando con la mente DOS di 30 anni fa.
Magari dichiarando delle variabili aggiuntive e facendo lampeggiare qualsiasi nominativo o frase.... magari collegando una normale tastiera di PC si potrebbe battere sui tasti e vedere e sentire il Morse.

Sono solo all'inizio, scusate le banalità.
Non sono banalità, quando funziona un programma in un linguaggio nuovo si strilla come per un new one
Questo l'ho scritto a memoria, senza provarlo, sul blocco note di windows.
Fa parte della mentalità del programmatore: ogni cosa si può fare con meno codice incluso quello che ti quoto sotto.
E' una buona occasione per studiare 4 nuove istruzioni e migliorare quello che ho scritto.. la stringa in questo caso viene scritta in punti e linee.. ma, forse si potrebbe fare di meglio, vero ?
Intanto riduciamo le righe di codice necessarie:
codice:
String CQ = "-.-. --.- -.. . .. --.. --... .--. -.. -..-"; //stringa da trasmettere
int lunghezzacq = CQ.length(); //ricavo la lunghezza della stringa

for (int carattere = 1; carattere = lunghezzacq; carattere++)  {
//ciclo for che dura per la lunghezza della stringa con la variabile carattere che incrementa
   
	if CQ.charAt(carattere)="-" {
   	digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
	delay(inputUnita*3); // wait for 3 unità.
  	}

	if CQ.charAt(carattere)="." {
	digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
	delay(inputUnita); // wait for 1 unità.
	}
	if CQ.charAt(carattere)=" " {
	delay(inputUnita); // se c'è unop spazio wait for 1 unità.
	}
}
Perdonami se c'è qualche errore, ma l'ho scritto senza provarlo, *dovrebbe* essere corretto.
__________________
Cris IZ0IEN
http://www.technecom.it
Founder of FOC - Frigo Operators Club
Member of SOC - Second Operator Class
Orgoglioso cultore del CW a correzione d'errore.
IZ0IEN è  collegato   Rispondi quotando
Vecchio 25-11-13, 16:23   #3
ik2bcp
Senior Member
 
Registrato dal: Oct 2007
ubicazione: Flero (BS)
Messaggi: 322
Re: Piccoli esperimenti con Arduino crescono...

Quote:
Originariamente inviata da IZ0IEN Visualizza il messaggio
Non sono banalità, quando funziona un programma in un linguaggio nuovo si strilla come per un new one
Questo l'ho scritto a memoria, senza provarlo, sul blocco note di windows.
Fa parte della mentalità del programmatore: ogni cosa si può fare con meno codice incluso quello che ti quoto sotto.
E' una buona occasione per studiare 4 nuove istruzioni e migliorare quello che ho scritto.. la stringa in questo caso viene scritta in punti e linee.. ma, forse si potrebbe fare di meglio, vero ?
Intanto riduciamo le righe di codice necessarie:
codice:
String CQ = "-.-. --.- -.. . .. --.. --... .--. -.. -..-"; //stringa da trasmettere
int lunghezzacq = CQ.length(); //ricavo la lunghezza della stringa

for (int carattere = 1; carattere = lunghezzacq; carattere++)  {
//ciclo for che dura per la lunghezza della stringa con la variabile carattere che incrementa
   
	if CQ.charAt(carattere)="-" {
   	digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
	delay(inputUnita*3); // wait for 3 unità.
  	}

	if CQ.charAt(carattere)="." {
	digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
	delay(inputUnita); // wait for 1 unità.
	}
	if CQ.charAt(carattere)=" " {
	delay(inputUnita); // se c'è unop spazio wait for 1 unità.
	}
}
Perdonami se c'è qualche errore, ma l'ho scritto senza provarlo, *dovrebbe* essere corretto.
Ehm... quanti grappini avevi bevuto prima?
Ho corretto un po' di cose...
73 de Guido, ik2bcp

codice:
String CQ = "-.-. --.- -.. . .. --.. --... .--. -.. -..- "; //stringa da trasmettere
int lunghezzacq = CQ.length(); //ricavo la lunghezza della stringa

for (int carattere = 0; carattere < lunghezzacq; carattere++)  {
//ciclo for che dura per la lunghezza della stringa con la variabile carattere che incrementa
   
	if CQ.charAt(carattere)="-" {
   	digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
	delay(inputUnita*3); // wait for 3 unità.
   	digitalWrite(led, LOW);
	delay(inputUnita);
  	}

	if CQ.charAt(carattere)="." {
	digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
	delay(inputUnita); // wait for 1 unità.
   	digitalWrite(led, LOW);
	delay(inputUnita);
	}

	if CQ.charAt(carattere)=" " {
   	delay(inputUnita*3); // se c'è uno spazio wait for 3 unità.
	}
}
ik2bcp non  è collegato   Rispondi quotando
Vecchio 25-11-13, 16:25   #4
IZ0IEN
Moderator
 
L'avatar di IZ0IEN
 
Registrato dal: Nov 2008
ubicazione: Frosinone JN61sp
Messaggi: 1,690
Re: Piccoli esperimenti con Arduino crescono...

È un anno e oltre che non tocco Arduino, sry grazie delle correzioni !!!

inviato da Galaxy S4 via Tapatalk
__________________
Cris IZ0IEN
http://www.technecom.it
Founder of FOC - Frigo Operators Club
Member of SOC - Second Operator Class
Orgoglioso cultore del CW a correzione d'errore.
IZ0IEN è  collegato   Rispondi quotando
Vecchio 26-11-13, 11:51   #5
IZ7PDX
Senior Member
 
L'avatar di IZ7PDX
 
Registrato dal: Sep 2008
ubicazione: Locorotondo
Messaggi: 1,120
Re: Piccoli esperimenti con Arduino crescono...

Mi sembra ottima l'idea, come supponevo esiste sempre il modo giusto di fare le cose e risparmiare codice.
Partendo dall'esercizio di base lo ho modificato facendo qualcosa di più interessante ma tua soluzione Cris è qualcosa di molto interessante e va approfondita!

Nonostante la correzione di Guido l' IDE 1.0.5 mi da questo messaggio di errore, da cosa dipende?

CW_BEACON_LED:4: error: expected unqualified-id before 'for'
CW_BEACON_LED:4: error: expected constructor, destructor, or type conversion before '<' token
CW_BEACON_LED:4: error: expected constructor, destructor, or type conversion before '++' token
IZ7PDX non  è collegato   Rispondi quotando
Vecchio 26-11-13, 16:17   #6
IZ7PDX
Senior Member
 
L'avatar di IZ7PDX
 
Registrato dal: Sep 2008
ubicazione: Locorotondo
Messaggi: 1,120
Re: Piccoli esperimenti con Arduino crescono...

Oramai ho preso gusto!


// Simulazione di un control box per commutazione antenne a 4 canali (IZ7PDX antenne 10-630m)
// impostiamo le variabile LED sui pin digitale 8-9-10-11
// i 4 led fanno capo a relativi 4 relè di potenza che commutano la RF o eventuali altri relè
// si trovano in commercio piccole schede relè con uscite di potenza (da provare per la RF bassa potenza) alimentati a 5V ideali per uso con Arduino
// http://www.ebay.it/itm/151062339980?...84.m1423.l2649
// CODICE REDATTO DA Luigi D'Arcangelo IZ7PDX CON SCOPO PURAMENTE DIDATTICO
// DECLINO OGNI RESPONSABILITA' SU EVENTUALI DANNI COLLATERALI :-)
// le opportunità di modificare il codice per usi SO2R o semplice gestione delle necessità dui stazione sono tante
// unico limite la fantasia.

// Le possibilità di fare interagire Arduino con il mondo reale sono notevoli,sensori di corrente interfacciati con rosmetri...
// compresa comunicazione seriale con RTX o PA. Vediamo di esplorare questo fantastico mondo insieme.

#define LEDa 8
#define LEDb 9
#define LEDc 10
#define LEDd 11

int val = 0; // usiamo la variabile val per salvare i valori provenienti da tastiera
int statoA = 0; // usiamo la variabile stato per salvare lo stato in cui si trova il led. 0 = spento, 1 = acceso
int statoB = 0; // usiamo la variabile stato per salvare lo stato in cui si trova il led. 0 = spento, 1 = acceso
int statoC = 0; // usiamo la variabile stato per salvare lo stato in cui si trova il led. 0 = spento, 1 = acceso
int statoD = 0; // usiamo la variabile stato per salvare lo stato in cui si trova il led. 0 = spento, 1 = acceso

void setup() {
pinMode(LEDa, OUTPUT); // impostiamo il pin del led (11) come output
pinMode(LEDb, OUTPUT); // impostiamo il pin del led (10) come output
pinMode(LEDc, OUTPUT); // impostiamo il pin del led (9) come output
pinMode(LEDd, OUTPUT); // impostiamo il pin del led (8) come output
Serial.begin(9600);
Serial.println(" PREGO SELEZIONARE L'ANTENNA DA COLLEGARE. ");
Serial.println(" CANALE a: 80-160-630 METRI ");
Serial.println(" CANALE b: 40 METRI ");
Serial.println(" CANALE c: 20-10 METRI ");
Serial.println(" CANALE d: 15 METRI ");
}

void loop() {
val = Serial.read(); // leggiamo il valore da tastiera e lo salviamo

// controlliamo l'input da tastiera e abilitiamo il canale richiesto

if (val == 'a') {
statoA = 1 - statoA;
statoB = 0;
statoC = 0;
statoD = 0;
}
if (val == 'b') {
statoA = 0;
statoB = 1 - statoB;
statoC = 0;
statoD = 0;
}
if (val == 'c') {
statoA = 0;
statoB = 0;
statoC = 1 - statoC;
statoD = 0;
}
if (val == 'd') {
statoA = 0;
statoB = 0;
statoC = 0;
statoD = 1 - statoD;
}

if (statoA == 1) {
digitalWrite(LEDa, HIGH); // accendiamo il led
// Serial.println("ANTENNA 80-160-630 METRI ATTIVATA")
}
if (statoB == 1) {
digitalWrite(LEDb, HIGH); // accendiamo il led
// Serial.println("ANTENNA 40 METRI ATTIVATA")
}
if (statoC == 1) {
digitalWrite(LEDc, HIGH); // accendiamo il led
// Serial.println("ANTENNA 20-10 METRI ATTIVATA")
}
if (statoD == 1) {
digitalWrite(LEDd, HIGH); // accendiamo il led
// Serial.println("ANTENNA 15 METRI ATTIVATA")
}
else {
digitalWrite(LEDa, LOW); //Spegnamo il led del CANALE D
digitalWrite(LEDb, LOW); //Spegnamo il led del CANALE D
digitalWrite(LEDc, LOW); //Spegnamo il led del CANALE D
digitalWrite(LEDd, LOW); //Spegnamo il led del CANALE D
}
}


Codice che chiaramente può essere snellito in mille modi...
IZ7PDX non  è collegato   Rispondi quotando
Vecchio 26-11-13, 16:44   #7
i7csb
Senior Member
 
L'avatar di i7csb
 
Registrato dal: Sep 2007
Messaggi: 215
Re: Piccoli esperimenti con Arduino crescono...

Post interessante, ci gioco ( anche perché li vendiamo qui in negozio ), anch'io, il prodotto sta riscuotendo molto interesse fra i radioamatori, l'ARRL ha già un libro dedicato all'argomento.
Tornando al tuo esperimento, partendo dai libri che stai usando, passa ad integrare il classico display a 2 righe, così le varie funzioni le vedi sul display senza usare il monitor del pc.
Ti seguo con vivo interesse.
__________________
I7CSB Mike
i7csb non  è collegato   Rispondi quotando
Vecchio 26-11-13, 16:50   #8
ik2bcp
Senior Member
 
Registrato dal: Oct 2007
ubicazione: Flero (BS)
Messaggi: 322
Re: Piccoli esperimenti con Arduino crescono...

Quote:
Originariamente inviata da IZ7PDX Visualizza il messaggio
Mi sembra ottima l'idea, come supponevo esiste sempre il modo giusto di fare le cose e risparmiare codice.
Partendo dall'esercizio di base lo ho modificato facendo qualcosa di più interessante ma tua soluzione Cris è qualcosa di molto interessante e va approfondita!

Nonostante la correzione di Guido l' IDE 1.0.5 mi da questo messaggio di errore, da cosa dipende?

CW_BEACON_LED:4: error: expected unqualified-id before 'for'
CW_BEACON_LED:4: error: expected constructor, destructor, or type conversion before '<' token
CW_BEACON_LED:4: error: expected constructor, destructor, or type conversion before '++' token
Sorry, avevo controllato velocemente solo la logica di funzionamento e non la sintassi, dove ho visto esserci degli errori anche li...
Questo dovrebbe compilarsi:
codice:
  String CQ = "-.-. --.- -.. . .. --.. --... .--. -.. -..- "; //stringa da trasmettere
  int lunghezzacq = CQ.length(); //ricavo la lunghezza della stringa

  for (int carattere = 0; carattere < lunghezzacq; carattere++)  {
    //ciclo for che dura per la lunghezza della stringa con la variabile carattere che incrementa

    if (CQ.charAt(carattere) == '-') {
      digitalWrite(led, HIGH); // LINEA - turn the LED on (HIGH is the voltage level)
      delay(inputUnita*3); // wait for 3 unità.
      digitalWrite(led, LOW);
      delay(inputUnita);
    }

    if (CQ.charAt(carattere) == '.') {
      digitalWrite(led, HIGH); // PUNTO - turn the LED on (HIGH is the voltage level)
      delay(inputUnita); // wait for 1 unità.
      digitalWrite(led, LOW);
      delay(inputUnita);
    }

    if (CQ.charAt(carattere) == ' ') {
      delay(inputUnita*3); // se c'è uno spazio wait for 3 unità.
    }
  }
ik2bcp non  è collegato   Rispondi quotando
Vecchio 26-11-13, 18:11   #9
IZ0IEN
Moderator
 
L'avatar di IZ0IEN
 
Registrato dal: Nov 2008
ubicazione: Frosinone JN61sp
Messaggi: 1,690
Re: Piccoli esperimenti con Arduino crescono...

Quote:
Originariamente inviata da ik2bcp Visualizza il messaggio
Sorry, avevo controllato velocemente solo la logica di funzionamento e non la sintassi, dove ho visto esserci degli errori anche li...
Questo dovrebbe compilarsi:
Ho capito, lo rimonto
__________________
Cris IZ0IEN
http://www.technecom.it
Founder of FOC - Frigo Operators Club
Member of SOC - Second Operator Class
Orgoglioso cultore del CW a correzione d'errore.
IZ0IEN è  collegato   Rispondi quotando
Vecchio 26-11-13, 19:29   #10
IK0VVE
Senior Member
 
L'avatar di IK0VVE
 
Registrato dal: Dec 2007
ubicazione: Latina
Messaggi: 593
Re: Piccoli esperimenti con Arduino crescono...

Ottimo thread!
Visto che non è così complicato?
__________________
73 de IK0VVE Max
www.ik0vve.net
IK0VVE non  è collegato   Rispondi quotando
Vecchio 27-11-13, 10:27   #11
IZ7PDX
Senior Member
 
L'avatar di IZ7PDX
 
Registrato dal: Sep 2008
ubicazione: Locorotondo
Messaggi: 1,120
Re: Piccoli esperimenti con Arduino crescono...

Vedo Michele, hai tante belle cosette nel tuo negozio!
Io ho iniziato da poco a smanettare (studiare mi sembra inappropriato) con Arduino e ho molto da imparare ma devo ammettere che in dieci minuti puoi fare l'impensabile con una facilità estrema... basta essere coscienti che sono giochi per il momento!

Per il display a cristalli ho già tutto l'occorrente devo solo trovare il tempo per fare, appena posso provo anche lo Sketch di Cris, sono molto curioso, grazie per la pazienza.
IZ7PDX non  è collegato   Rispondi quotando
Vecchio 27-11-13, 10:41   #12
i7csb
Senior Member
 
L'avatar di i7csb
 
Registrato dal: Sep 2007
Messaggi: 215
Re: Piccoli esperimenti con Arduino crescono...

Spero di non essere tacciato di chi si vuol fare pubblicità, ma Arduino mi piace proprio, ho qui un circuitino che fa da mini stazione meteo, anche quel settore molto interessante, e gioco con quello, il bello è proprio questa grossa possibilità di personalizzare anche i progetti di altri, il limite di Arduino, per me è la fantasia, naturalmente, chi conosce C è di molto agevolato, e il tipico utente, spesso non è un tecnico, sapessi quanta gente mi chiama e si lamenta che uno shield magari è in kit, non hanno il saldatore, per fortuna ci sono i Radioamatori.
__________________
I7CSB Mike
i7csb non  è collegato   Rispondi quotando
Vecchio 28-11-13, 11:15   #13
IZ7PDX
Senior Member
 
L'avatar di IZ7PDX
 
Registrato dal: Sep 2008
ubicazione: Locorotondo
Messaggi: 1,120
Re: Piccoli esperimenti con Arduino crescono...

Quote:
Originariamente inviata da i7csb Visualizza il messaggio
Spero di non essere tacciato di chi si vuol fare pubblicità, ma Arduino mi piace proprio, ho qui un circuitino che fa da mini stazione meteo, anche quel settore molto interessante, e gioco con quello, il bello è proprio questa grossa possibilità di personalizzare anche i progetti di altri, il limite di Arduino, per me è la fantasia, naturalmente, chi conosce C è di molto agevolato, e il tipico utente, spesso non è un tecnico, sapessi quanta gente mi chiama e si lamenta che uno shield magari è in kit, non hanno il saldatore, per fortuna ci sono i Radioamatori.
Quoto a 100 %, il tuo entusiasmo è anche il mio !
Anzi da ignorante e dopo i primi esperimenti a cuor leggero posso affermare che un radioamatore attivo non può assolutamente ignorare ARDUINO e le sue infinite possibilità di realizzare ciò che difficilmente potremmo fare in altro modo.

Questo è il mio arduino-coffee time di dieci minuti per definire il codice base del control box!

Click the image to open in full size.
IZ7PDX non  è collegato   Rispondi quotando
Vecchio 28-11-13, 12:49   #14
ik2bcp
Senior Member
 
Registrato dal: Oct 2007
ubicazione: Flero (BS)
Messaggi: 322
Re: Piccoli esperimenti con Arduino crescono...

Quote:
Originariamente inviata da IZ7PDX Visualizza il messaggio
Questo è il mio arduino-coffee time di dieci minuti per definire il codice base del control box!
Luigi,
due idee:
1) Perché non metti l'Arduino (ben schermato) nell'accordatore e arrivi in stazione con solo 4 fili: alimentazione e seriale su RS485?
2) Gli stepping motors sono molto comodi, perché ti permettono posizionamenti precisi senza la necessità di encoders, però ti consiglio di mettere dei fine corsa (ad esempio dei fotoaccoppiatori a "forcellina ottica") per calibrare la posizione iniziale.
73 de Guido, ik2bcp
ik2bcp non  è collegato   Rispondi quotando
Vecchio 30-11-13, 11:21   #15
IZ7PDX
Senior Member
 
L'avatar di IZ7PDX
 
Registrato dal: Sep 2008
ubicazione: Locorotondo
Messaggi: 1,120
Re: Piccoli esperimenti con Arduino crescono...

Quote:
Originariamente inviata da ik2bcp Visualizza il messaggio
Luigi,
due idee:
1) Perché non metti l'Arduino (ben schermato) nell'accordatore e arrivi in stazione con solo 4 fili: alimentazione e seriale su RS485?
2) Gli stepping motors sono molto comodi, perché ti permettono posizionamenti precisi senza la necessità di encoders, però ti consiglio di mettere dei fine corsa (ad esempio dei fotoaccoppiatori a "forcellina ottica") per calibrare la posizione iniziale.
73 de Guido, ik2bcp
In effetti Guido ci avevo pensato, i tuoi suggerimenti sono interessanti e fattibili al 100%.
Malgrado ciò sono ancora alla fase di sperimentazione di Arduino e della sua logica di programmazione, sono a valutare tutte le possibilità per poi passando alla progettazione di fatto del sistema di controllo, scegliere la soluzione più opportuna.
Mi sono già procurato due sensori reed di piccole dimensioni per "delimitare" la corsa massima in entrambe le direzioni del roller.
Click the image to open in full size.
Il bello è che li puoi utilizzare dove vuoi con l'ausilio di un piccolo magnete (esistono anche quelli in miniatura con potente biadesivo),con Arduino li puoi utilizzare come finecorsa, contatore, sensore di posizione per monitorare cosa accade, eccetera!
In effetti pensando di dover far convergere su Arduino diversi segnali digitali e analogici oltre alle quattro uscite PMW per alimentare lo/gli stepper si profila sempre più opportuna la possibilità di utilizzare per comunicare l'interfaccia RS485.

Non nego che sono tentato di acquistare Arduino Yun http://arduino.cc/en/Main/ArduinoBoa...ain.ArduinoYUN che permette il controllo completo tramite rete WiFi e quindi dovrei portare al box solo l'alimentazione 12V per motori, relè e riduttore di tensione a 5 V per Arduino.
Nel frattempo lo "studio" va avanti nei rangenti di tempo libero (vedi notte inoltrata) e sono sempre più meravigliato da ARDUINO.
Le possibilità sono infinite e al momento sono saturo di idee, accetto sempre i vostri ottimi consigli...
Icone allegate
Clicca sull'immagine per ingrandirla

Nome:   IZ7PDX REED SENSOR.jpg‎
Visite: 5259
Dimensione:   31.7 KB
ID: 11800  
IZ7PDX non  è collegato   Rispondi quotando
Vecchio 18-12-13, 17:30   #16
IZ7PDX
Senior Member
 
L'avatar di IZ7PDX
 
Registrato dal: Sep 2008
ubicazione: Locorotondo
Messaggi: 1,120
Talking Re: Piccoli esperimenti con Arduino crescono...

Sottotitolerei questo ulteriore post che mi accingo a compilare, mmm, perdonatemi, che mi accingo a scrivere "tanto con poco";

Mi sento sempre più smaliziato e le sessioni notturne di studio Arduino sono sempre più coinvolgenti, più ci sbatti la testa tanto più viene facile creare un codice che soddisfa le tue esigenze correttamente compilabile dall'IDE.

Dopo una serie di esperimenti ritengo interessante sottoporvi la possibilità di controllare e monitorare in teoria qualsiasi radio tramite un semplice collegamento seriale (due pin + GND) tra Arduino e in questo caso lo Yaesu FT857-D utilizzando il protocollo CAT che deve essere opportunamente adattato alle caratteristiche del proprio RTX.
Il collegamento elettrico avviene tramite il connettore mini-din della radio, pin RX e TX e i pin 2 e 3 del micro controllore Arduino, non dimenticatevi di condividere anche la GND.

Click the image to open in full size.


Preparate un semplice cavo schermato seguendo questa configurazione , per esigenze particolari può essere variata a piacere dichiarando la modifica nella libreria in uso da Arduino.

Radio CAT port GND -> Arduino GND
Radio CAT port TX -> Arduino pin 3
Radio CAT port RX -> Arduino pin 2

Click the image to open in full size.
In alto a destra del display il collegamento seriale tra cavo CAT e pin di Arduino, in baso a destra presa per GND.
Implementando il protocollo di comunicazione seriale i2c (i quadrao c) e possibile comandare a cascata una notevole quantità di RTX controllandoli a turno selezionando il proprio indirizzo assegnato...



Per evitare di riscrivere sempre tutto il codice di adattamento CAT/Arduino ci viene in contro la libreria creata da VE3BUX , "FT857D.h" scaricabile dal suo sito internet http://ve3bux.com/, è facilmente modificabile per utilizzare la propria radio della famiglia Yaesu (il 950 per esempio).

Quindi nello Sketch ricordate di inserire oltre alla libreria per il controllo seriale anche quella di BUX:
#include <SoftwareSerial.h>
#include "FT857D.h"
in oltre se non vi accontentate di far sapere al vostro economico Arduino tutto ciò che passa nel cervello del RTX in uso e volete visualizzare le info (non esiste limite) su un bel display a cristalli liquidi allora includete anche #include <LiquidCrystal.h> ricordando che gli schermi a cristalli liquidi hanno spesso e volentieri standard diversi quindi è necessario dichiarare i giusti pin digitali di Arduino ed eventuali pulsanti di comando analogici.



Nei video un esempio di funzionamento di tutto ciò, la radio comunica diverse info al micro-controllore che a sua volta elabora (in maniera scandalosamente banale) per comandare un selettore d'antenna, un accordatore remoto con motori stepper o una antenna dinamica semplice o complessa che sia...

Lasciando la latenza del display (alcuni hanno un effetto memoria del cristallo) e la qualità del video voglio sottolineare che ho adattato il codice ieri notte e che step by step aggiungo una funzione alla volta.
Quei brutti quadrati saranno sostituiti dal simbolo RX o TX e aggiungerò anche i punti di divisione nella cifra della frequenza letta.
Il 16x2 non ha molto spazio ma è possible temporizzare varie schermate e dare la precedenza a quella più significativa al momento. Per esempio cambio frequenza e automaticamente si visualizzano quelle due righe del display, vado in trasmissione, quindi la schermata con TX-RX è prioritaria, vario la potenza, immaginate il resto...

Le info sono aggiornate in tempo reale e le soluzioni di controllo infinite, in oltre se la eprom di Arduino non basta per memorizzare le info volute, le ultime posizioni degli stepper prima di spegnere tutto, un server HTTP per la gestione remota della vostra radio, accordatore remoto, antenna o ampli che sia ci viene in contro lo Shield con la scheda di memoria micro SD, cantina senza fondo per i vostri bit di informazioni.

Per ora mi fermo qui , non voglio rompervi troppo con questo mio entusiasmo!
Icone allegate
Clicca sull'immagine per ingrandirla

Nome:   IZ7PDX FT857D ARDUINO-CAT.jpg‎
Visite: 4563
Dimensione:   474.1 KB
ID: 11931  
Immagini allegate
 

Ultima modifica di IZ7PDX; 18-12-13 a 17:41
IZ7PDX non  è collegato   Rispondi quotando
Vecchio 19-12-13, 06:57   #17
I0GOD
Senior Member
 
Registrato dal: Aug 2008
Messaggi: 458
Re: Piccoli esperimenti con Arduino crescono...

Ho da parte un Arduino 1 che comprai tempo fa quando iniziai a costruire la matrice RF che commuta le mie antenne, poi sviluppata su un processore 8602. Ora giace inutilizzato, ma penso che potrei usarlo per fare un Wattmetro digitale. Dove hai preso il display LCD? Come si interfaccia ad Arduino?
73 Godifredo
I0GOD non  è collegato   Rispondi quotando
Vecchio 15-01-14, 10:30   #18
IZ7PDX
Senior Member
 
L'avatar di IZ7PDX
 
Registrato dal: Sep 2008
ubicazione: Locorotondo
Messaggi: 1,120
Re: Piccoli esperimenti con Arduino crescono...

Quote:
Originariamente inviata da I0GOD Visualizza il messaggio
Ho da parte un Arduino 1 che comprai tempo fa quando iniziai a costruire la matrice RF che commuta le mie antenne, poi sviluppata su un processore 8602. Ora giace inutilizzato, ma penso che potrei usarlo per fare un Wattmetro digitale. Dove hai preso il display LCD? Come si interfaccia ad Arduino?
73 Godifredo
Ciao Golfredo, ho visto solo ora la tua richiesta, dunque il display LCD 16x2 lo ho acquistato qui http://www.robot-italy.com/it/1602-lcd-shield.html
Questa è una versione piuttosto economica e risulta molto accattivante per il suo contrasto e visibilità, contro ha un lieve effetto memoria sulle transizioni veloci (a volte non guasta) e micropulsanti delicati ma molto comodi ad essere interfacciati su ingressi analogici (è già provvisto di contatti esterni predisposti anche per fornire alimentazione 0 e 5V ad eventuali sensori esterni).

Per quanto riguarda l'interfacciamento devi sapere che ogni produttore fa quello che gli pare, non esiste uno standard rigoroso e quindi devi sempre controllare bene lo schema allegato per riconfigurare la posizione dei pin tra LCD ed Arduino.
In particolare quando includi l'apposita libreria devi dichiarare i pin in questo modo...

codice:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
Nulla di complicato... si impara presto.
Ho da poco ordinato anche il seguente "Graphic ST7565 Negative LCD (128x64) with RGB backlight"
che mi permette di avere una maggiore quantità di info visualizzabili, lo danno ad un prezzo ridicolo perche necessita un'adattamento delle tensioni dei livelli logici utilizzati tramite operatore incluso nel kit... http://www.robot-italy.com/it/catalo...GB%20backlight

Ho portato avanti i giochetti con Arduino e finalmente sono riuscito a modificare ed adattare le librerie CAT a i seguenti tipi di RTX:
Yaesu FT817,FT857,FT897, e precedenti... Dal FT950 in poi il protocollo di comunicazione è cambiato e ho alcune difficoltà di elaborazione che richiedono tempo.
Con ICOM in particolare la possibilità di gestire un selettore d'antenna automatico o manuale con qualsiasi tipo di radio è semplificato, la ICOM adotta un range di tensioni 0V-8V per gestire il cambio banda da unico pin, questi valori possono essere suddivisi in 1024 livelli analogici per rilevare ogni banda radioamatoriale e non.

Se trovo tempo libero vedo di finire il commutatore d'antenna che mi permette di pilotare qualsiasi tipo di relè fino a tensioni di 40V e 30A di assorbimento utilizzando n. IRF540 e solo una scheda Arduino Uno.
Esso gestisce 8 uscite antenna (chiuse a massa con resistenza 50 ohm quando non usate) due antenne RX , 2 ingressi RTX sia in modalità automatica che manuale, può pilotare due stepper alla ricerca automatica del miglior ROS in antenna su qualsiasi banda (se la rete di accordo lo permette). Può gestire filtri di banda aggiuntivi (4 ingressi antenna + 4 filtri di banda) e n. relè di commutazione di per servizi vari.
Spero di terminare gli adattamenti CAT per poter gestire il tutto in modalità SO2R anche con RTX di marche diverse contemporaneamente.

Appena posso posto qualche schema e qualche video/foto.
IZ7PDX non  è collegato   Rispondi quotando
Rispondi

Segnalibri

Strumenti della discussione Cerca in questa discussione
Cerca in questa discussione:

Ricerca avanzata

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilie sono attive
Il codice IMG è attivo
il codice HTML è disattivato

Salto del forum


Tutti gli orari sono GMT +1. Attualmente sono le 11:24.


Powered by vBulletin versione 3.8.6
Copyright ©: 2000 - 2019, Jelsoft Enterprises Ltd.
Traduzione italiana Team: vBulletin-italia.it