Arduinos über USB Verbinden Projekt

Ich habe da ein Projekt mit zwei arduinos. Ich habe wenig bis keine Erfarung beim Programieren.
Ich unterschätzte ein wenig wie Komplex das Programieren sein kann aus diesem Grund Hut ab vor denen die das Beherschen.
Da ich alles Materil für mein Projekt habe Fehlt es nur noch beim Programmieren, und aus diesem Grund bin ich hier. Ich hoffe das ich da die dringen benötiget Hilfe finde.

Zu meine Projekt:
Es get um ein Lichtbalken fürs auto, mit Diverses Instaltaionen dieser wird von einem Steuerkasten um Auto gesteuert. Das ihr euch ein Bild machen könnt habe ich ein Schema gezeichnet.

Eines meiner grössten Probleme ist es wie ich das machen muss mit der Komunikation zwischen den Arduinos.

Hier wäre noch die Funktions erklärung:

S1: Haupttaster schaltet LED 1 ein und gibt die anderen Taster frei. Bei erneutem Drucken schaltet er alles aus.
S2: Schalter 2 schaltet LED 2 und Relais 1, bei erneutem drücken die LED und das Relais wieder aus.
S3: Schalter für die LED Blitzer schaltet die LED 3 und gibt die funkion des Tasters 4 frei, 1. Modus LED leuchtet, steuert die LED Blitzer mit dem Modus 1 an. Bei erneutem Drucken LED 2, Modus LEDs und Blitzer ausschalten.
S4: Ist der Modus schalter mit im wird zwischen den 3 Blink Modusen umgeschaltet, kann Modus LED 1,2&3 steueren. Gibt die Verschiedenen Blink Modusen an die LED Blitzer weiter.

S4: Schaltet LED 4 und Relais 2 ein und beim erneuten drücken wieder aus.
S5: Schaltet LEd 5 (Fehler auf Schema ist mit 4. angschrieben) und Relais 3 ein und beim erneuten drücken wieder aus.

Hoffe Ihr könnt euch ein Bild machen von meine Projekt und mir möglicher weise weiter helfen. Ich bedanke mich schon mal bei allen die sich das hier nur schon anschauen

Als Bussystem kannst du I2C verwenden! USB geht so nicht!

Und warum überhaupt 2 Arduino ?
Wenn, dann geht auch eine serielle Verbindung.

Edit:
Du kannst deine Leds und Taster auch an Portexpander anschließen und die über I2C vom Uno steuern.
da brauchst du keine 2 Arduinos.

Vielen Dank für die hilfe das mit den Portexpander versuche ich mal muss mir erst aber mal einen Chip besorgen.

Joggu:
Vielen Dank für die hilfe das mit den Portexpander versuche ich mal muss mir erst aber mal einen Chip besorgen.

Ok, da gibt es 8Bit und 16Bit Expander.

PCF8574 (8Bit) und MCP23017 (16Bit). Für letztere gibt es auch eine Library.

du könntest auch je 2 Taster mit einem analog Input abfragen,habe die Schaltung mal angehängt.
ich habs nochmal geändert

Sehr gefährliche Schaltung
wenn der da 2 Tasten die am selben AI hängen gleichzeitig drückt baut er nen saftigen Kurzschluss.

Besser wäre es am Ende noch einmal einen 1k Wiederstand einzufügen.

Besser ist da die übliche "keypad an A0" Schaltung für 5-6 Taster mit unterschiedlichen Widerständen.

Dem TO geht es aber nicht nur um das Anschließen mehrerer Taster, sondern auch noch diverser Leds, und das nicht direkt am Arduino, sondern abgesetzt über eine bisher nicht definierte Leitungslänge.

Vielen Dank für die vielen ideen und so.

Ich habe mir mal einen MCP23017 besorgt und versuche gerade diesen anzuschliessen, das anschliessen eines Tasters, einer LED und einem Realais hat ohne Problem funktioniert auch das Programieren hat geklappt. Jetzt habe ich nur das Problem wenn ich den zweiten Taster Programmieren will funktioniert alles nicht mehr richtigt,

Ich habe mal das neue schema und den Aktuellen Skirpt angehängt.

Jetzt schon mal Danke für die Unterstützung.

#include <Adafruit_MCP23017.h>

Adafruit_MCP23017 mcp1; 

boolean Letzter, Aktuell, onoff;
boolean Letzter1, Aktuell1, onoff1;

void setup() {  
mcp1.begin(0);      

mcp1.pinMode(4, INPUT); 
mcp1.pullUp(4, HIGH);  

mcp1.pinMode(5, INPUT); 
mcp1.pullUp(5, HIGH); 


mcp1.pinMode(10, OUTPUT); 
mcp1.pinMode(9, OUTPUT); 

pinMode(14, OUTPUT);
pinMode(15, OUTPUT);

} // End Setup

