Per farla breve....vorrei simulare un operazione di apertura e chiusura , attraverso una macro usata dal software UCCNC per una cnc .
Per fare questa operazione sostituirò la scheda di controllo della cnc con arduino UNO il quale deve inviare un segnale, l'invio di questo segnale sarà poi ricevuto da un microcontrollore con montato un attiny85 con il suo programma, il quale dividerà in step e dir questo inpulso.Tali segnali saranno poi ricevuti da un tb6600 controller a cui sono collegati due motorini.
Potreste gentilmente darmi due righe di codice da mettere su arduino ....sono ancora alle prime armi e cerco di capire...forse anche troppo e subito....se sono sulla strada giusta e se ho capito qualcosa.
Grazie per chi volesse aiutarmi.
#include <Arduino.h>
// Constants defined for clarity
#define DIRECTION_PIN 0
#define STEP_PIN 1
#define ACTION_PIN 2
#define SIGNAL_CLOSE 1
#define SIGNAL_OPEN 0
#define DIRECTION_CLOSE 1
#define DIRECTION_OPEN 0
#define INCREMENT_CLOSE -1
#define INCREMENT_OPEN 1
#define CLOSED_STATE 0
#define OPEN_STATE 1
#define CLOSING_STATE 2
#define OPENING_STATE 3
#define CLOSED_STEPS 0
#define OPEN_STEPS 1600
#define STEP_DELAY 150
// variables to manage state - initialized in a closed state
int stepCounter = CLOSED_STEPS;
int coverState = CLOSED_STATE;
int stepIncrement = INCREMENT_CLOSE;
void setup() {
// Define pins
pinMode(ACTION_PIN, INPUT_PULLUP);
pinMode(DIRECTION_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
// Initialize step and direction pins
digitalWrite(DIRECTION_PIN, DIRECTION_CLOSE);
digitalWrite(STEP_PIN, LOW);
}
void loop() {
// Check if we've received a new signal
// If we have a new close signal
if (digitalRead(ACTION_PIN) == SIGNAL_CLOSE && (coverState == OPEN_STATE || coverState == OPENING_STATE)) {
// Set closing state
coverState = CLOSING_STATE;
stepIncrement = INCREMENT_CLOSE;
digitalWrite(DIRECTION_PIN, DIRECTION_CLOSE);
// Or if have a new open signal
} else if (digitalRead(ACTION_PIN) == SIGNAL_OPEN && (coverState == CLOSED_STATE || coverState == CLOSING_STATE)) {
// Set opening state
coverState = OPENING_STATE;
stepIncrement = INCREMENT_OPEN;
digitalWrite(DIRECTION_PIN, DIRECTION_OPEN);
}
// Handle movement if necessary
// If we are in the process of opening or closing, let's step
if (coverState == OPENING_STATE || coverState == CLOSING_STATE) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(STEP_DELAY);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(STEP_DELAY);
// And record where we are
stepCounter = stepCounter + stepIncrement;
}
// If we are fully closed or fully open, set the appropriate state
if (stepCounter == CLOSED_STEPS) {
coverState = CLOSED_STATE;
} else if (stepCounter == OPEN_STEPS) {
coverState = OPEN_STATE;
}
}
Ma il REGOLAMENTO lo vogliamo leggere !!! ![]()
Fosse anche per una sola riga, come richiesto al punto 7 del REGOLAMENTO, il codice va racchiuso tra i tag CODE, per cui, edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita
che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona <code/> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE).
Guglielmo
*P.S.: Ti ricordo che, purtroppo, fino a quando non sarà sistemato il codice come indicato, nel rispetto del regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farlo al più presto.
fatto....spero