2 Arduinos gleichzeitig programmieren

Ich habe gerade 2 Arduinos am PC angeschlossen. Arduino Uno an Com5 und Arduino Mega 2560 an COM6. Gleichzeitig habe ich 2 Sketche am laufen (bzgl. Wire.h). Nun muss ich jedesmal im anderen Sketch den COM-Port sowie das Arduino Board ändern. Gibts da ne einfache Möglichkeit ausser mit 2 Rechnern/VM zu arbeiten?

hi,

Du kannst Dein arduino-verzeichnis komplett kopieren, und hast dann zb C:\arduino und c:\arduino2.
auf den desktop zwei links zu den beiden arduino.exe's.
was Du auf einem einstellst, beinflußt den anderen nicht. schön wär's,wenn man sie verschiedenfarbig einstellen könnte, aber da hab' ich noch nichts gefunden.
zumindest stehen unten in der IDE jeweils der typ und der port...

gruß stefan

Wie steht's mit die IDE einfach zweimal starten, dann einmal für den UNO konfigurieren, die zweite Instanz für den Mega2560? Funktioniert bei mir wunderbar, aber bei mir heissen die seriellen Schnittstellen auch nicht COM6, sondern /dev/ttyUSB0 :).

hi, pylon,

das ist unter windows anders, da gilt eine einstellung für beide instanzen des programms.
Du mußt wirklich eine kopie starten...

gruß stefan

pylon:
Wie steht's mit die IDE einfach zweimal starten, dann einmal für den UNO konfigurieren, die zweite Instanz für den Mega2560? Funktioniert bei mir wunderbar, aber bei mir heissen die seriellen Schnittstellen auch nicht COM6, sondern /dev/ttyUSB0 :).

Ja so siehts auf meinem Netbook auch in etwa aus. Nur ist mir der fürs kompilieren etc zu langsam und der Bildschirm zu klein. Einziger Vorteil wie ich finde, der Serial Monitor öffnet sichdirekt und auch bei der Arduino IDE kann ich direkt auf Tools klicken ohne ein paar s zu warten. Das mit der 2. IDE ist zwar murks, aber vllt nicht die schlechteste Lösung im Moment. Danke.

Ich würde an Deiner Stelle lernen wie man das von der Kommandozeile aus macht, also make oder scons. Dann kannst Du soviele Arduinos parallel flashen wie Du Ports hast. Und Du kannst Die nervige IDE aussen vor lassen. Das ist ein weiterer großer Pluspunkt :wink:

Ich habe ein weiteres Problem mit I2C. Mit dem BeispielSketch habe ich soweit meinen Master und Slave eingerichtet.
Habe nun etwas weiter herumgespielt.

Das Endergebnis soll so aussehen, dass der Master den Slave nach dem Wert fragt. Dieser Wert soll dann per Serial.print ausgegeben werden, jedoch nur, wenn sich der Wert geändert hat.

Master

#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  static char cAlt;
  Wire.requestFrom(2, 1);    // request 6 bytes from slave device #2

  while(Wire.available())    // slave may send less than requested
  { 
    char c = Wire.read(); // receive a byte as character
    if(c != cAlt)
    {
      Serial.println(c);         // print the character
    }
    cAlt = c;
  }
}

Slave

#include <Wire.h>
static int i;

void setup()
{
  Wire.begin(2);
  Wire.onRequest(requestEvent);
  Serial.begin(9600);
}

void loop()
{
  if(i > 0 && i <9) {
    i++;
  }
  else {
    i = 0;
  }


  delay(1000);
Serial.println(i, DEC);
}
void requestEvent()
{
  char c[] = {"2"};
  Wire.write(c);
}

Ich habe derzeit einfach testweise Werte 1 und danach Wert 2 übergeben. Der Serial Monitor gibt nun

1
?
2

Woher kommt das ?

Wie kann ich das machen, dass ich direkt einen Integer an den Master mitteilen kann.

Beispiel loop:
Schrittkette geht von i = 3 auf i = 4. Nun soll der Master i = 4 entsprechend den Text dafür ausgeben. i = 4 => Pumpe an

char c[] = {"2"};

Das ist unschön. Wenn du da einen Null-terminierten String willst, schreibe lieber char c[] = {'2', '\0'}. Das ist deutlicher.
Oder: char* c = "2";

Aber du kannst mit Wire gleich Byte schicken. Du musst nicht char verwenden. Nehme für deine Daten daher einfach den Datentyp byte (0-255).

  if(i > 0 && i <9) {
    i++;
  }
  else {
    i = 0;
  }

Das geht auch kürzer:
i = (i +1) % 10; //i geht von 0 - 9, da 10 mod 10 = 0