====== Code 2 Arduinos ======
===== Arduino 1 (relié à l'ordi) =====
// Controle avec Pure Data (SerialCommand)
// TIMER 0 : 5/6
// TIMER 1 : 9/10 OCR1A/OCR1B
// TIMER 2 : 3/11 (TONE)
#include
#include
Tone tone1;
SerialCommand sCmd;
// Klaxon
int pinTone = 3;
int pinPwm = 9;
// Phare
int pinPhPwm = 5;
int periodePWM = 800; //max duty cycle 800 marche avec polulu
void setup() {
// ENABLE
pinMode(6,OUTPUT); // M1EN
digitalWrite(6,HIGH);
pinMode(12,OUTPUT); // M2EN
digitalWrite(12,HIGH);
pinMode(2,OUTPUT); // M1INA
digitalWrite(2,HIGH);
pinMode(7,OUTPUT); // M2INA
digitalWrite(7,HIGH);
// 16Mhz(horloge)/2/1(prescaler) : 8Mhz
TCCR1A = 0b10100000;
TCCR1B = 0b00010001;
ICR1 = periodePWM; // 8Mhz/PeriodePWM = ... Hz
// Erreur TCCR2A Pour Leonardo !!
// PINS
pinMode(pinPwm, OUTPUT);
pinMode(pinPhPwm, OUTPUT);
tone1.begin(pinTone);
// SERIAL COMMAND
Serial.begin(115200);
sCmd.addCommand("kl1_tone", kl1_tone); // tone
sCmd.addCommand("kl1_pwm", kl1_pwm); // intensite pwm %
sCmd.addCommand("kl1_stop", kl1_stop);
sCmd.addCommand("ph1_pwm", ph1_pwm); // intensite pwm %
// > ARDUINO 2
sCmd.addCommand("kl2_tone", kl2_tone); // tone
sCmd.addCommand("kl2_pwm", kl2_pwm); // intensite pwm %
sCmd.addCommand("kl2_stop", kl2_stop);
sCmd.addCommand("ph2_pwm", ph2_pwm); // intensite pwm %
sCmd.setDefaultHandler(unrecognized);
//Serial.println("Ready");
}
void loop() {
sCmd.readSerial();
}
// -------------- KLAXON 1 ----------------- //
void kl1_pwm() {
float pwm;
char *arg;
arg = sCmd.next();
if (arg != NULL) {
pwm = atoi(arg);
OCR1A = pwm * periodePWM * 0.01;
}
}
void kl1_tone() {
int aNumber, aNumber2;
char *arg;
arg = sCmd.next(); // 1st Argument
if (arg != NULL) {
aNumber = atoi(arg);
}
arg = sCmd.next(); // 2nd Argument
if (arg != NULL) {
aNumber2 = atoi(arg);
tone1.play(aNumber, aNumber2);
} else {
tone1.play(aNumber);
}
}
// STOP
void kl1_stop() {
tone1.stop();
}
// -------------- PHARE 1 ----------------- //
void ph1_pwm() {
int pwm;
char *arg;
arg = sCmd.next();
if (arg != NULL) {
pwm = atoi(arg);
analogWrite(pinPhPwm,pwm*2.55); // from 0-100 to 0-255
}
}
// -------------- KLAXON 2 ----------------- //
void kl2_pwm() {
float pwm;
char *arg;
String str;
arg = sCmd.next();
if (arg != NULL) {
pwm = atoi(arg);
str = String(int(pwm));
Serial.print("kl_pwm ");
Serial.println(str);
}
}
void kl2_tone() {
float aNumber, aNumber2;
char *arg;
String str, str2;
arg = sCmd.next(); // 1st Argument
if (arg != NULL) {
aNumber = atoi(arg);
str = String(int(aNumber));
}
arg = sCmd.next(); // 2nd Argument
if (arg != NULL) {
aNumber2 = atoi(arg);
str2 = String(int(aNumber2));
Serial.print("kl_tone ");
Serial.print(str);
Serial.println(str2);
} else {
Serial.print("kl_tone ");
Serial.println(str);
}
}
void kl2_stop() {
Serial.print("kl_stop");
}
// -------------- PHARE 2 ----------------- //
void ph2_pwm() {
float pwm;
char *arg;
String str;
arg = sCmd.next();
if (arg != NULL) {
pwm = atoi(arg);
str = String(int(pwm));
Serial.print("ph_pwm ");
Serial.println(str);
}
}
// ----------- UNRECOGNIZED ----------------- //
void unrecognized(const char *command) {
Serial.println("Unrecognized...");
}
===== Arduino 2=====
// Controle avec Pure Data (SerialCommand)
// TIMER 0 : 5/6
// TIMER 1 : 9/10 OCR1A/OCR1B
// TIMER 2 : 3/11 (TONE)
#include
#include
Tone tone1;
SerialCommand sCmd;
// Klaxon
int pinTone = 3;
int pinPwm = 9;
// Phare
int pinPhPwm = 5;
int periodePWM = 800; //max duty cycle
void setup() {
// ENABLE
pinMode(6,OUTPUT); // M1EN
digitalWrite(6,HIGH);
pinMode(12,OUTPUT); // M2EN
digitalWrite(12,HIGH);
pinMode(2,OUTPUT); // M1INA
digitalWrite(2,HIGH);
pinMode(7,OUTPUT); // M2INA
digitalWrite(7,HIGH);
// 16Mhz(horloge)/2/1(prescaler) : 8Mhz
TCCR1A = 0b10100000;
TCCR1B = 0b00010001;
ICR1 = periodePWM; // 8Mhz/800 = 10 Khz
// PINS
pinMode(pinPwm, OUTPUT);
pinMode(pinPhPwm, OUTPUT);
tone1.begin(pinTone);
// SERIAL COMMAND
Serial.begin(115200);
sCmd.addCommand("kl_tone", kl_tone); // tone
sCmd.addCommand("kl_pwm", kl_pwm); // intensite pwm %
sCmd.addCommand("kl_stop", kl_stop);
sCmd.addCommand("ph_pwm", ph_pwm); // intensite pwm %
sCmd.setDefaultHandler(unrecognized);
//Serial.println("Ready");
}
void loop() {
sCmd.readSerial();
}
// -------------- KLAXON ----------------- //
void kl_pwm() {
float pwm;
char *arg;
arg = sCmd.next();
if (arg != NULL) {
pwm = atoi(arg);
OCR1A = pwm * periodePWM * 0.01;
}
}
void kl_tone() {
int aNumber, aNumber2;
char *arg;
arg = sCmd.next(); // 1st Argument
if (arg != NULL) aNumber = atoi(arg);
arg = sCmd.next(); // 2nd Argument
if (arg != NULL) {
aNumber2 = atoi(arg);
tone1.play(aNumber, aNumber2);
} else {
tone1.play(aNumber);
}
}
// STOP
void kl_stop() {
tone1.stop();
}
// -------------- PHARE ----------------- //
void ph_pwm() {
float pwm;
char *arg;
arg = sCmd.next();
if (arg != NULL) {
pwm = atoi(arg);
analogWrite(pinPhPwm,pwm*2.55); // from 0-100 to 0-255
}
}
// ----------- UNRECOGNIZED ----------------- //
void unrecognized(const char *command) {
Serial.println("Unrecognized...");
}