I already know this, but the problem is that if I use a lower PWM, then the full range between valve_close and valve_fully_opened will not be very accurate.
I'm using a remote transmitter (a Futaba) to control the proportional valves and so if I use a lower PWM, the output range will give to the valve a twitch behavior.
This is my current code.
I already tried with PWM from 0 to 200, or 0 to 180 but the joystick wasn't very accurate.
And even with this solution, the board didn't worked perfectly.
int ch1;
int ch2;
int ch3;
int pin_sx_PWM;
int pin_sx1;
int pin_sx2;
int stick_sx;
int pin_dx_PWM;
int pin_dx1;
int pin_dx2;
int pin_pistone1;
int pin_pistone2;
int motore_switch;
int starter;
int a = 0;
int b = 0;
void setup() {
pinMode(6, OUTPUT); // PWM OUTPUT FOR PROPORTIONAL VALVE SX
pinMode(3, OUTPUT); // PWM OUTPUT FOR PROPORTIONAL VALVE DX
pinMode(8, INPUT); // RECEIVER INPUT CH1
pinMode(9, INPUT); // RECEIVER INPUT CH2
pinMode(7, OUTPUT); // STARTER RELAY
pinMode(A0, OUTPUT); // MOT1A
pinMode(A2, OUTPUT); // MOT1B // era A1 ma ora genera blocchi
pinMode(A3, OUTPUT); // MOT2A
pinMode(5, OUTPUT); // MOT2B // settato a P_OUT con uscita PWM ** DA RISOLVERE
Serial.begin(115200); // Pour a bowl of Serial
}
void loop() {
digitalWrite(7, LOW);
// analogWrite(6, 128); // SET PWM FOR SX VALVE
ch2 = pulseIn(9, HIGH, 25000); // CANALE 2, STICK SINISTRO up/down
ch1 = pulseIn(8, HIGH, 25000); // CANALE 1, STICK DESTRO up/down
if ((ch2 > 1518) && (ch2 < 1923) && (ch1 > 1489) && (ch1 < 1521) ){
ch2 = map(ch2, 1520, 1918, 0, 255);
ch2 = constrain(ch2, 0, 255); // DA VERIFICARE QUESTA FUNZIONA
if (ch2 > 0){
digitalWrite(A0, HIGH);
digitalWrite(A2, LOW);
digitalWrite(A3, HIGH);
digitalWrite(5, LOW);
delay(50);
analogWrite(6, ch2); // SET PWM FOR SX VALVE
analogWrite(3, ch2); // SET PWM FOR DX VALVE
}
else {
analogWrite(6, 0); // TURN OFF PWM FOR SX VALVE
analogWrite(3, 0); // TURN OFF PWM FOR DX VALVE
delay(50);
digitalWrite(A0, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(5, LOW);
}
}
else if ((ch2 < 1490) && (ch2 > 1095) && (ch1 > 1489) && (ch1 < 1521) ){
ch2 = map(ch2, 1103, 1500, 255, 0);
ch2 = constrain(ch2, 0, 255); // DA VERIFICARE QUESTA FUNZIONA
if (ch2 > 5){
digitalWrite(A0, LOW);
digitalWrite(A2, HIGH);
digitalWrite(A3, LOW);
digitalWrite(5, HIGH);
delay(50);
analogWrite(6, ch2); // SET PWM FOR SX VALVE
analogWrite(3, ch2); // SET PWM FOR DX VALVE
}
else {
analogWrite(6, 0); // TURN OFF PWM FOR SX VALVE
analogWrite(3, 0); // TURN OFF PWM FOR DX VALVE
delay(50);
digitalWrite(A0, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(5, LOW);
}
}
// GESTIONE STICK DX per STERZATA POSTO
else if ((ch1 > 1520) && (ch1 < 1923) && (ch2 > 1491) && (ch2 < 1519)){
ch1 = map(ch1, 1520, 1918, 0, 255);
ch1 = constrain(ch1, 0, 255); // DA VERIFICARE QUESTA FUNZIONA
if (ch1 > 5){
digitalWrite(A0, HIGH);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(5, HIGH);
delay(50);
analogWrite(6, ch1); // SET PWM FOR SX VALVE
analogWrite(3, ch1); // SET PWM FOR DX VALVE
}
else {
// Serial.println("STOP");
analogWrite(6, 0); // TURN OFF PWM FOR SX VALVE
analogWrite(3, 0); // TURN OFF PWM FOR DX VALVE
delay(50);
digitalWrite(A0, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(5, LOW);
}
}
else if ( (ch1 < 1490) && (ch2 > 1100) && (ch2 > 1490) && (ch2 < 1520)){
//Serial.println("SINISTRA");
ch1 = map(ch1, 1103, 1500, 255, 0);
ch1 = constrain(ch1, 0, 255); // DA VERIFICARE QUESTA FUNZIONA
if (ch1 > 5){
digitalWrite(A0, LOW);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
digitalWrite(5, LOW);
delay(50);
analogWrite(6, ch1); // SET PWM FOR SX VALVE
analogWrite(3, ch1); // SET PWM FOR DX VALVE
}
else {
// Serial.println("STOP");
analogWrite(6, 0); // TURN OFF PWM FOR SX VALVE
analogWrite(3, 0); // TURN OFF PWM FOR DX VALVE
delay(50);
digitalWrite(A0, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(5, LOW);
}
}
else {
// Serial.println("STOP");
analogWrite(6, 0); // TURN OFF PWM FOR SX VALVE
analogWrite(3, 0); // TURN OFF PWM FOR DX VALVE
delay(50);
digitalWrite(A0, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(5, LOW);
}
delay(400);
}