Ciao a tutti,
mi sono appena iscritto e ho già bisogno dell'aiuto e della pazienza di qualcuno
Ho comprato l' "Arduino Starter Kit" e, dopo aver scrupolosamente seguito le prime lezioni del libro allegato, ho imparato a controllare il display (anch'esso nel kit).
Per evolvermi, ho pensato di comprare il modulo bluetooth BlueSmirf RN-42, ho saldato i pin al modulo, l'ho infine collegato ai piedini RX e TX (incrociati) di Arduino, a 5V e GND, infine ho collegato tra loro i due pin rimasti (RTS e CTS-1).
Ho creato uno sketch che semplicemente legge dati dalla seriale, accende un led per 3 secondi, scrive tali dati sul display e reinvia sulla seriale tali dati preceduti da un "You wrote: ".
Ho impostato la velocità della seriale a 115200, che da quanto ho letto è il valore di default per il modulo bt.
Ho infine collegato tramite bt lo smartphone e creato la connessione seriale.
Se dal computer scrivo qualcosa tutto funziona: il led si accende, sul display appare il testo, lo smartphone riceve il messaggio.
Se dallo smartphone scrivo qualcosa....... Nulla
Non si accende il led da me pilotato, non lampeggiano i led relativi alla seriale, non accade assolutamente nulla.
Infine, se connetto i pin RX e TX (0 e 1 di Arduino UNO) tra loro il sistema va in loop, esattamente come mi aspetto.
Ho pensato ad un problema sulla saldatura del pin TX del modulo, che quindi riceve da Arduino ma non invia, può essere o non andrebbe nulla in tal caso? Prima di toccare le saldature voglio provare ogni possibilità, dato che non ho esperienza col saldatore e rischio di fare danno..
Grazie per l'attenzione e portate pazienza
Allego foto e codice, casomai potesse esservi utile per farvi un'idea completa. Non faccio alcun cambiamento ai parametri di default del modulo (anche perchè se anche gli invio qualcosa non ottengo feedback di alcun tipo).Non è un bel codice, probabilmente faccio operazioni inutili soprattutto sulle stringhe: devo ancora approfondire bene quali sono le operazioni permesse e come vengono gestiti i puntatori, io nel dubbio per ora istanzio una stringa nuova ogni volta che ne devo modificare il valore.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
String last="";
String pre="";
const int internalLED = 13;
int count = 0;
void setup(){
lcd.begin(16, 2);
pinMode(internalLED, OUTPUT);
digitalWrite(internalLED, LOW);
Serial.begin(115200);
Serial.println("Hello world!");
lcd.clear();
lcd.print("Hello world!");
}
void loop()
{
if (Serial.available()) {
delay(100);
lcd.clear();
int reading = 0;
while (Serial.available() > 0) {
if(!reading) {
reading = 1;
// salvo la stringa, poiche' dalla seconda riga passera' alla prima e sulla seconda comparira' quella nuova
pre = String(last);
last = String();
}
count = 0;
digitalWrite(internalLED, HIGH);
const char lastChar = Serial.read();
last = String(last + lastChar);
}
reading = 0;
Serial.println(String("You wrote " + last));
lcd.setCursor(0,0);
lcd.print(pre);
lcd.setCursor(0,1);
lcd.print(last);
// la l che segue mi serve per l'eventuale scroll del messaggio sul display
int l = (last.length()-16);
if(l<0) l=0;
int scrolled = 0;
for (int positionCounter = 0; positionCounter < l; positionCounter++) {
scrolled = 1;
lcd.scrollDisplayLeft();
delay(500);
}
// riporto il messaggio in posizione 0, solo se l'ho shiftato ovviamente
if(scrolled) {
delay(1000);
for (int positionCounter = 0; positionCounter < l; positionCounter++) {
// scroll one position left:
lcd.scrollDisplayRight();
// wait a bit:
delay(50);
}
}
}
// mi occupo della temporizzazione del led, deve essere spento dopo circa 3 secondi. 30x100 millisecondi
if(count>30) {
//Serial.println("STILL ALIVE?");
count = 0;
digitalWrite(internalLED, LOW); // reset led state
} else {
count = count+1;
delay(100);
}
}
Edit:
Ho provato a rifinire la saldatura, staccato e riattaccato i cavi RX e TX. RX del modulo a TX di Arduino e viceversa.
Ora ho il funzionamento inverso: il cellulare invia e riceve, il pc riceve soltanto :-S
Se stacco temporaneamente il modulo dalla seriale, il pc invia correttamente e riceve la risposta. Se riattacco il modulo, riprendono a funzionare il modulo al 100% ed il pc in sola ricezione.