/* Le programme de la frouillance
piste 1 1.02 -> 4.53 3.51 amplitude
piste 2 0.52 -> 2.28 1.76 amplitude
rapport piste1 / piste 2 = 2
offset p1 1.02v offsset p2 0.52v
formule utilisé a verifier, tMax - offset - 20% + offset = tension de sortie dac voulu
resolution offset numérique p1 = 209 p2 = 106
tMax numerique p1 = 928 p2= 467
tMin numerique p1 = 209 p2= 106
amplitude p1 = 720 p2 = 360
numValBride = amplitude - 20% + offset
calcul ADC = tMesurée * 1024 / 5
*/
#include <EEPROM.h>
#include <Adafruit_MCP4725.h>
#include <Servo.h>
#include <SoftwareSerial.h>
#define adressage1 0x62
#define adressage2 0x63
#define memT true
Adafruit_MCP4725 dac;
Adafruit_MCP4725 dac2;
//int pos = 0;
//Servo servo_9;
const int pinAc1 = A0;
const int pinAc2 = A1;
//const int sortAc1 = 3;
//const int sortAc2 = 5;
const int pinDecl = 8 ;
const int numValBride1 = 784;
const int numValBride2 = 394;
const int pinRetWri1 = A5 ;
const int led = 13;
const int bootload = 7;
//float tensionP1 = 0 ;
//float tensionP2 = 0 ;
bool decl = false;
int bride = 80;
int lec1 = 0;
int lec2 = 0;
int wri1 = 0;
int wri2 = 0;
int valMPC1 = 0;
int valMPC2 = 0;
int offset1 = 0;
int offset2 = 0;
byte off1H = 0;
byte off1L = 0;
byte off2H = 0;
byte off2L = 0;
int mOffset1 = 0;
int mOffset2 = 0;
byte mOff1H = 0;
byte mOff1L = 0;
byte mOff2H = 0;
byte mOff2L = 0;
void setup()
{
pinMode(pinAc1, INPUT);
pinMode(pinAc2, INPUT);
pinMode(pinDecl, INPUT_PULLUP);
pinMode(bootload, INPUT_PULLUP);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
Serial.begin(19200);
dac.begin(adressage1);
dac2.begin(adressage2);
Serial.println("suce");
if (!digitalRead(bootload) == true) {
Serial.println("reglage offset ralenti ");
offset1 = 209;
offset2 = 106;
off1H = highByte(offset1);
off1L = lowByte(offset1);
off2H = highByte(offset2);
off2L = lowByte(offset2);
EEPROM.update(1, off1H);
delay(250);
EEPROM.update(2, off1L);
delay(250);
EEPROM.update(3, off2H);
delay(250);
EEPROM.update(4, off2L);
delay(250);
Serial.println("fini, gaz a fond et cycle le fil de setup ");
do {
digitalWrite(led, !digitalRead(led));
delay(250);
} while (!digitalRead(bootload) == true);
delay(80);
Serial.println("remets le fil");
do {
digitalWrite(led, !digitalRead(led));
delay(500);
} while (!digitalRead(bootload) == false);
Serial.println("phase2 fdp");
Serial.println("reglage offset WOT ");
mOffset1 = 928;
mOffset2 = 467;
mOff1H = highByte(mOffset1);
mOff1L = lowByte(mOffset1);
mOff2H = highByte(mOffset2);
mOff2L = lowByte(mOffset2);
EEPROM.update(5, mOff1H);
delay(250);
EEPROM.update(6, mOff1L);
delay(250);
EEPROM.update(7, mOff2H);
delay(250);
EEPROM.update(8, mOff2L);
delay(250);
Serial.println("fini, relache les gaz");
do {
digitalWrite(led, !digitalRead(led));
delay(250);
} while (!digitalRead(bootload) == true);
/* Ajouter calibrage DAC piste 1 et 2 sur offset */
}
int offset1 = word(EEPROM.read(1), EEPROM.read(2));
int offset2 = word(EEPROM.read(3), EEPROM.read(4));
int mOffest1 = word(EEPROM.read(5), EEPROM.read(6));
int mOffest2 = word(EEPROM.read(7), EEPROM.read(8));
Serial.println("offset ralenti piste 1 = " + String(offset1));
Serial.println("offset ralenti piste 2 =" + String(offset2) );
Serial.println("offset WOT piste1 =" + String(mOffset1));
Serial.println("offset WOT piste2 =" + String(mOffset2));
}
void loop()
{
decl = !digitalRead(pinDecl);
lec1 = analogRead(pinAc1);
lec2 = analogRead(pinAc2);
//Serial.println(lec1);
//Serial.println(decl) ;
if (decl == true && map(lec1, 209, 928, 0, 100) >= bride ) {
Serial.println("coucou");
wri1 = min(lec1, numValBride1);
wri2 = min(lec2, numValBride2);
} // controle enclenchement bride
else {
wri1 = lec1; // mise en valeur lecture brute sortie brute
wri2 = lec2;
}
valMPC1 = wri1 * 4 ;
valMPC2 = wri2 * 4 ;
dac.setVoltage(wri1, memT);
dac2.setVoltage(wri2, memT);
}