Advertisement
RuiViana

DMX_LS

Jul 24th, 2017
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.79 KB | None | 0 0
  1.                        // Instância a biblioteca SoftwareSerial.h
  2.  
  3. //    #include <LiquidCrystal_I2C.h>
  4. //    LiquidCrystal_I2C lcd(0x38,  2, 1, 0, 7, 6, 5, 4, 3, POSITIVE);       // Set the LCD I2C address
  5. #include <DMXSerial.h>              //https://github.com/mathertel/DMXSerial
  6. unsigned long lastPacket = 5000;
  7.  
  8. #define Dir  7              // Port para o Dir Motor (DIR+)
  9. #define Step  8             // Port para o Dir Step (STEP+)
  10. #define EnaMotorA  9        // Port para o Enable Motor (ENA+)
  11. int StepsCount = 0;         // Variavel para guardar o CH de deslocamento do step motor
  12. int Passos = 0;             // Variavel para calculo de deslocamento do step motor
  13. int PassosOld = -765;       // Variavel valor slavo deslocamento do step motor
  14. int Diferenca = 0;          // Variavel para calculo da diferenca entre deslocamento do step motor
  15. int Tempo = 0;              // Variavel para guardar o CH de velocidade do step motor
  16. int Velocidade = 0;         // Variavel para calculo da velocidade do step motor
  17. //-------------------------
  18. void setup ()
  19. {
  20. //    lcd.begin(20, 2);                                   // Inicialisa o LCD 20 x 4
  21.   DMXSerial.init(DMXReceiver);                        // Inicialisa o DMX
  22.   pinMode(EnaMotorA,   OUTPUT);                       // Define port EnaMotorA como saida
  23.   pinMode(Dir,   OUTPUT);                             // Define port Dir como saida
  24.   pinMode(Step,   OUTPUT);                            // Define port Step como saida
  25.   //  lcd.setCursor(1, 0);                                // Posição 0 linha 1
  26.   //  lcd.print("DMX ");                                  // Imprime DMX
  27.   digitalWrite(EnaMotorA, HIGH);                      // Desabilita movimentar motor
  28.     pinMode(13,   OUTPUT);
  29. }
  30. //--------------------------
  31. void loop()
  32. {
  33.   lastPacket = DMXSerial.noDataSince();               // Calcula tempo sem dados no Bus
  34.   if (lastPacket < 5000)                              // Faca se for menor que 5 Segundos
  35.   {
  36.     StepsCount =   DMXSerial.read(1);                 // Le valor do CH1 do DMX values e salva em StepscCount
  37.     Passos = map(StepsCount, 0, 255, -765 , 765);     // Com valores de StepCount calcula a posicao do stepmotor
  38.     Tempo =  DMXSerial.read(2);                       // Le valor do CH2 do DMX values e salva em Tempo
  39.     Velocidade = map(Tempo, 0, 255, 800 , 30);        // Com valores de StepCount calcula a velocidade do stepmotor
  40.     Diferenca = Passos - PassosOld;                   // Calcula diferenca entre valor atual e anterior
  41.     PassosOld  = Passos;                              // Salva valor atual em valor anterior
  42.     if (Diferenca < 0)                                // Se difrenca for negativa
  43.     {
  44.       digitalWrite(Dir, HIGH);                        // Define sentido de rotacao
  45.       Diferenca = Diferenca * -1;                     // Transforma em positiva
  46.     }
  47.     else                                              // Se for positiva
  48.     {
  49.       digitalWrite(Dir, LOW);                         // Define sentido de rotacao
  50.     }
  51.       if(StepsCount > 128)
  52.       {
  53.         digitalWrite(13, HIGH);
  54.       }
  55.       else digitalWrite(13, LOW);
  56.    
  57. //      DMX.println(Tempo);                             // Envia pela softserial
  58. /*
  59.    
  60.        lcd.setCursor(0, 1);                              // Posição 0 linha 1
  61.        lcd.print("                          ");          // Limpa LCD
  62.        lcd.setCursor(0, 1);                              // Posição 0 linha 1
  63.        lcd.print(StepsCount);                            // Imprime valor de Passos
  64.        lcd.print(" ");                                   // Imprime espaco
  65.        lcd.print(Passos);                                // Imprime valor de PassosOld
  66.        lcd.print(" ");                                   // Imprime espaco
  67.        lcd.print(PassosOld);                             // Imprime valor de Velocidade
  68.        lcd.print("  ");                                  // Imprime espaco
  69.        lcd.print(Diferenca);                             // Imprime valor de Diferenca
  70.  */  
  71.     if (Diferenca > 0)                                // Se tem que fazer movimento
  72.     {
  73.       digitalWrite(EnaMotorA, LOW);                   // Habilita movimentar motor
  74.     }
  75.     for (int i = 0; i < Diferenca; i++)               // Numero de steps igual ao valor Diferenca
  76.     {
  77.       digitalWrite(Step, HIGH);                       // Pulso em HIGH
  78.       delayMicroseconds(20);                          // Tempo de pulso em HIGH 20 uSeg
  79.       digitalWrite(Step, LOW);                        // Pulso em LOW
  80.       delayMicroseconds(Velocidade);                  // Tempo de pulso em LOW igual valor Velocidade
  81.     }
  82.     delay(200);                                       // Delay 50 mSeg
  83.     digitalWrite(EnaMotorA, HIGH);                    // Desabilita movimentar motor
  84.   }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement