ich habe eine CNC-Graviermaschine in Gebrauch. Jetzt möchte ich einen weiteren Schritt gehen und einen zusätzlichen Arduino zuschalten.
Die CNC-Graviermaschine soll z.B. nach Ablauf des Programmcodes ein Signal an den Zusatz-Arduino senden und dort einen weiteren Prozess in Gang setzen.
Hat das schon einmal jemand gemacht? Wie kann ich die Kommunikation zwischen CNC-Arduino und Arduino herstellen und die Daten der Graviermaschine weiter verwenden?
Kann ich die Schnittstellen TX/RX des CNC-Shields benutzen um die gewünschten Daten zu bekommen und diese einfach mit dem anderen Arduino über Kreuz verbinden?
Baril:
Kann ich die Schnittstellen TX/RX des CNC-Shields benutzen um die gewünschten Daten zu bekommen und diese einfach mit dem anderen Arduino über Kreuz verbinden?
das geht nur solange du nichts weiter an RX und TX angeschlossen hast und der Arduino nicht programmiert wird.
Sobald irgend etwas über die serielle läuft, geht das nicht.
Das kann man nur im Code bzw. an der Hardware erkennen.
Im Moment übertrage ich den G-Code vom PC per USB an den CNC-Arduino. Somit sind die RX/TX vom CNC-Shield frei. Wenn ich jetzt dort den anderen Arduino anschließe müsste ich doch auf die Daten der CNC zugreifen können.
Ich möchte eine Verbindung herstellen mit der ich bei zum Beispiel dem Endbefehl M5 Spindel aus ein Signal bekomme und ein weiteres Programm auf dem anderen Arduino somit startet.
Baril:
Im Moment übertrage ich den G-Code vom PC per USB an den CNC-Arduino. Somit sind die RX/TX vom CNC-Shield frei. Wenn ich jetzt dort den anderen Arduino anschließe müsste ich doch auf die Daten der CNC zugreifen können.
Beim Übertragen per USB werden auch RX und TX verwendet. Dazu befindet sich ein USB-Serialwandler auf dem Uno.
Ich möchte eine Verbindung herstellen mit der ich bei zum Beispiel dem Endbefehl M5 Spindel aus ein Signal bekomme und ein weiteres Programm auf dem anderen Arduino somit startet.
Welche Daten kann ich dort lesen?
Das kann ich nicht sagen, dazu benötigt man den Sketch, der auf dem Arduino drauf ist.
Das muss sicher darin programmiert werden.
Hmmm ok gut. Irgend eine andere Idee um das Problem zu lösen?
Ich könnte auch über die Positionsdaten das Signal auslösen d.h. wenn die CNC z.B. wieder in die Ausgangsstellung fährt und auf Null Position ist. Aber wie bekomme ich die Positionsdaten auf den anderen Arduino übertragen?
Baril:
Hmmm ok gut. Irgend eine andere Idee um das Problem zu lösen?
Ich könnte auch über die Positionsdaten das Signal auslösen d.h. wenn die CNC z.B. wieder in die Ausgangsstellung fährt und auf Null Position ist. Aber wie bekomme ich die Positionsdaten auf den anderen Arduino übertragen?
Wie muss die Schaltung dazu aufgebaut werden?
Wenn du von Daten sprichst, meinst du sicher wieder Informationen aus dem CNC-Controller zum Arduino.
Das geht nur über die schon beschriebene Schnittstelle und angepasster Software.
Eine Möglichkeit ist die Endposition per "Schalter" dem Arduino mitzuteilen.
Ob das so reicht und möglich ist, musst du entscheiden.
Ich will das Signal vom Pin A3 enable coolant auswerten. Nachdem dort immer ein AN/Aus Signal gegeben wird.
Das müsste doch gehen wenn ich A3 auslese mit dem anderen Arduino d.h. Verbindung A3 mit Eingangspin neuer Arduino und GND sowie 5V. Danach sollte der Zusatzarduino folgendes Abfragen...
int inPin = 3; // Input pin für Arduino
int reading; // Wert des Eingangs
int previous = LOW; // Vorheiger Wert des Eingangs
// folgende Variablen müssen vom Typo unsigned long sein da millis() disen Variablentyp liefert.
unsigned long time = 0; // letzter Zeitwert bei dem der Ausgangzustand wechselte.
unsigned long debounce = 200; // Entprellzeit
void setup()
{
pinMode(inPin, INPUT);
pinMode(outPin, OUTPUT);
}
void loop()
{
reading = digitalRead(inPin);
// Beim Wechsel des Eingangs von LOW zu HIGH und nach der Entprellzeit:
if (reading == HIGH && previous == LOW && millis() - time > debounce) {
time = millis();
Tue irgendwas
}
// Beim Wechsel des Eingangs von HIGH zu LOW und nach der Entprellzeit:
if (reading == LOW && previous == HIGH && millis() - time > debounce) {
time = millis();
Tue irgendwas anderes
}
previous = reading;
}
Bin ich da richtig unterwegs oder würdet ihr das anders machen?