====== 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..."); }