salve , premetto la mia quasi totale ignoranza , su arduino .
io ho costruito un joystik per i vecchi video giochi anni 80 , volevo trasformarlo in un joystik bluetooth .
ho trovato vati progetti che usano dei pad della xbox360 o ps3 . ma durante la mia ricerca ho trovato una discussioe che trattava di trasmettere dati tramite bluetooth .
nella discussione cè un esempio su come far accendere u led facendo comunicare due arduio nano tramite bluetooth .
praticamente sul primo cè un pulsante e ovviamente sul secondo cè un led .
come inizio sarebbe perfetto .
vi posto il codice :
//*****TX BLUETOOTH***
//Realizzato da ElettroshockNow (ElettroshockNow@gmail.com)
// e condiviso su EnergiAlternativa.org
//
//ATTENZIONE:
//
//CC BY-NC-SA 4.0
//Uso non commerciale, modificabile, con obbligo di condivisione-
//http://creativecommons.org/licenses/by-nc-sa/4.0/deed.it
//
//
const int Tastatore = 10;
const int ledPin = 13;
const byte Ripeti_invio = 2;
byte Invio = 2;
void setup() {
Serial.begin(57600) ;
pinMode(Tastatore, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (digitalRead(Tastatore) && Invio){
digitalWrite(ledPin, LOW);
Serial.print("off");
Serial.print("/");
Invio--;
}
else if (!digitalRead(Tastatore) && Invio < Ripeti_invio) {
digitalWrite(ledPin, HIGH);
Serial.print("on");
Serial.print("/");
Invio++;
}
}
e il codice per la ricivente :
//*****RX BLUETOOTH***
//Realizzato da ElettroshockNow (ElettroshockNow@gmail.com)
// e condiviso su EnergiAlternativa.org
//
//ATTENZIONE:
//
//CC BY-NC-SA 4.0
//Uso non commerciale, modificabile, con obbligo di condivisione-
//http://creativecommons.org/licenses/by-nc-sa/4.0/deed.it
//
//
int led = 13;
char Stringa_Ricevuta[5];
byte Indice_RX = 0;
byte inByte;
void setup() {
Serial.begin(57600) ;
pinMode(led, OUTPUT);
}
void loop()
{
if (Serial.available())
{
inByte =Serial.read();
if ((inByte != 47) && (Indice_RX < 4)) //Ricevi il dato fino / all'invio e max 5 byte
{
Stringa_Ricevuta[Indice_RX++] = inByte;
}
else
{
if (strcmp(Stringa_Ricevuta, "off") == 0)digitalWrite(led, LOW);
else if (strcmp(Stringa_Ricevuta, "on") == 0)digitalWrite(led, HIGH);
Stringa_Ricevuta[Indice_RX] = 0;
Indice_RX = 0;
}
}
}
la mia domanda e questa , praticamete mi servirebbero solo 5 contatti in piu ( destra , sinistra , alto , basso , sparo 1 e sparo 2? se ricopio il codice cambiando il pin di collegamento , po andar bene?
grazie
> albepancio: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
albepancio:
è la prima domanda che faccio per questo argomento ...... non ricordo di aver fatto gia un post su questo argomento ,
cmq se + cosi chiedo scusa
Ehhhhhh ? ? ? :o :o :o ... scusa, che c'entra ? ... ma lo hai letto bene il mio post ? ? ? Devi solo fare una correzione ...
Secondo me si può semplificare il codice ...
... invece di inviare delle stringhe tipo "on", "off" ecc. non ti è più facile inviare UN solo carattere che identifica cosa è stato premuto ? In fin dei conti, con un solo carattere, anche eliminado i caratteri speciali e rimanendo nel set classico, 0..9, A..Z, a..z, comunque identifichi un bel po' di condizioni.
La trasmissione di un solo carattere più veloce, a livello di codice NON ti richiede l'uso della classe String, ma ti basta un char, il codice è più leggero e molto più semplice fare i confronti o, addirittura, usare uno switch/case
questa e la modifica che ho fatto aggiungento i comandi aggiutivi. il modo che mi hai consigliato non so come poterlo fare , quindi a logica ho fatto questa modifica secodo te e giuasta?
No, non era questo che io intendevo ...
... il mio suggerimento era di NON usare più le stringhe, quindi NON più "on", "off" o cose simili, ma usare un singolo carattere, es. 'A', 'a', 'B', 'b', 'C', 'c', ... e così via, uno per indicare ciascuna condizione.
Quindi, ad esempio, Fire_1 premuto, trasmetto 'A', Fire_1 rilasciato, trasmetto 'a'; Fire_2 premuto trasmetto 'B', Fire_2 rilasciato trasmetto 'b', e così via ... tanto hai caratteri a sufficienza ...
... in ricezione la cosa ti si semplifica perché NON dovendo ricevere più una stringa ("on", "off", ecc) devi ricevere solo un singolo char e già sai cosa sta avvenendo.
Ovviamnete, per fare questo, il programma va interamente riscritto seguendo un'altra strada, e ...
... senza offesa, leggendo la tua "presentazione", purtroppo NON so se hai l'esperienza sufficiente per riuscire a farlo :
infatti ho scritto che questo non è il modo che mi avevi suggerito , ma a logica mi sembrava il modo di modificare il codice originale , .
si farlo come dici te , non saprei da dove iniziare . la differenza dal codice che ho postato io e quello che mi hai suggerito di scrivere , sta ella semlicita o nella velocita con cui funziona il tutto?
p.s.
mi daresti qualche indizio su come dovrebbe venire:):):):):):
albepancio:
... mi daresti qualche indizio su come dovrebbe venire:):):):):):
Ci sono tanti esempi on-line ... QUESTO è uno veramente minimo che manda i comandi da uno smartPhone ... se guardi il codice vedi che se riceve '1' accende il LED, se riceve '0' lo spegne ... ovvero ... lavora con UN solo carattere
if(Serial.available() > 0) se la variabile e maggiore di 0 esegui i comandi successivi giusto?
{
data = Serial.read(); //Read the incoming data and store it into variable data questo non lò caito
Serial.print(data); qui invia i dati giusto?
if(data == '1') controlla il valore se è uguale a 1
digitalWrite(13, HIGH); qui imposta il pin 13 a livello alto
giusto?
quindi devo ripetere questi comandi per ogni direzione ( nominandolo el void setup e nel void loop)
e questo per quello che riguarda la ricevente .
per la trasmittente?
scusa se ho tirato degli strafalcioni .
dovrei documentarmi ma il tempo e pochissimo
void setup() {
//Definisce i pin a cui sono collegati i LED
pinMode(13, OUTPUT); //alto
pinMode(12, OUTPUT); //basso
pinMode(11, OUTPUT); //destra
pinMode(10, OUTPUT); //sinistra
pinMode(9, OUTPUT); //fuoco
//Inizializza la comunicazione seriale
Serial.begin(57600) ;
}
//Legge un carattere dal seriale e lo pone in c
char c = Serial.read();
//Se il carattere letto è 'a' accende il LED rosso
if (c == 'a') {
digitalWrite (13, HIGH);
cosi puo andare???? ripetuto per ogni pin e questo per la ricevente
ho trovato un corso on line ( ci sono le line guida di base) pero adesso come faccio ad iviare quei comandi al bluetooth?
codice simili ma da write va su read , va sull arduio ricevente,
ma per far trasmettere dalla periferica bluetooth?
La "periferica bluetooth" altro NON è che un semplce collegamento SERIALE tra i tuoi due Arduino, quindi ...
... devi solo implementare una comunicazione seriale (usando la SoftwareSerial) tra un arduino e l'altro.
Da una parte trasmetterai e dall'altra leggerai quello che trasmetti ... se cerchi ci sono un'infinità di esmepio per collegare via seriale due Arduino ... basta che ti ricordi che tu al posto di un filo hai due moduli BT (... cosa, a questo livello, ininfluente).
a dire il vero uso yhaoo ,,, ho cercato ed ho trovato questo mini corso http://www.mauroalfieri.it/corso-arduino-on-line.html, pensavo fosse quello il comado ,
mi documentero ancora e nel fine settimana cerchero di capirci qualcosa,,,
al limite me lo correggi?