salve a tutti
ho realizzato con molta fatica uno sketch che mi permette di visualizzare(su un four digit s7sd sparkfun) , in pollici o cm la distanza misurata da un hc-sr04 e sono molto soddisfatto anche se il suddetto sketch sembra scritto con la destra da un maiale mancino..
ora sto cercando di avere il display remoto usando gli xbee s1 (li ho scelti perche pensavo che in un futuro fosse possibile visualizzare la distanza su uno smartphone o un tablet, ma credo di essermi sbagliato nell'acquisto).
ho preso un secondo arduino (anche se credo se ne possa fare a meno utilizzando gli in e out dell'xbee), per averne uno per la parte TX e uno per la parte RX.
ho diviso e modificato lo sketch in modo che un arduino legga l'hc-sr04 e invii la misura e l'altro riceva la misura, faccia tutti i calcoli e mostri la distanza sul s7sd.
gli xbee sono settati e riesco diciamo cosi a "chattare" in xctu.
ma quando alimento il tutto, sul display dell'RX vedo solo visualizzato il contenuto della memoria e non la somma tra la memoria e il dato ricevuto dall'xbee
collegando l'xbee rx al pc e aprendo xctu vedo che qualche cosa, che non so interpretare, arriva....
questi gli sketch:
TX
arduino uno
hc-sr04
droids 990.002 v2.0
xbee s1
#include <SoftwareSerial.h>
SoftwareSerial XBee(0, 1); // RX, TX
int val = 0; // si userà val per conservare lo stato del pin di input
int trigPin = 9; //Trig - green Jumper
int echoPin = 8; //Echo - yellow Jumper
long duration;
unsigned long contatore;
unsigned long contaimpulsi;
void setup() {
Serial.begin (9600);
contatore=millis();
contaimpulsi=0;
// imposta il pin digitale come input
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// The sensor is triggered by a HIGH pulse of 10 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read the signal from the sensor: a HIGH pulse whose
// duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
Serial.print (duration); //prova
delay(1000);
}
e RX
arduino micro
droids 990.002 v2.0
xbee s1
serial four digit seven segment display (sparkfun)
#include <EEPROM.h>
#include <SoftwareSerial.h>
SoftwareSerial XBee(0,12); // RX, TX
SoftwareSerial Serial7Segment(3,1); //RX pin, TX pin
#define BUTTON1 5 // pin di input dove è collegato il pulsante
#define BUTTONPIU A4
#define BUTTONMENO A2
#define BUTTONSX A5
int val = 0; // si userà val per conservare lo stato del pin di input
long durationRX, cm, INCHES, feet, inches;
int X;
int XX;
void setup() {
Serial.begin (9600);
Serial7Segment.begin(9600); //Talk to the Serial7Segment at 9600 bps
Serial7Segment.write('v'); //Reset the display - this forces the cursor to return to the beginning of the display
//Define inputs and outputs
//pinMode(LED, OUTPUT); // imposta il pin digitale come output
pinMode(BUTTON1, INPUT); // imposta il pin digitale come input
X = EEPROM.read(XX);
}
void loop() {
Serial7Segment.write('v'); //Reset the display - this forces the cursor to return to the beginning of the display
if (Serial.available() > 0) {
durationRX = Serial.read();
}
val = digitalRead(BUTTON1); // legge il valore dell'input e lo conserva
// convert the time into a distance feet e cm
cm = ((durationRX/2) / 29.1) + X;
INCHES = ((durationRX/2) / 74) + X;
feet = INCHES / 12;
inches = INCHES% 12; //es x = 7% 5; // X ora contiene 2
if (digitalRead(BUTTONPIU) == HIGH)
{
(X++);
}
if (digitalRead(BUTTONMENO) == HIGH)
{
(X--);
}
if (digitalRead(BUTTONSX) == HIGH)
{
EEPROM.write(XX, X);
Serial7Segment.write(0x7A); // Decimal, colon, apostrophe control command
Serial7Segment.write((byte) 0);
delay(100);
Serial7Segment.write(0x7A); // Decimal, colon, apostrophe control command
Serial7Segment.write((byte) 255);
}
if (val == LOW) {
Serial7Segment.write(0x79); // Decimal, colon, apostrophe control command
Serial7Segment.write(0x01);
Serial7Segment.print(cm);
/*
Serial.print(cm);
Serial.print(" cm"); //esegui operazioni A
Serial.println();
*/
}
else {
if (feet >= 10) {
Serial7Segment.write(0x79);
Serial7Segment.write(0x79);
Serial7Segment.print(feet);
Serial7Segment.write(0x77); // Decimal, colon, apostrophe control command
Serial7Segment.write((byte) 2); // Turns on colon, apostrophoe, and far-right
Serial7Segment.write(0x79); // Decimal, colon, apostrophe control command
Serial7Segment.write(0x02);
Serial7Segment.print(inches);
}
else {
Serial7Segment.write(0x79); // Decimal, colon, apostrophe control command
Serial7Segment.write(0x01);
Serial7Segment.print(feet);
Serial7Segment.write(0x77); // Decimal, colon, apostrophe control command
Serial7Segment.write((byte) 2); // Turns on colon, apostrophoe, and far-right
Serial7Segment.write(0x79); // Decimal, colon, apostrophe control command
Serial7Segment.write(0x02);
Serial7Segment.print(inches);
}
}
delay(100);
}
qualche anima pia che mi prende per mano e mi accompagna su questo sentiero di montagna intrapreso in infradito?!?!
grazie dell'attenzione e dell'eventuale pazienza.