Visualizza messaggio singolo
Vecchio 03 maggio 20, 19:50   #61 (permalink)  Top
Smsteves
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
ecco la versione con il debug.

Se metti lasci la variabile debug a 1, puoi usare il monitor seriale e vedere cosa fa il sw.
Se la metti a 0 funziona normalmente..

Iniziamo a fare seriamente


#define Neutral 1500 // -- minimum forward signal
#define Maxspeed 2000 // -- maximum forward signal
#define Antsx 1000 // -- in front servo signal sx
#define Antdx 2000 // -- in front servo signal dx
#define Postsx 5 // out rear servo sx endpoint if inverted with postdx it reverse
#define Postdx 175 //-- out rear servo dx endpoint if inverted with postsx it reverse
#define Center 0 //-- add or subtract xx value to center steering
#define Tolerance 3 //-- if poor quality servo vibrates try 5
#define Max_gain 100 //-- gain steering reduction by throttle if reverse add -
#define Slowlimit 1700 //-- slow forward without endpoint correction
#include <Servo.h>
Servo myservo;
unsigned int Rxpulse;
unsigned int Gaspulse ;
unsigned int Course;
unsigned int Gain;

unsigned int NewPos = 0, OldPos = 0;
int Stato;
byte debug = 1;
void setup() {
myservo.attach(10); //-- rear servo signal out pin
pinMode(8, INPUT); //-- front servo signal in pin
pinMode(7, INPUT); //-- throttle signal in pin
if (debug == 1) {
Serial.begin(115200);
}
Stato = 0;
}



void loop() {
if (debug == 1) {
Serial.print("*******************");
Serial.print("\n");
Serial.print("Ciclo Stato = ");
Serial.print(Stato);
Serial.print("\n");
}
if (Stato == 0) {
//lettura
Rxpulse = pulseIn(8, HIGH, 10000);
Gaspulse = pulseIn(7, HIGH, 10000);
if (debug == 1) {
Serial.print("------------ stato 0 ");
Serial.print("\n");
Serial.print(Rxpulse);
Serial.print("\n");
Serial.print(Gaspulse);
Serial.print("\n");
}
}

if (Stato == 1) {
//Calcolo
Gaspulse = constrain (Slowlimit, Neutral, Maxspeed);//riduce valori dal canale gas
Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain);
Course = (Postdx - Postsx) ; //corsa in gradi da dx a sx
Course = Course / 2 ; //dimezza la corsa in gradi per ciascun lato
Course = Course * Gain / 100 ; //calcola i gradi di escursione in base all'accelleratore
NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Course ), (Postdx - Course));
if (debug == 1) {
Serial.print("------------ stato 1 ");
Serial.print("\n");
Serial.print(Gaspulse);
Serial.print("\n");
Serial.print(Gain);
Serial.print("\n");
Serial.print(Course);
Serial.print("\n");
}
}

if (Stato == 2) {
//scrittura
if (OldPos != NewPos) {
if (abs(NewPos - OldPos) > Tolerance) {
OldPos = NewPos;
myservo.write(NewPos + Center);
if (debug == 1) {
Serial.print("------------ stato 2 -maggiore ");
Serial.print("\n");
Serial.print(Course);
Serial.print("\n");
}
}
if (abs(OldPos - NewPos ) < Tolerance) {
OldPos = NewPos;
myservo.write(NewPos + Center);
if (debug == 1) {
Serial.print("------------ stato 2 -minore ");
Serial.print("\n");
Serial.print(Course);
Serial.print("\n");
}
}
}

if (OldPos == NewPos) {
OldPos = NewPos;
myservo.write(NewPos + Center);
if (debug == 1) {
Serial.print("------------ stato 2 -uguale ");
Serial.print("\n");
Serial.print(Course);
Serial.print("\n");
Serial.print(OldPos);
Serial.print("\n");
Serial.print(NewPos);
Serial.print("\n");
}
}
}
if (Stato == 3) {
// riparte da 0
Stato = 0;
Serial.print("stato 3 ------------");
Serial.print("\n");
Serial.print(Stato);
Serial.print(" stato\n");
}

//ritardo esecuzione cicli/stati
delay(3);
// Incrementa stato per il prossimo loop
++Stato;

}



--------------

Ora cerco una ricevente, la radio dovrebbe essere in qualche ripiano servi ne ho in giro qualcuno...
Smsteves non รจ collegato   Rispondi citando