Hi,
i am currently working on a project with a joystick transmitter and a receiver with multible servo's and stepper motors. but yesterday i added the map() function to the receiver code to set servo limits but now when i turn it on i starts 'shaking' (it keep moving from, i think, 90-80) and i don't know why.
here are the codes:
transmitter:
#include <SPI.h>
#include <RF24.h>
#include <nRF24L01.h>
#define CE_PIN 7
#define CSN_PIN 6
RF24 radio(CE_PIN, CSN_PIN);
const byte direccion[] = "00001";
void setup() {
pinMode(10, OUTPUT);
radio.begin();
Serial.begin(9600);
radio.openWritingPipe(direccion);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop() {
//servo 1
int joystick2 = analogRead(A7);
int angle1 = map(joystick2,0, 1023, 0,180);
Serial.println(angle1);
radio.write(&angle1, sizeof(angle1));
delay(40);
//servo 2
int joystick3 = analogRead(A2);
int angle2 = map(joystick3,0, 1023, 0,180);
Serial.println(angle2);
radio.write(&angle2, sizeof(angle2));
delay(40);
//servo 3
int joystick4 = analogRead(A3);
int angle3 = map(joystick4,0, 1023, 0,180);
Serial.println(angle3);
radio.write(&angle3, sizeof(angle3));
delay(40);
//servo 4
int joystick6 = analogRead(A5);
int angle4 = map(joystick6,0, 1023, 0,180);
Serial.println(angle4);
radio.write(&angle4, sizeof(angle4));
delay(40);
}
receiver:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define CE_PIN 49
#define CSN_PIN 48
RF24 radio(CE_PIN, CSN_PIN);
const byte direccion[] = "00001";
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int angle1 =90;
int angle2 =90;
int angle3 =90;
int angle4 =90;
int newAngle1;
int newAngle2;
int newAngle3;
int newAngle4;
void setup(){
pinMode(10, OUTPUT);
Serial.begin(9600);
servo1.attach(2); //correct
servo2.attach(5); //correct
servo3.attach(4); //correct
servo4.attach(3); //correct
//set starting positions
servo1.write(90);
servo2.write(90);
servo3.write(90);
servo4.write(84); //continious servo
//radio
radio.begin();
radio.openReadingPipe(0, direccion);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop() {
//servo's
if (radio.available()){
//servo 1
radio.read(&angle1, sizeof(angle1));
newAngle1 = map(angle1, 0, 180, 80, 100);
Serial.println(newAngle1);
servo1.write(newAngle1);
delay(30);
//servo 2
radio.read(&angle2, sizeof(angle2));
newAngle2 = map(angle2,0, 180, 65, 115);
Serial.println(newAngle2);
servo2.write(newAngle2);
delay(30);
//servo 3
radio.read(&angle3, sizeof(angle3));
newAngle3 = map(angle3, 0, 180, 65, 115);
Serial.println(newAngle3);
servo3.write(newAngle3);
delay(30);
//servo 4
radio.read(&angle4, sizeof(angle4));
newAngle4 = map(angle4, 0, 180, 80, 88);
Serial.println(angle4);
servo4.write(angle4);
delay(30);
}
}
here is a visualisation of what is happening:
I hope this is eneugh information.