Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Instância a biblioteca SoftwareSerial.h
- // #include <LiquidCrystal_I2C.h>
- // LiquidCrystal_I2C lcd(0x38, 2, 1, 0, 7, 6, 5, 4, 3, POSITIVE); // Set the LCD I2C address
- #include <DMXSerial.h> //https://github.com/mathertel/DMXSerial
- unsigned long lastPacket = 5000;
- #define Dir 7 // Port para o Dir Motor (DIR+)
- #define Step 8 // Port para o Dir Step (STEP+)
- #define EnaMotorA 9 // Port para o Enable Motor (ENA+)
- int StepsCount = 0; // Variavel para guardar o CH de deslocamento do step motor
- int Passos = 0; // Variavel para calculo de deslocamento do step motor
- int PassosOld = -765; // Variavel valor slavo deslocamento do step motor
- int Diferenca = 0; // Variavel para calculo da diferenca entre deslocamento do step motor
- int Tempo = 0; // Variavel para guardar o CH de velocidade do step motor
- int Velocidade = 0; // Variavel para calculo da velocidade do step motor
- //-------------------------
- void setup ()
- {
- // lcd.begin(20, 2); // Inicialisa o LCD 20 x 4
- DMXSerial.init(DMXReceiver); // Inicialisa o DMX
- pinMode(EnaMotorA, OUTPUT); // Define port EnaMotorA como saida
- pinMode(Dir, OUTPUT); // Define port Dir como saida
- pinMode(Step, OUTPUT); // Define port Step como saida
- // lcd.setCursor(1, 0); // Posição 0 linha 1
- // lcd.print("DMX "); // Imprime DMX
- digitalWrite(EnaMotorA, HIGH); // Desabilita movimentar motor
- pinMode(13, OUTPUT);
- }
- //--------------------------
- void loop()
- {
- lastPacket = DMXSerial.noDataSince(); // Calcula tempo sem dados no Bus
- if (lastPacket < 5000) // Faca se for menor que 5 Segundos
- {
- StepsCount = DMXSerial.read(1); // Le valor do CH1 do DMX values e salva em StepscCount
- Passos = map(StepsCount, 0, 255, -765 , 765); // Com valores de StepCount calcula a posicao do stepmotor
- Tempo = DMXSerial.read(2); // Le valor do CH2 do DMX values e salva em Tempo
- Velocidade = map(Tempo, 0, 255, 800 , 30); // Com valores de StepCount calcula a velocidade do stepmotor
- Diferenca = Passos - PassosOld; // Calcula diferenca entre valor atual e anterior
- PassosOld = Passos; // Salva valor atual em valor anterior
- if (Diferenca < 0) // Se difrenca for negativa
- {
- digitalWrite(Dir, HIGH); // Define sentido de rotacao
- Diferenca = Diferenca * -1; // Transforma em positiva
- }
- else // Se for positiva
- {
- digitalWrite(Dir, LOW); // Define sentido de rotacao
- }
- if(StepsCount > 128)
- {
- digitalWrite(13, HIGH);
- }
- else digitalWrite(13, LOW);
- // DMX.println(Tempo); // Envia pela softserial
- /*
- lcd.setCursor(0, 1); // Posição 0 linha 1
- lcd.print(" "); // Limpa LCD
- lcd.setCursor(0, 1); // Posição 0 linha 1
- lcd.print(StepsCount); // Imprime valor de Passos
- lcd.print(" "); // Imprime espaco
- lcd.print(Passos); // Imprime valor de PassosOld
- lcd.print(" "); // Imprime espaco
- lcd.print(PassosOld); // Imprime valor de Velocidade
- lcd.print(" "); // Imprime espaco
- lcd.print(Diferenca); // Imprime valor de Diferenca
- */
- if (Diferenca > 0) // Se tem que fazer movimento
- {
- digitalWrite(EnaMotorA, LOW); // Habilita movimentar motor
- }
- for (int i = 0; i < Diferenca; i++) // Numero de steps igual ao valor Diferenca
- {
- digitalWrite(Step, HIGH); // Pulso em HIGH
- delayMicroseconds(20); // Tempo de pulso em HIGH 20 uSeg
- digitalWrite(Step, LOW); // Pulso em LOW
- delayMicroseconds(Velocidade); // Tempo de pulso em LOW igual valor Velocidade
- }
- delay(200); // Delay 50 mSeg
- digitalWrite(EnaMotorA, HIGH); // Desabilita movimentar motor
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement