Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


Panneau latéral

projets:patatas-de-goma:dev:code-2arduinos

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 <Tone.h>
#include <SerialCommand.h>
 
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 <Tone.h>
#include <SerialCommand.h>
 
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...");
}
/home/resonancg/www/wiki/data/pages/projets/patatas-de-goma/dev/code-2arduinos.txt · Dernière modification: 2014/08/20 22:39 de resonance