Why do you think that?
For binary transfer of the integer value between 400 and 600 there are two bytes. The three digit number as ascii is only one additional byte. I don't see that the extra byte is going to slow your send and read timings in a meaningful way.
Ok, so how should I send the values so they are the same before and after they are sent?
I don't understand the question. Why should the values change after they are sent?
I think the sending code should be like this to be read using the Serial Input Basics techniques.
if (yVal > 600 || yVal <= 400) {
MANDO.print("<1,yVal>")
}
When I was experimenting, I decided to use println() in the values that had alredy been sent and they were not eh same as before, they were from 0-250 more or less and only in one direction, if i moved the joystick up, the value was always 0 and it only changed when i moved it down.
Please provide the latest versions of the send and receive codes using the Serial Input Basics techniques.
This is the send code:
#include <SoftwareSerial.h>
SoftwareSerial MANDO (10, 11);
int yPin = A0;
int yVal;
int yPin2 = A1;
int yVal2;
int xPin = A2;
int xVal;
void setup() {
// put your setup code here, to run once:
Serial.begin (9600);
Serial.println ("Listo");
MANDO.begin (38400);
pinMode(yPin, INPUT);
pinMode(yPin2, INPUT);
pinMode(xPin, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
yVal = analogRead(yPin);
//Serial.println(yVal);
yVal2 = analogRead(yPin2);
//Serial.println(yVal2);
xVal = analogRead(xPin);
//Serial.println(xVal);
if (yVal > 600 || yVal <= 400) {
MANDO.print("<1,yVal>");
}
if (yVal2 > 600 || yVal2 < 400) {
MANDO.print("<2,yVal2>");
}
if (xVal > 600 || xVal < 400) {
MANDO.print("<3,xVal>");
}
}
I am currently trying to make the receive code.
Put some delay or periodic sending on a millis() timer in the sending code loop(). Perhaps send the values every 250 ms.
The problem that I have now is that I am not sure how to use the string that the controller is sending to set the joystick values on the reciever.
Can you reliably receive each message sent by the sender?
You may do better to drop the '1','2','3' index scheme you need earlier and just send a complete data set with each transmission
Mando.print("<yVal,yVal2,xVal>")
You can then follow the strtok() example in the tutorial and use atoi() on the three pieces.
Something like this
void parseData() {
char * strtokIndx;
strtokIndx = strtok(tempChars,",");
yVal = atoi(strtokIndx);
strtokIndx = strtok(NULL, ",");
yVal2 = atoi(strtokIndx);
strtokIndx = strtok(NULL, ",");
xVal = atoi(strtokIndx);
}
Now the codes look like this:
Receiver:
#include <SoftwareSerial.h>
SoftwareSerial SUBMARINO (2, 3);
int speedPin = 9;
int dirPin1 = 8;
int dirPin2 = 7;
int speedMotor;
int yVal;
//motor izquierdo
int speedPin2 = 6;
int dirPin4 = 5;
int dirPin3 = 4;
int speedMotor2;
int yVal2;
int xVal;
//motor derecho
int speedPin3 = 10;
int dirPin5 = 11;
int dirPin6 = 12;
int speedMotor3;
char tempChars;
void setup() {
// put your setup code here, to run once:
Serial.begin (9600);
Serial.println ("Listo");
SUBMARINO.begin (38400);
pinMode(speedPin, OUTPUT);
pinMode(dirPin1, OUTPUT);
pinMode(dirPin2, OUTPUT);
pinMode(speedPin2, OUTPUT);
pinMode(speedPin2, OUTPUT);
pinMode(dirPin3, OUTPUT);
pinMode(dirPin4, OUTPUT);
pinMode(speedPin3, OUTPUT);
pinMode(dirPin5, OUTPUT);
pinMode(dirPin6, OUTPUT);
digitalWrite(dirPin1, 0);
digitalWrite(dirPin2, 0);
digitalWrite(dirPin3, 0);
digitalWrite(dirPin4, 0);
digitalWrite(dirPin5, 0);
digitalWrite(dirPin6, 0);
}
void parseData() {
char * strtokIndx;
strtokIndx = strtok(tempChars,",");
yVal = atoi(strtokIndx);
strtokIndx = strtok(NULL, ",");
yVal2 = atoi(strtokIndx);
strtokIndx = strtok(NULL, ",");
xVal = atoi(strtokIndx);
}
void loop() {
// put your main code here, to run repeatedly:
if (SUBMARINO.available())
{
/*bt = SUBMARINO.readStringUntil(",");
//Serial.write(SUBMARINO.read());
yVal = SUBMARINO.readStringUntil('\n').toInt();
//Serial.write(yVal);
yVal2 = SUBMARINO.readStringUntil('\n').toInt();
//Serial.write(yVal2);
xVal = SUBMARINO.readStringUntil('\n').toInt();
//Serial.write(xVal);*/
if (yVal > 600) {
speedMotor = map(yVal,600,1023,0,255);
digitalWrite(dirPin1, 1);
digitalWrite(dirPin2, 0);
analogWrite(speedPin, speedMotor);
}
if (yVal <= 400) {
speedMotor = map(yVal,400,0,0,255);
digitalWrite(dirPin1, 0);
digitalWrite(dirPin2, 1);
analogWrite(speedPin, speedMotor);
}
if (yVal2 > 600) {
speedMotor2 = map(yVal2,600,1023,0,255);
speedMotor3 = map(yVal2,600,1023,0,255);
digitalWrite(dirPin3, 0);
digitalWrite(dirPin4, 1);
digitalWrite(dirPin5, 0);
digitalWrite(dirPin6, 1);
analogWrite(speedPin2, speedMotor2);
analogWrite(speedPin3, speedMotor3);
}
if (yVal2 <= 400) {
speedMotor2 = map(yVal2,400,0,0,255);
speedMotor3 = map(yVal2,400,0,0,255);
digitalWrite(dirPin3, 1);
digitalWrite(dirPin4, 0);
digitalWrite(dirPin5, 1);
digitalWrite(dirPin6, 0);
analogWrite(speedPin2, speedMotor2);
analogWrite(speedPin3, speedMotor3);
}
if (xVal > 600) {
speedMotor2 = map(xVal,600,1023,0,255);
speedMotor3 = map(xVal,600,1023,0,255);
digitalWrite(dirPin3, 0);
digitalWrite(dirPin4, 1);
digitalWrite(dirPin5, 0);
digitalWrite(dirPin6, 0);
analogWrite(speedPin2, speedMotor2);
analogWrite(speedPin3, speedMotor3);
}
if (xVal <= 400) {
speedMotor2 = map(xVal,400,0,0,255);
speedMotor3 = map(xVal,400,0,0,255);
digitalWrite(dirPin3, 0);
digitalWrite(dirPin4, 0);
digitalWrite(dirPin5, 0);
digitalWrite(dirPin6, 1);
analogWrite(speedPin2, speedMotor2);
analogWrite(speedPin3, speedMotor3);
}
}
}
Controller:
#include <SoftwareSerial.h>
SoftwareSerial MANDO (10, 11);
int yPin = A0;
int yVal;
int yPin2 = A1;
int yVal2;
int xPin = A2;
int xVal;
void setup() {
// put your setup code here, to run once:
Serial.begin (9600);
Serial.println ("Listo");
MANDO.begin (38400);
pinMode(yPin, INPUT);
pinMode(yPin2, INPUT);
pinMode(xPin, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
yVal = analogRead(yPin);
//Serial.println(yVal);
yVal2 = analogRead(yPin2);
//Serial.println(yVal2);
xVal = analogRead(xPin);
//Serial.println(xVal);
if (yVal > 600 || yVal <= 400) {
MANDO.print("<yVal,yVal2,xVal>");
delay(250);
}
if (yVal2 > 600 || yVal2 < 400) {
MANDO.print("<yVal,yVal2,xVal>");
delay(250);
}
if (xVal > 600 || xVal < 400) {
MANDO.print("<yVal,yVal2,xVal>");
delay(250);
}
}
Now it is sending the data, but this happend:
Once I move any of the joysticks, the dirPins are active all the time and do not change depending on the joystick that I move.
Your receiver code makes no sense, and is not reading the incoming data per the tutorial. You need to add and call the functions to read and parse the data. Try this
#include <SoftwareSerial.h>
SoftwareSerial SUBMARINO (2, 3);
int speedPin = 9;
int dirPin1 = 8;
int dirPin2 = 7;
int speedMotor;
int yVal;
//motor izquierdo
int speedPin2 = 6;
int dirPin4 = 5;
int dirPin3 = 4;
int speedMotor2;
int yVal2;
int xVal;
//motor derecho
int speedPin3 = 10;
int dirPin5 = 11;
int dirPin6 = 12;
int speedMotor3;
const byte numChars = 32;
char receivedChars[numChars];
char tempChars[numChars];
boolean newData = false;
void setup() {
Serial.begin (9600);
Serial.println ("Listo");
SUBMARINO.begin (38400);
pinMode(speedPin, OUTPUT);
pinMode(dirPin1, OUTPUT);
pinMode(dirPin2, OUTPUT);
pinMode(speedPin2, OUTPUT);
pinMode(speedPin2, OUTPUT);
pinMode(dirPin3, OUTPUT);
pinMode(dirPin4, OUTPUT);
pinMode(speedPin3, OUTPUT);
pinMode(dirPin5, OUTPUT);
pinMode(dirPin6, OUTPUT);
digitalWrite(dirPin1, 0);
digitalWrite(dirPin2, 0);
digitalWrite(dirPin3, 0);
digitalWrite(dirPin4, 0);
digitalWrite(dirPin5, 0);
digitalWrite(dirPin6, 0);
}
void loop() {
recvWithStartEndMarkers();
if (newData)
{
Serial.println(receivedChars);
strcpy(tempChars, receivedChars);
newData = false;
parseData();
//run motors based on data
}
if (yVal > 600) {
speedMotor = map(yVal, 600, 1023, 0, 255);
digitalWrite(dirPin1, 1);
digitalWrite(dirPin2, 0);
analogWrite(speedPin, speedMotor);
}
if (yVal <= 400) {
speedMotor = map(yVal, 400, 0, 0, 255);
digitalWrite(dirPin1, 0);
digitalWrite(dirPin2, 1);
analogWrite(speedPin, speedMotor);
}
if (yVal2 > 600) {
speedMotor2 = map(yVal2, 600, 1023, 0, 255);
speedMotor3 = map(yVal2, 600, 1023, 0, 255);
digitalWrite(dirPin3, 0);
digitalWrite(dirPin4, 1);
digitalWrite(dirPin5, 0);
digitalWrite(dirPin6, 1);
analogWrite(speedPin2, speedMotor2);
analogWrite(speedPin3, speedMotor3);
}
if (yVal2 <= 400) {
speedMotor2 = map(yVal2, 400, 0, 0, 255);
speedMotor3 = map(yVal2, 400, 0, 0, 255);
digitalWrite(dirPin3, 1);
digitalWrite(dirPin4, 0);
digitalWrite(dirPin5, 1);
digitalWrite(dirPin6, 0);
analogWrite(speedPin2, speedMotor2);
analogWrite(speedPin3, speedMotor3);
}
if (xVal > 600) {
speedMotor2 = map(xVal, 600, 1023, 0, 255);
speedMotor3 = map(xVal, 600, 1023, 0, 255);
digitalWrite(dirPin3, 0);
digitalWrite(dirPin4, 1);
digitalWrite(dirPin5, 0);
digitalWrite(dirPin6, 0);
analogWrite(speedPin2, speedMotor2);
analogWrite(speedPin3, speedMotor3);
}
if (xVal <= 400) {
speedMotor2 = map(xVal, 400, 0, 0, 255);
speedMotor3 = map(xVal, 400, 0, 0, 255);
digitalWrite(dirPin3, 0);
digitalWrite(dirPin4, 0);
digitalWrite(dirPin5, 0);
digitalWrite(dirPin6, 1);
analogWrite(speedPin2, speedMotor2);
analogWrite(speedPin3, speedMotor3);
}
}
void recvWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
char startMarker = '<';
char endMarker = '>';
char rc;
while (SUBMARINO.available() > 0 && newData == false) {
rc = SUBMARINO.read();
if (recvInProgress == true) {
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '\0'; // terminate the string
recvInProgress = false;
ndx = 0;
newData = true;
}
}
else if (rc == startMarker) {
recvInProgress = true;
}
}
}
void parseData() { // split the data into its parts
char * strtokIndx; // this is used by strtok() as an index
strtokIndx = strtok(tempChars, ","); // get the first part - the string
yVal = atoi(strtokIndx);
Serial.println(yVal);
strtokIndx = strtok(NULL, ","); // this continues where the previous call left off
yVal2 = atoi(strtokIndx); // convert this part to an integer
Serial.println(yVal2);
strtokIndx = strtok(NULL, ",");
xVal = atoi(strtokIndx); // convert this part to a float
Serial.println(xVal);
}
It still does not work ,and this is want I see when I go into the SerialMonitor:
Shouldn't I see the actual values from yVal, yVal2 and xVal?
Yes. I'm not convinced that the sending code is correct, but you said earlier that the message was received.
Try the sending code without the " "
MANDO.print(<yVal,yVal2,xVal>);
Now I get the following error:
Arduino: 1.8.16 (Windows 10), Board: "Arduino Uno"
C:\Users\aleja\Desktop\BluetoothPrueba\BluetoothPrueba.ino: In function 'void loop()':
BluetoothPrueba:38:19: error: expected primary-expression before '<' token
MANDO.print(<yVal,yVal2,xVal>);
^
BluetoothPrueba:38:36: error: expected primary-expression before ')' token
MANDO.print(<yVal,yVal2,xVal>);
^
BluetoothPrueba:43:19: error: expected primary-expression before '<' token
MANDO.print(<yVal,yVal2,xVal>);
^
BluetoothPrueba:43:36: error: expected primary-expression before ')' token
MANDO.print(<yVal,yVal2,xVal>);
^
BluetoothPrueba:48:19: error: expected primary-expression before '<' token
MANDO.print(<yVal,yVal2,xVal>);
^
BluetoothPrueba:48:36: error: expected primary-expression before ')' token
MANDO.print(<yVal,yVal2,xVal>);
^
exit status 1
expected primary-expression before '<' token
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Sorry, I started drinking early , and haven't really set up to test.
Try
MANDO.write('<');//send start marker
MANDO.print(yVal,yVal2,xVal);//send ascii values
MANDO.write('>');//send end marker
Or perhaps
MANDO.write('<');//send start marker
MANDO.print(yVal);//send ascii values
MANDO.write(',');
MANDO.print(yVal2);
MANDO.write(',');
MANDO.print(xVal);
MANDO.write('>');//send end marker
Now I get this other error:
Arduino: 1.8.16 (Windows 10), Board: "Arduino Uno"
C:\Users\aleja\Desktop\BluetoothPrueba\BluetoothPrueba.ino: In function 'void loop()':
BluetoothPrueba:39:34: error: no matching function for call to 'SoftwareSerial::print(int&, int&, int&)'
MANDO.print(yVal,yVal2,xVal);//send ascii values
^
In file included from C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Stream.h:26:0,
from C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/HardwareSerial.h:29,
from C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:233,
from sketch\BluetoothPrueba.ino.cpp:1:
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:65:12: note: candidate: size_t Print::print(const __FlashStringHelper*)
size_t print(const __FlashStringHelper *);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:65:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:66:12: note: candidate: size_t Print::print(const String&)
size_t print(const String &);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:66:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:67:12: note: candidate: size_t Print::print(const char*)
size_t print(const char[]);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:67:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:68:12: note: candidate: size_t Print::print(char)
size_t print(char);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:68:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:69:12: note: candidate: size_t Print::print(unsigned char, int)
size_t print(unsigned char, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:69:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:70:12: note: candidate: size_t Print::print(int, int)
size_t print(int, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:70:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:71:12: note: candidate: size_t Print::print(unsigned int, int)
size_t print(unsigned int, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:71:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:72:12: note: candidate: size_t Print::print(long int, int)
size_t print(long, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:72:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:73:12: note: candidate: size_t Print::print(long unsigned int, int)
size_t print(unsigned long, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:73:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:74:12: note: candidate: size_t Print::print(double, int)
size_t print(double, int = 2);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:74:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:75:12: note: candidate: size_t Print::print(const Printable&)
size_t print(const Printable&);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:75:12: note: candidate expects 1 argument, 3 provided
BluetoothPrueba:45:34: error: no matching function for call to 'SoftwareSerial::print(int&, int&, int&)'
MANDO.print(yVal,yVal2,xVal);//send ascii values
^
In file included from C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Stream.h:26:0,
from C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/HardwareSerial.h:29,
from C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:233,
from sketch\BluetoothPrueba.ino.cpp:1:
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:65:12: note: candidate: size_t Print::print(const __FlashStringHelper*)
size_t print(const __FlashStringHelper *);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:65:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:66:12: note: candidate: size_t Print::print(const String&)
size_t print(const String &);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:66:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:67:12: note: candidate: size_t Print::print(const char*)
size_t print(const char[]);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:67:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:68:12: note: candidate: size_t Print::print(char)
size_t print(char);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:68:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:69:12: note: candidate: size_t Print::print(unsigned char, int)
size_t print(unsigned char, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:69:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:70:12: note: candidate: size_t Print::print(int, int)
size_t print(int, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:70:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:71:12: note: candidate: size_t Print::print(unsigned int, int)
size_t print(unsigned int, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:71:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:72:12: note: candidate: size_t Print::print(long int, int)
size_t print(long, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:72:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:73:12: note: candidate: size_t Print::print(long unsigned int, int)
size_t print(unsigned long, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:73:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:74:12: note: candidate: size_t Print::print(double, int)
size_t print(double, int = 2);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:74:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:75:12: note: candidate: size_t Print::print(const Printable&)
size_t print(const Printable&);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:75:12: note: candidate expects 1 argument, 3 provided
BluetoothPrueba:51:34: error: no matching function for call to 'SoftwareSerial::print(int&, int&, int&)'
MANDO.print(yVal,yVal2,xVal);//send ascii values
^
In file included from C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Stream.h:26:0,
from C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/HardwareSerial.h:29,
from C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:233,
from sketch\BluetoothPrueba.ino.cpp:1:
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:65:12: note: candidate: size_t Print::print(const __FlashStringHelper*)
size_t print(const __FlashStringHelper *);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:65:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:66:12: note: candidate: size_t Print::print(const String&)
size_t print(const String &);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:66:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:67:12: note: candidate: size_t Print::print(const char*)
size_t print(const char[]);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:67:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:68:12: note: candidate: size_t Print::print(char)
size_t print(char);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:68:12: note: candidate expects 1 argument, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:69:12: note: candidate: size_t Print::print(unsigned char, int)
size_t print(unsigned char, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:69:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:70:12: note: candidate: size_t Print::print(int, int)
size_t print(int, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:70:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:71:12: note: candidate: size_t Print::print(unsigned int, int)
size_t print(unsigned int, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:71:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:72:12: note: candidate: size_t Print::print(long int, int)
size_t print(long, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:72:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:73:12: note: candidate: size_t Print::print(long unsigned int, int)
size_t print(unsigned long, int = DEC);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:73:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:74:12: note: candidate: size_t Print::print(double, int)
size_t print(double, int = 2);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:74:12: note: candidate expects 2 arguments, 3 provided
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:75:12: note: candidate: size_t Print::print(const Printable&)
size_t print(const Printable&);
^~~~~
C:\Users\aleja\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.4\cores\arduino/Print.h:75:12: note: candidate expects 1 argument, 3 provided
exit status 1
no matching function for call to 'SoftwareSerial::print(int&, int&, int&)'
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
This is now error after error.
See my edit in the previous post.
Ok, now it works .
Now the only thing left is to make that when you are not moving the joysticks, both diPins of the motors are set to 0. I tried doing this on the yVal:
Controller:
if (yVal > 600 || yVal <= 400 || 400 < yVal < 600) {
MANDO.write('<');//send start marker
MANDO.print(yVal);//send ascii values
MANDO.write('>');//send end marker
}
Receiver:
if (400 < yVal < 600) {
speedMotor = 0;
digitalWrite(dirPin1, 0);
digitalWrite(dirPin2, 0);
analogWrite(speedPin, speedMotor);
}
But it doesn's work, in fact it just makes the lights of the l298 module to flicker.
Also, is it necesary to send every value (yVal, yVal2 and xVal) every time that I move each joystick, or can I leva like on that code?
Now the only thing left is to make that when you are not moving the joysticks, both diPins of the motors are set to 0.
I haven't really given any thought to the motor control.
What are the analogRead() values when the joysticks are not moving?
My thoughts are to send the three analogValues() as read every pass through loop, and do all the checking on the receiving end.
This is not correct syntax
if (400 < yVal < 600)
For a test value in range, use this
if( 400 < yVal && yVal < 600)
I would make the sending code a very simple mirror of the joystick values, and place all the analysis and testing on the receiving end.
#include <SoftwareSerial.h>
SoftwareSerial MANDO (10, 11);
int yPin = A0;
int yVal;
int yPin2 = A1;
int yVal2;
int xPin = A2;
int xVal;
void setup() {
Serial.begin (9600);
Serial.println ("Listo");
MANDO.begin (38400);
}
void loop() {
yVal = analogRead(yPin);
yVal2 = analogRead(yPin2);
xVal = analogRead(xPin);
MANDO.write('<');//send start marker
MANDO.print(yVal);//send ascii values
MANDO.write(',');
MANDO.print(yVal2);
MANDO.write(',');
MANDO.print(xVal);
MANDO.write('>');//send end marker
delay(250);
}