Salve ragazzi,
sto lavorando ad un progetto dove un arduino invia diversi valori ad un altro arduino via seriale e wireless grazie a due moduli xbee.
Al momento riesco senza problemi a mandare e ricevere i valori e riesco anche a maneggiarli come voglio però rilevo un freeze quando i valori superano le due cifre, sembra quasi un sovraccarico delle info ricevute sul arduino ricevitore infatti nel primo che trasmette tutto continua a inviarsi fluidatamente, mentre nel secondo se i valori si alzano (da 0-80 vanno superano i 99) avviene un freeze temporaneo finchè i valori non tornano a 0 per un po di secondi.
Secondo voi cosa può essere?
Ecco i due sketch:
TX
/*
Edited version of the sketch for the PS3 Bluetooth library - developed by Kristian Lauszus
For more information visit my blog: http://blog.tkjelectronics.dk/ or
send me an e-mail: kristianl@tkjelectronics.com
*/
#include <PS3BT.h>
#include <usbhub.h>
// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
USB Usb;
//USBHub Hub1(&Usb); // Some dongles have a hub inside
BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
/* You can create the instance of the class in two ways */
PS3BT PS3(&Btd); // This will just create the instance
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch
bool printTemperature;
bool printAngle;
const uint8_t LED_tx = 2;
char dataPacket[64];
int Servo1 = 0; // 2 char
int Servo2 = 0; // 3 char
int Servo3 = 0; // 3 char
int led1 = 0;
int led2 = 0;
void setup() {
pinMode(LED_tx, OUTPUT);
Serial.begin(57600);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while (1); //halt
}
Serial.print(F("\r\nPS3 Bluetooth Library Started"));
}
void loop() {
Usb.Task();
if(PS3.PS3Connected || PS3.PS3NavigationConnected) {
Servo1 = map(PS3.getAnalogHat(LeftHatX), 0, 255, 0, 180);
Servo2 = PS3.getAnalogButton(L2);
Servo3 = PS3.getAnalogButton(R2);
if (PS3.getButtonClick(TRIANGLE)) {
led1 = 1;
} else {
led1 = 0;
}
if (PS3.getButtonPress(CIRCLE)) {
led2 = 1;
} else {
led2 = 0;
}
sprintf(dataPacket,"<%d,%d,%d,%d,%d>",Servo1, Servo2, Servo3, led1, led2); //sprintf(dataPacket, "X%d" ,gx);
Serial.println(dataPacket);
delay(10);
}
if (PS3.PS3Connected || PS3.PS3NavigationConnected) {
if (PS3.getButtonClick(PS)) {
Serial.print(F("\r\nPS"));
PS3.disconnect();
}
else {
// if (PS3.getButtonClick(TRIANGLE))
// Serial.print("\r\nH");
// if (PS3.getButtonPress(CIRCLE))
// Serial.print(F("\r\nH"));
if (PS3.PS3Connected)
digitalWrite(LED_tx, PS3.getButtonPress(CROSS));
else
digitalWrite(LED_tx, LOW);
if (PS3.getButtonClick(SQUARE))
Serial.print(F("\r\ndigitalWrite(ledPin, HIGH);"));
if (PS3.getButtonClick(UP)) {
Serial.print(F("\r\nUp"));
if (PS3.PS3Connected) {
PS3.setLedOff();
PS3.setLedOn(LED4);
}
}
}
}
}
#include <Servo.h>
#define SOP '<'
#define EOP '>'
bool started = false;
bool ended = false;
char inData[64];
byte index;
const int ledPin = 12; // the pin that the LED is attached to
int incomingByte; // a variable to read incoming serial data into
int valo = 0;
Servo myservo;
void setup() {
Serial.begin(57600); // initialize serial communication
Serial.println( "Serial Start" );
pinMode(ledPin, OUTPUT); // initialize the LED pin as an output
myservo.attach(7);
}
void loop() {
if (Serial.available() > 0) { // see if there's incoming serial data:
delay(1); //small delay to allow input buffer to fill
/*
incomingByte = Serial.read(); // read the oldest byte in the serial buffer
if (incomingByte == 'H') { // if it's a capital H (ASCII 72), turn on the LED
digitalWrite(ledPin, HIGH);
// delay(10);
digitalWrite(ledPin, LOW);
}
if (incomingByte == 'L') { // if it's an L (ASCII 76) turn off the LED
digitalWrite(ledPin, LOW);
}
*/
char inChar = Serial.read();
if(inChar == SOP)
{
index = 0;
inData[index] = '\0';
started = true;
ended = false;
}
else if(inChar == EOP)
{
ended = true;
return;
}
else
{
if(index < 63)
{
inData[index] = inChar;
index++;
inData[index] = '\0';
}
}
// We are here either because all pending serial
// data has been read OR because an end of
// packet marker arrived. Which is it?
if(started && ended)
{
// The end of packet marker arrived. Process the packet
int values[5]; // Array to hold the values
byte index = 0; // index into array
char *token = strtok(inData, ","); // Get the first token
while(token)
{
values[index] = atoi(token); // convert the token to an int and store it in the array
index++; // Increment the index
token = strtok(NULL, ","); // Keep parsing the same string
}
Serial.println("---------");
Serial.println(values[0]);
Serial.println(values[1]);
Serial.println(values[2]);
Serial.println(values[3]);
Serial.println(values[4]);
valo = values[0];
myservo.write(valo);
if (values[3] == 1) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
if (values[4] == 1) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
// Reset for the next packet
started = false;
ended = false;
index = 0;
inData[index] = '\0';
}
// delay(10);
}
}