void loop() {

Letzter = Aktuell;
if (mcp1.digitalRead(4) == LOW) Aktuell = true; else Aktuell = false;
  delay(10);
  if(!Letzter && Aktuell){
    if (onoff)
  mcp1.digitalWrite(10, HIGH), digitalWrite(14, LOW);

else

  mcp1.digitalWrite(10, LOW), digitalWrite(14, HIGH);
onoff = !onoff; 
}

Letzter1 = Aktuell1;
if (mcp1.digitalRead(5) == LOW) Aktuell = true; else Aktuell = false;
  delay(10);
  if(!Letzter1 && Aktuell1){
    if (onoff)
  mcp1.digitalWrite(9, HIGH), digitalWrite(15, LOW);

else

  mcp1.digitalWrite(9, LOW), digitalWrite(15, HIGH);
onoff1 = !onoff1; 
}

} // End loop

Setze deinen Sketch bitte in Code-Tags.
Dann können wir auch mobil den Sketch besser lesen.
Verwende dazu die Schaltfläche </> links oben im Editorfenster, das geht auch noch nachträglich.

Spendiere mal ein paar geschweifte Klammern!

if(bedingung)
  {
    // Anweisungen, wenn wahr
  } 
  else 
  {  
    // Anweisungen, wenn falsch
  }

Dank für die info mit dem Code-Tags.

@agmue
Kanst du mir Sagen was die geschweiften Klammern genau bewirken oder ist das nur eine Hilfe für den Programmierer.

Ich habe noch sehr wenig erfahrung mit dem Programmieren.

Joggu:
Dank für die info mit dem Code-Tags.

@agmue
Kanst du mir Sagen was die geschweiften Klammern genau bewirken oder ist das nur eine Hilfe für den Programmierer.

Ich habe noch sehr wenig erfahrung mit dem Programmieren.

Damit erkennt der Compiler Anfang und Ende der Code-Blocks und somit was zusammen gehört.
Das wird dann in einem Durchgang nach der If-Abfrage abgearbeitet.

Damit erkennt der Compiler Anfang und Ende der Code-Blocks

...und wir erkennen, dass du nur falsch einrückst, aber tatsächlich das meinst was du sagst.

    if (onoff)
  mcp1.digitalWrite(9, HIGH), digitalWrite(15, LOW);

Ein , statt eines ; nur weil beide Anweisungen in den if-Zweig gehören, sowas gehört in die Kategorie c-Puzzle statt klare Programmierung.
Glaub nicht, dass du für solche Tricks bewundert wirst. Setz lieber Klammern :wink:

  if(!Letzter1 && Aktuell1){
    if (onoff)

Müßte das nicht onoff1 sein?

Fluch des Kopierens :slight_smile:

Allen einen Dank die ich hier unterstützen.

Wegen den ; . Ich habe mir den Sketch von Kopiert. Weil ich wie schon gesagt keinerlei erfahrung habe mit Programieren und ich bis jetzt die Sketch zusammen gesucht habe und probiert habe sie auf meine wünsche anzupassen was nicht ganz erfolgreich verlaufen ist.

Ich meinte das Kopieren des Blocks ohne "1" zum Block mit "1", wo dann alle Variablen umbenannt werden müssen. Da vergißt man dann gerne mal eine, ganz normal :slight_smile:

Ich habe mein Projekt mal ein wenig weiter bearbeitet. jetz bin ich so weit das ich vom Steckbrett weg kommen möchte habe den Portecxpander usw. zusammen gelötet. Und mal mit ganz Kurzen steckbrett Kabel Verbunden funktioniert einwand frei. Dann schloss ich mein Langes Kabel (ca.4m) an. Und es funktioniert nicht mehr. Wenn Ich die Daten Leitungen über zwei einzelne Kufer Kabel ziehe dan funktioniert es.könnte es an der Bauart des Kabels liegen oder am Querschnitt?

Joggu:
Ich habe mein Projekt mal ein wenig weiter bearbeitet. jetz bin ich so weit das ich vom Steckbrett weg kommen möchte habe den Portecxpander usw. zusammen gelötet. Und mal mit ganz Kurzen steckbrett Kabel Verbunden funktioniert einwand frei. Dann schloss ich mein Langes Kabel (ca.4m) an. Und es funktioniert nicht mehr. Wenn Ich die Daten Leitungen über zwei einzelne Kufer Kabel ziehe dan funktioniert es.könnte es an der Bauart des Kabels liegen oder am Querschnitt?

Welche Portexpander und wie hast du die angeschlossen ?
Und wenn du die 4m. auf dem I2C-Bus meinst, ist das schon zu lang.