Avec une alim de laboratoir, j'ai beau faire varier la tension d'alimentation de l'AOP, la tension de sortie reste la même.
Par contre en changeant la valeur de la sortie pwm de l'arduino, je peut la faire varier.
voici mon code:
//-------------Variable joystick-----------------
int x_axis; //Variable valeur axe X
int y_axis; // Variable Valeur axe Y
int z_axis; //Variable valeur axe Z
//-----------Variable LIN BUS------------------
const byte sync_byte = 0x55;
const byte id_joystick = 0xA8;
const byte id_poignee = 0xE9;
//-------------Configuration pin ------------------
int pin_x_axis = 3;
int pin_y_axis = 5;
int pin_z_axis = 6;
//-----------Variable pour code--------------
byte data[12];
unsigned long linbusInterval = 3000; //Durée qui sépare 2 trames
unsigned long prevByteMicros = 0; //Moment réception message précédent
unsigned long curByteMicros = 0; //Moment actuel
boolean newData = false;
const byte numBytes = 15;
byte receivedBytes[numBytes];
byte numReceived = 0;
//--------------Config Arduino------------------
void setup() {
Serial1.begin(19200);
Serial.begin(115200);
pinMode(pin_x_axis, OUTPUT);
}
//----------------Calcul du Checksumm-------------------------------------------
byte checksum(const uint8_t* message, char nBytes, uint16_t sum) {
while (nBytes-- > 0) sum += *(message++); // Fait la somme des message
while (sum >> 8) // renvoi le premier bit éventuel vers le bit de poids faible
sum = (sum & 255) + (sum >> 8); //Inversion et ajout du 9e bit éventuel
return (~sum);
}
//-------------------Lecture valeurs-----------------------------------------------
void parse_frame() {
if (newData == true) {
if (receivedBytes[2] == id_joystick) {
x_axis = receivedBytes[3];
y_axis = receivedBytes[5];
}
else if (receivedBytes[2] == id_poignee) {
z_axis = receivedBytes[4];
}
newData = false;
}
}
//-----------------Réception trames lin ------------------------------------------------
void getlin() {
static boolean recvInProgress = false;
static byte ndx = 0;
int startmarker = 0x0;
byte rb;
while (Serial1.available() > 0 && newData == false) {
curByteMicros = micros();
if (curByteMicros - prevByteMicros >= linbusInterval) {
recvInProgress = false;
receivedBytes[ndx] = '\0';
numReceived = ndx;
ndx = 0;
newData = true;
//Serial.print (recvInProgress);
//Serial.println();
}
prevByteMicros = curByteMicros;
rb = Serial1.read();
recvInProgress = true;
if (recvInProgress == true) {
receivedBytes[ndx] = rb;
ndx++;
if (ndx >= numBytes) {
ndx = numBytes - 1;
}
}
}
}
//--------------------Affichage trame sur moniteur série--------------------------------------
void showNewData() {
if (newData == true) {
for (byte n = 0; n < numReceived; n++) {
Serial.print (receivedBytes[n], HEX);
Serial.print (" ");
}
Serial.println();
newData = false;
//Serial.print(newData);
}
}
//------------------------------Génération signal PWM-----------------------------------------------
void generatePWM() {
byte x;
byte y;
byte z;
x = map(x_axis, 0, 255, 47, 174);
y = map(y_axis, 0, 255, 64, 191);
z = map(z_axis, 0, 255, 64, 191);
analogWrite(pin_x_axis, x);
analogWrite(pin_y_axis, y);
analogWrite(pin_z_axis, z);
}
//---------------Fonction loop------------------------
void loop() {
getlin();
parse_frame();
generatePWM();
}
Il faudrait que je puisse faire varier:
x = map(x_axis, 0, 255, 47, 174);
fonctionne pour 12v (j'ai 6v au neutre)
y = map(y_axis, 0, 255, 64, 191);
fonctionne pour 14v (j'ai 7v au neutre)
Je devrais pouvoir faire varier les valeurs en fonction de la tension d'alimentation.