Pages: [1]   Go Down
Author Topic: Invio tramite xbee  (Read 1093 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 217
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Code:
#include <XBee.h>
XBee xbee = XBee();
int buttonPin=8;
int valButton=LOW;
void setup(){
xbee.begin(9600);
pinMode(buttonPin,INPUT);
}
void loop(){
  valButton= digitalRead(buttonPin);
  if(valButton==HIGH){
    xbee.send(HIGH);
    else{
      deley(100);
    }
   
Chiedo gentilmente se sapete suggerirmi qualche cosa anche per quanto riguarda l'altra parte del programma che al momento è così:
Code:
/**
/@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
}
}
}
Logged

0
Online Online
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

identazione del codice e manca l'errore di compilazione...
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Full Member
***
Karma: 0
Posts: 217
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

0
Online Online
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Full Member
***
Karma: 0
Posts: 217
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

per esempio scrivo high sul pin TX? e nell'altro arduino quando sul pin RX arriva HIGH resetta il contatore per esempio?
Logged

0
Online Online
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, se scrivi high sul pin tx "rompi" il protocollo seriale.

puoi inviare il caratte "h" o "H" e dall'atro arduino quando leggerai quel carattere farei qualcosa
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Full Member
***
Karma: 0
Posts: 217
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi utilizzando un digitalWrite sul pin TX ed un digitalRead sul pin RX?
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 113
Posts: 5953
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi utilizzando un digitalWrite sul pin TX ed un digitalRead sul pin RX?
NO, Lesto ti stà dicendo che devi parlarci in "seriale" ... http://arduino.cc/en/Reference/Serial ... inviando dei "caratteri" e ricevendo dei "caratteri", non lavorando come se fossero dei pin digitali smiley

Guglielmo
Logged

Search is Your friend ... or I am Your enemy !

Offline Offline
Full Member
***
Karma: 0
Posts: 217
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quindi utilizzo i comandi della libreria serial print() e read()?
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 217
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
int TxPin=1;
#include <SoftwareSerial.h>
SoftwareSerial trasmissione = SoftwareSerial(255,TxPin);
int buttonPin=8;
int valButton=LOW;
void setup(){
  pinMode(buttonPin,INPUT);
  trasmissione.begin(9600);
}
void loop(){
  valButton=digitalRead(buttonPin);
    if(valButton==HIGH){
      trasmissione.write("h");
    }else{
      delay(100);
    }

}
Potrebbe essere una cosa del genere sul trasmettitore?
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 217
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
/**
/@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
}
}
}
Logged

0
Online Online
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per inviare ok.

per il ricevitore:
se ci dessi l'errore...

ah e prima di postare il codice fai tool->autoformat

l'errore è
Code:
sketch_mar28a:6: error: invalid conversion from ‘const char*’ to ‘char’

alla riga:

Code:
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.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Full Member
***
Karma: 0
Posts: 217
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quindi come deve essere dichiarato?
Logged

0
Online Online
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
const char tras= 'h';

ps. ma spiego così male?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Full Member
***
Karma: 0
Posts: 217
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley smiley smiley Sorry è che tutto il giorno che provo e non avevo notato la differenza scusa ancora!
Logged

Pages: [1]   Go Up
Jump to: