Salve ragazzi il problema in questione è il seguente ho a disposizione due arduino e due moduli xbee. Su un arduino è montato il modulo coordinatore xbee ed un pulsante. Alla pressione di quest'ultimo dovrei mandare tramite la shield xbee un segnale HIGH all'altro arduino. L'altro arduino ogni qual volta riceve il segnale HIGH dall'xbee dovrebbe resettare un contatore. E' la prima volta che utilizzo i moduli xbee e non ho la minima idea di come si fa a livello software. Ho provato a realizzare due righe di codice ma da errore quando faccio la verifica.
Chiedo gentilmente se sapete suggerirmi qualche cosa anche per quanto riguarda l'altra parte del programma che al momento è così:
/**
/@author Christian Berti
/rilevatore di ingressi PROTOTIPO
**/
const int TxPin=6;//pin trasmissione seriale display LCD
#include <SoftwareSerial.h> //importo libreria seriale
SoftwareSerial mySerial = SoftwareSerial(255,TxPin);//dichiaro un oggetto della libreria
int FotoPin = 1;//dichiarazione attributo per memorizzazione lettura fotoresistore
int ledpin=13; //pin led riflettore fascio luminoso
int FotoValue;//attributo in cui viene memorizzato valore letto da fotoresistore
int controlPin=8;//pin led segnalatore passaggio
int contatore;//attributo dedito al conteggio
int buttonpin=12; // pin lettura valore interruttore
int valbutton=LOW;//dichiarazione attributo per memorizzazione stato interruttore
int val=0;//attributo in cui viene memorizzato valore letto da interruttore
void setup() {//dichiarazione utilizzo pin
pinMode(ledpin,OUTPUT); //dichiarazione tipo di pin
pinMode(controlPin, OUTPUT);//dichiarazione tipo di pin
pinMode(buttonpin,INPUT);//dichiarazione tipo di pin
pinMode (TxPin, OUTPUT);//dichiarazione tipo di pin
mySerial.begin(9600);//dichiarazione velocità aggiornamento LCD
delay(100);
mySerial.write(12);//pulizia LCD
}
void loop() {
valbutton= digitalRead(buttonpin);//associo lettura digitale all'attributo
digitalWrite(ledpin,HIGH);//accende il led riflettore
FotoValue = analogRead(FotoPin);// assegna all'attributo il valore letto
if (valbutton==HIGH){ //confronto lettura interruttore con valore HIGH
contatore=0;//azzero contatore
mySerial.println("Sistema Azzerato");//stampa su LCD
delay (2000);//ritarda di 2 secondi
}else if (valbutton==LOW){ //confronto lettura interruttore con valore LOW
if (FotoValue>280){//confronto attributo con soglia prefissata
mySerial.write(12);//pulizia LCD
digitalWrite(controlPin,HIGH);//istruzione eseguita solo se condizione precedente positiva; accende il led segnalatore
Serial.println(FotoValue);// stampa su seriale il valore del fotoresistore
contatore++;//incremente l'attributo
mySerial.print("Persone: ");//stampa su LCD
mySerial.println(contatore);//stampa su seriale l'attributo
delay(1500);//aspetta un secondo e mezzo
digitalWrite(controlPin,LOW);//spegne il led segnalatore
}
else{
delay(500);//aspetta mezzo secondo e riesegue la lettura del fotoresistore
}
}
}
Il problema purtroppo è che non so come funzionino i moduli xbee o meglio non so come funziona la libreria xbee! Pertanto rinnovo la domanda su come installare all'interno dell'IDE la libreria dei moduli xbee e su dove scaricarla! Infine credo che le funzioni che debbo utilizzare siano .send per il modulo che invia e l'altra ... Mah aspetto un vostro consiglio!
per gli xbee non devi installare nulla! ci parli via seriale, quello che gli scrivi è esattamente quello che viene trasmesso, e viceversa... esattamente come se parlassi con il PC
pres961:
quindi utilizzando un digitalWrite sul pin TX ed un digitalRead sul pin RX?
NO, Lesto ti stà dicendo che devi parlarci in "seriale" ... Serial - Arduino Reference ... inviando dei "caratteri" e ricevendo dei "caratteri", non lavorando come se fossero dei pin digitali
Ok questa è l'altra parte del codice ovvero il ricevitore del segnale ma non riesco a capire quale è l'errore che mi segnala l'IDE
/**
/@author Christian Berti
/rilevatore di ingressi PROTOTIPO
**/
int TxPin=6;//pin trasmissione seriale display LCD
const char tras= "h";
const int RxPin=0;
#include <SoftwareSerial.h> //importo libreria seriale
SoftwareSerial mySerial = SoftwareSerial(255,TxPin);//dichiaro un oggetto della libreria
SoftwareSerial ricezione = SoftwareSerial(255,RxPin);
int FotoPin = 1;//dichiarazione attributo per memorizzazione lettura fotoresistore
int ledpin=13; //pin led riflettore fascio luminoso
int FotoValue;//attributo in cui viene memorizzato valore letto da fotoresistore
int controlPin=8;//pin led segnalatore passaggio
int contatore;//attributo dedito al conteggio
int buttonpin=12; // pin lettura valore interruttore
char valbutton;//dichiarazione attributo per memorizzazione stato interruttore
int val=0;//attributo in cui viene memorizzato valore letto da interruttore
void setup() {//dichiarazione utilizzo pin
pinMode(ledpin,OUTPUT); //dichiarazione tipo di pin
ricezione.begin(9600);
pinMode(controlPin, OUTPUT);//dichiarazione tipo di pin
pinMode(buttonpin,INPUT);//dichiarazione tipo di pin
pinMode (TxPin, OUTPUT);//dichiarazione tipo di pin
mySerial.begin(9600);//dichiarazione velocità aggiornamento LCD
delay(100);
mySerial.write(12);//pulizia LCD
}
void loop() {
valbutton= ricezione.read();//associo lettura digitale all'attributo
digitalWrite(ledpin,HIGH);//accende il led riflettore
FotoValue = analogRead(FotoPin);// assegna all'attributo il valore letto
if (valbutton==tras){ //confronto lettura interruttore con valore HIGH
contatore=0;//azzero contatore
mySerial.println("Sistema Azzerato");//stampa su LCD
delay (2000);//ritarda di 2 secondi
}else{ //confronto lettura interruttore con valore LOW
if (FotoValue>280){//confronto attributo con soglia prefissata
mySerial.write(12);//pulizia LCD
digitalWrite(controlPin,HIGH);//istruzione eseguita solo se condizione precedente positiva; accende il led segnalatore
Serial.println(FotoValue);// stampa su seriale il valore del fotoresistore
contatore++;//incremente l'attributo
mySerial.print("Persone: ");//stampa su LCD
mySerial.println(contatore);//stampa su seriale l'attributo
delay(1500);//aspetta un secondo e mezzo
digitalWrite(controlPin,LOW);//spegne il led segnalatore
}
else{
delay(500);//aspetta mezzo secondo e riesegue la lettura del fotoresistore
}
}
}
ah e prima di postare il codice fai tool->autoformat
l'errore è
sketch_mar28a:6: error: invalid conversion from ‘const char*’ to ‘char’
alla riga:
const char tras= "h";
lui dice che non può trasformare un array di caratteri (o meglio un puntatore di caratteri vedi il *?) in un carattere.
E infatti "ciao" o anche solo "c" è un ARRAY di caratteri (detta stringa, da non confondere con String che è una CLASSE che poi al suo interno contiene la stringa e un pò di funzioni per semplificare il suo utilizzo)
Invece se parliamo di un carattere allora vorrai usare 'c', o meglio 'h' nel tuo caso.
Attento che NON è errore scrivere 'ciao' ma in pratica viene preso il valore numerico di ogni singolo carattere (vedi tabelle ascii), sommato, trocato a 255 (il massimo valore numerico di un carattere) e preso sempre dalla tabella ascii il carattere corrispondente. Insomma un bel casino che nessuno usa se non in particolarissimi.