Pesquisar neste blog

16/11/2021

Pisca led PWM #3 com PIC 16F877A

Código feito em CCS C Compiler

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device ADC=8                           // Set ADC resolution to 8-bit
#use delay(clock=8000000)
 
unsigned int8 i, j;
void main(){
  setup_adc(ADC_CLOCK_DIV_32);           // Set ADC conversion time to 32Tosc
  setup_adc_ports(AN0_AN1_AN3);          // Configure AN0,AN1 and AN3 as analog
  setup_ccp1(CCP_PWM);                   // Configure CCP1 as a PWM
  setup_ccp2(CCP_PWM);                   // Configure CCP2 as a PWM
  delay_ms(100);                         // Wait 100ms
  setup_timer_2(T2_DIV_BY_16, 255, 1);   // Set PWM frequency to 488Hz
  while(TRUE){
  
    set_adc_channel(0);                  // Select channel AN0
    delay_ms(1);                         // Wait 1ms
    i = read_adc();                      // Read from AN0 and store in i
    delay_ms(1);                         // Wait 1ms
    set_adc_channel(1);                  // Select channel AN1
    delay_ms(1);                         // Wait 1ms
    j = read_adc();                      // Read from AN1 and store in j
    set_pwm1_duty(i);
    set_pwm2_duty(j);
    delay_ms(1);                         // Wait 1ms
   }
}


Simulador Proteus versão 7.7

13/11/2021

Motor de passo #2 com PIC 16F877A

Simulador Proteus versão 7.7



















Código feito em CCS C Compiler

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP                       
#use delay(clock = 20MHz)
#use fast_io(B)  // habilita todas as portas B
#use fast_io(D)  // habilita todas as porras D
 
unsigned int8 speed_;
void main(){
   
  output_b(0);
  set_tris_b(0x03);
  port_b_pullups(TRUE);
  output_d(0);
  set_tris_d(0);
  setup_adc(ADC_CLOCK_DIV_32);      // Set ADC conversion time to 32Tosc
  setup_adc_ports(AN0);             // Configura AN0 em analógica  
  set_adc_channel(0);               // Select channel 0 input
  delay_ms(100);                    // Wait 100ms
  
  while(TRUE){
      output_d(0);
      
      while( ! input(PIN_B0)){
         speed_ = read_adc();
         
         if(speed_ < 2)
            speed_ = 2;
         output_d(0b00000011);
         delay_ms(speed_);
         output_d(0b00000110);
         delay_ms(speed_);
         output_d(0b00001100);
         delay_ms(speed_);
         output_d(0b00001001);
         delay_ms(speed_);
      }
      while( ! input(PIN_B1)){
         speed_ = read_adc();
         if(speed_ < 2)
            speed_ = 2;
         output_d(0b00001001);
         delay_ms(speed_);
         output_d(0b00001100);
         delay_ms(speed_);
         output_d(0b00000110);
         delay_ms(speed_);
         output_d(0b00000011);
         delay_ms(speed_);
      }
   }
}

Saída gerada






















Palavras chave:

Stepper motor with PIC 16F877A
Motor paso a paso con PIC 16F877A
Stappenmotor met PIC 16F877A
PIC 16F877A ସହିତ ଷ୍ଟେପର୍ ମୋଟର |
ʻO ka mīkini stepper me PIC 16F877A
מנוע צעד עם PIC 16F877A
Stepper motor na may PIC 16F877A
PIC16F877Aを搭載したステッピングモーター
Stegmotor med PIC 16F877A

11/11/2021

Verifica 2 vetores em C

Objetivo: Verificar se 2 são exatamente iguais em suas devidas posições.

Código feito em linguagem C

#include <stdio.h>
#define SIZE 3

int vetor[SIZE];

int vet[SIZE] = {2, 2, 9};
int var[SIZE] = {2, 9, 2};
int acertos = 0;

void verifica(int valor, int posicao){
    if(valor == vet[posicao]){
        printf("%d = %d\n",valor, vet[posicao]);
        acertos++;
    }else{
        printf("[%d] != [%d] Não é igual !\n",valor, vet[posicao]);
    }
}

int main(){
    
    for(int i = 0; i < SIZE; i++){
        verifica(var[i], i);
    }
    printf("Acertos = %d\n",acertos);
    return 0;
}

Saída gerada no www.https://www.onlinegdb.com/



10/11/2021

Fatorial #2 com MIPS Assembly

.data
prompt: .asciiz "Entre com num: "
factMsg: .asciiz "Fatorial = "
num: .word 0
.text

la $a0, prompt
li $v0, 4
syscall
li $v0, 5
syscall
sw $v0, num
move $a0, $v0
la $a0, factMsg
li $v0, 4
syscall
lw $a0, num
jal fact
move $a0, $v0
li $v0, 1
syscall
li $v0, 10
syscall

fact:
li $t0, 1
move $t1 $a0, 
loop:
beq $t1, $zero, exit
mul $t0, $t0, $t1
addi $t1, $t1, -1
j loop

exit:
move $v0, $t0
jr $ra

Simulador MARS 4.0


02/11/2021

Fatorial #1 com MIPS Assembly

.data
promptMessage: .asciiz "Entre com o número do fatorial: "
resultMessage: .asciiz "\nFatorial = "
theNumber: .word 0
theAnswer: .word 0
.text
.globl main
main:
#leia o número do usuário
li $v0, 4
la $a0, promptMessage
syscall
li $v0, 5
syscall
sw $v0, theNumber
#Chama a função fatorial
lw $a0, theNumber
jal findFactorial
sw $v0, theAnswer
#Exibi os resultados
li $v0, 4
la $a0, resultMessage
syscall
li $v0, 1
lw $a0, theAnswer
syscall
#Informa ao sistema que este é o fim do programa
li $v0, 10
syscall
#--------------------
# função findFactorial
.globl findFactorial
findFactorial:
subu $sp, $sp, 8
sw $ra, ($sp)
sw $s0, 4($sp)
#Base caso
li $v0, 1
beq $a0, 0, factorialDone
#findFactorial (o número -1)
move $s0, $a0
sub $a0, $a0, 1
jal findFactorial
#A mágia acontece aqui
mul $v0, $s0, $v0
factorialDone:
lw $ra, ($sp)
lw $s0, 4($sp)
addu $sp, $sp, 8
jr $ra

Saída gerada no MARS 4.5
























Palavras chave:

Factorial with MIPS Assembly
Factorial con ensamblaje MIPS
Faktoriell med MIPS-montering
פקטוריאלי עם MIPS Assembly
Silnia z zespołem MIPS
MIPS সমাবেশের সাথে ফ্যাক্টরিয়াল
Faktorial dengan Majelis MIPS
Факториал с MIPS монтаж
Factorial cu Asamblare MIPS

17/10/2021

Soma, subtração, divisão e multiplicação com MIPS Assembly

.data
#soma
num1: .asciiz "Digite o primeiro numero: "
num2: .asciiz "Digite o segundo numero: "
Resultado: .asciiz "Soma = "

#subtração
n1: .asciiz "\n\nDigite o 1° num: "
n2: .asciiz "Digite o 2° num: "
result: .asciiz "Subração = "

#divisão
x1: .asciiz "\n\nDigite o 1° número: "
x2: .asciiz "Digite o 2° número: "
Rdiv: .asciiz "Divisão = "

#multiplicação
k1: .asciiz "\n\nDigite o 1° número: "
k2: .asciiz "Digite o 2° número: "
Mult: .asciiz "Multiplicação = "
.text
li $v0, 4
la $a0, num1
syscall

li $v0, 5
syscall
move $t0, $v0

li $v0, 4
la $a0, num2
syscall

li $v0, 5
syscall
move $t1, $v0

#tendo os dois valores 
add $t2, $t0, $t1
li $v0, 4
la $a0, Resultado
syscall

li $v0, 1
move $a0, $t2
syscall

#subtração
li $v0, 4
la $a0, n1
syscall

li $v0, 5
syscall

move $t0, $v0 #move para o registrador

li $v0, 4
la $a0, n2
syscall

li $v0, 5
syscall

move $t1, $v0

sub $t2, $t0, $t1

li $v0, 4
la $a0, result
syscall

li $v0, 1
move $a0, $t2
syscall

#bloco da divisão
li $v0, 4
la $a0, x1
syscall

li $v0, 5
syscall

move $t0, $v0

li $v0, 4
la $a0, x2
syscall

li $v0, 5
syscall

move $t1, $v0
div $t0, $t1

mflo $s3 #pega o valor menor
li $v0, 4
la $a0, Rdiv
syscall

li $v0, 1
move $a0, $s3
syscall

#multiplicação
li $v0, 4
la $a0, k1
syscall

li $v0, 5
syscall

move $t0, $v0

li $v0, 4
la $a0, k2
syscall

li $v0, 5
syscall

move $t1, $v0

mult $t0, $t1

mflo $s3

li $v0, 4
la $a0, Mult
syscall

li $v0, 1
move $a0, $s3
syscall

Saída gerada




Loop de repetição com Mips MARS - Assembly

CÓDIGO FEITO NO MARS4

.data
pergunta: .asciiz "Digite a sua idade: "
msg1: .asciiz "Você é menor de idade\n"
msg2: .asciiz "Você é maior de idade\n"
.text
.globl prog #aponta para o programa principal

prog: # função principal
li $v0, 4 # imprimir uma string
la $a0, pergunta # a0 = pergunta
syscall # Executar
li $v0, 5 # Faz a leitura de um número inteiro
syscall # Executa
move $t1, $v0 # t1 = v0
beq $t1, $0, sair # Desvia para o bloco sair
blt $t1, 18, menor # Desvia para o bloco menor
bge $t1, 18, maior # Devia para o bloco maior
j prog # DESVIA PARA O BLOCO PROG

menor: 
li $v0, 4 # Imprimi uma string
la $a0, msg1 # a0 = msg1
syscall
j prog #DESVIA PARA O jprog

maior:
li $v0, 4 # IMPRIMI UMA STRING
la $a0, msg2 # a0 = msg2
syscall
j prog # DESVIA PARA O BLOCO PROG

sair:
li $v0, 10 # FINALIZAR
syscall # EXECUTAR

Saída gerada



15/10/2021

Motor de passo no PicSimlab

CÓDIGO FEITO NO CCS C Compiler

#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000)
unsigned int8 posicao[4] = {3, 6, 12, 9}; // {1, 2, 4, 8};
 //3=0011 6=0110 12=1100 9=1001
signed int8 passo=0;
int1 dar_passo=0;
signed int8 sentido=-1;
unsigned int8 ref_passo=10,contador=0;
unsigned int16 ref_mcc=127;
//================== MOTOR PASSO =================================//
#int_RTCC

void RTCC_isr(void)
{
 if(++contador > ref_passo){
 passo = passo + sentido;
 if(passo>3)passo=0;
 if(passo<0)passo=3;
 OUTPUT_D(posicao[passo]);
 contador = 0;
 }
}
#int_TIMER1
void TIMER1_isr(void)
{
 //== Motor CC ======//
 set_adc_channel(0);
 delay_us( 50 );
 ref_mcc = read_adc();
 if(ref_mcc<1) ref_mcc =1;
 if(ref_mcc>254) ref_mcc =254;
 set_pwm1_duty(4*ref_mcc);

 //== Motor Passo ======//
 set_adc_channel(1);
 delay_us( 50 );
 ref_passo = read_adc();
 if(ref_passo<1) ref_passo =1;
 
 if(ref_passo>254) ref_passo =254;
}
//================== Interrupção externa B0 =====================//
#int_EXT
void EXT_isr(void)
{
sentido *= (-1);
}
//================== SERVOMOTOR =================================//
void Rotation0() //0 Degree
 {
 unsigned int i;
 for(i=0;i<50;i++)
 {
 output_high(PIN_C7);
 delay_us(800); // pulse of 800us
 output_low(PIN_C7);
 delay_us(19200);
 }
 }
void Rotation45() //0 Degree
{
 unsigned int i;
 for(i=0;i<50;i++)
 {
 output_high(PIN_C7);
 delay_us(1150); // pulse of 800us // 1400 - 180o
 output_low(PIN_C7); // x 45o
 delay_us(18850);
 }
 }
void Rotation90() //90 Degree
 {
 unsigned int i;
 for(i=0;i<50;i++)
 { // 180o 0o
 output_high(PIN_C7); // 2200 - 800 = 1400 90o = 700
 delay_us(1500); // pulse of 1500us
 output_low(PIN_C7);
 delay_us(18500);
 }
 }
void Rotation180() //180 Degree
 {
unsigned int i;
 for(i=0;i<50;i++)
 {
 output_high(PIN_C7);
 delay_us(2200); // pulse of 2200us
 output_low(PIN_C7);
 delay_us(17800);
 }
 }
 
 void main()
{
 setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
 setup_adc(ADC_CLOCK_DIV_16);

 setup_psp(PSP_DISABLED);
 setup_spi(SPI_SS_DISABLED);
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
 setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
 setup_timer_2(T2_DIV_BY_16,255,1);
 setup_ccp1(CCP_PWM);
 set_pwm1_duty(512);

 setup_comparator(NC_NC_NC_NC);
 setup_vref(FALSE);
 enable_interrupts(INT_EXT);
 ext_int_edge( L_TO_H );

 enable_interrupts(INT_RTCC);
 enable_interrupts(INT_TIMER1);
 enable_interrupts(GLOBAL);
 set_adc_channel(1);
 delay_us( 50 );


 while(true){
 Rotation0(); // 0 graus
 delay_ms(4000);
 Rotation90(); // 90 graus
 delay_ms(4000);
 Rotation180(); // 180 graus
 delay_ms(4000);
 Rotation45(); // 45 graus
 delay_ms(6000);
 }
}



















22/09/2021

PWM #02 com PIC 16F628A

 Código feito no CCS C Compiler

#include <16F628A.h>
#FUSES NOWDT
#FUSES NOBROWNOUT
#FUSES NOLVP

#use delay(crystal = 4MHz)
int16 ton, toff;
unsigned int cont = 0;

void main(){
   while(true){
      if(++ton >= 1000) ton = 0;
      toff = 1000 - ton;
      
      for(cont =1; cont <= 10; cont++){//vai repetir 10 vezes o valor
         output_high(PIN_A0);
         delay_us(ton);
         toff = 1000 - ton;
         output_low(pin_A0);
         delay_us(toff);
      }

   }
}


Emulador: PIC SimLab










20/09/2021

PWM #01 com PIC 16F628A no PIC SimLab

Código feito no CCS C Compiler

#include <16F628A.h>
#FUSES NOWDT
#FUSES NOBROWNOUT
#FUSES NOLVP

#use delay(crystal = 4MHz)

int16 ton, toff;
unsigned int cont = 0;
signed int cd = 1;

void main(){
   while(true){
   
      ton = ton + cd;
      
      if(ton >= 1000) cd = -1;
      if(ton <= 0) cd = 1;
      
      toff = 1000 - ton;
      
      for(cont =1; cont <= 10; cont++){//vai repetir 10 vezes o valor
         output_high(PIN_A0);
         delay_us(ton);
         toff = 1000 - ton;
         output_low(pin_A0);
         delay_us(toff);
      }
      
      
      
   }
}












08/07/2021

Plugin #02 com jQuery em HTML

TEMPORIZADOR EM HTML USANDO jQuery

Arquivo: estilo.css
@font-face {
    font-family'Oswald';
    srcurl('../fonts/Oswald-Regular.ttf'format('truetype');
}

*{
    font-family'Oswald'sans-serif;
}

html {
    height100%;
}

body {
    margin0;
    background-color#0D262D;
    color#fff;
    height100%;
}

table {
    border-collapsecollapse;
}

tr {
    border-bottomsolid 1px white;
}

td {
    font-size1.6em;
    padding10px;
}

li {
    font-size1.6em;
}

.conteudo {
    displayflex;
    flex-directioncolumn;
    align-itemscenter;
    min-height100%;
}

.exercicio div {
    font-size1.8em;
    bordersolid 5px #fff;
    padding0px 40px;
    margin10px;
}

.exercicio div:nth-of-type(1) {
    background-colordarkgoldenrod;
}

.exercicio div:nth-of-type(2) {
    background-colorcrimson;
}

.exercicio div:nth-of-type(3) {
    background-colordarkcyan;
}

.exercicio div:nth-of-type(4) {
    background-colordarkorchid;
}

.exercicio div:nth-of-type(5) {
    background-colordodgerblue;
}

.exercicio div:nth-of-type(6) {
    background-colorsalmon;
}

.exercicio .destaque {
    bordersolid 10px greenyellow;
    colorgreenyellow;
    font-weightbold;
}

Arquivo: temporizador.js
(function ($) {
    $.fn.temporizador = function (opcoes) {
        const opcoesFinais = $.extend({
            mensagem: 'Em breve!',
            horario: '23:59:59'
        }, opcoes)

        const horaDezena = $('<span class="digito">').html('0')
        const horaUnidade = $('<span class="digito">').html('0')
        const minutoDezena = $('<span class="digito">').html('0')
        const minutoUnidade = $('<span class="digito">').html('0')
        const segundoDezena = $('<span class="digito">').html('0')
        const segundoUnidade = $('<span class="digito">').html('0')

        const separadorHora = $('<span class="separador">').html(':')
        const separadorMinuto = $('<span class="separador">').html(':')
        const mensagem = $('<div class="mensagem">').html(opcoesFinais.mensagem)

        $(this).addClass('temporizador')
        $(this).append(horaDezenahoraUnidadeseparadorHora,
            minutoDezenaminutoUnidadeseparadorMinuto,
            segundoDezenasegundoUnidademensagem)

        const regex = new RegExp(/(\d\d):(\d\d):(\d\d)/)
        const horarioAlvo = regex.exec(opcoesFinais.horario)
        // console.log(horarioAlvo)

        let temporizador = setInterval(() => {
            const agora = new Date()
            const alvo = new Date()
            alvo.setHours(horarioAlvo[1])
            alvo.setMinutes(horarioAlvo[2])
            alvo.setSeconds(horarioAlvo[3])

            const diferencaEmMili = alvo.getTime() - agora.getTime()
            if (diferencaEmMili >= 0) {
                const diferenca = regex.exec(new Date(diferencaEmMili).toISOString())
                console.log(diferenca)

                horaDezena.html(diferenca[1][0])
                horaUnidade.html(diferenca[1][1])
                minutoDezena.html(diferenca[2][0])
                minutoUnidade.html(diferenca[2][1])
                segundoDezena.html(diferenca[3][0])
                segundoUnidade.html(diferenca[3][1])
            } else {
                clearInterval(temporizador)
            }
        }, 1000)
        
        return this
    }
})(jQuery)

Arquivo: plugin2.html
<!DOCTYPE html>
<html>

<head>
    <meta charset='UTF-8'>
    <title>Plugin #02</title>
    <link rel='stylesheet' href='css/temporizador.css'>
    <script src='js/jquery.js'></script>
</head>

<body>
    <h1>Plugin #02 - Temporizador</h1>
    <div></div>
    <script src="js/temporizador.js"></script>
    <script>
        // ...
        $('div').temporizador({
            mensagem: 'Em breve um novo site para você',
            horario: '20:00:00'
        }).hide().fadeIn(3000)
    </script>
</body>

Arquivo: jquery.js CLIQUE AQUI para fazer o download do arquivo




07/07/2021

Plugin #01 com jQuery em HTML

Arquivo: estilo.css
@font-face {
    font-family'Oswald';
    srcurl('../fonts/Oswald-Regular.ttf'format('truetype');
}

*{
    font-family'Oswald'sans-serif;
}

html {
    height100%;
}

body {
    margin0;
    background-color#0D262D;
    color#fff;
    height100%;
}

table {
    border-collapsecollapse;
}

tr {
    border-bottomsolid 1px white;
}

td {
    font-size1.6em;
    padding10px;
}

li {
    font-size1.6em;
}

.conteudo {
    displayflex;
    flex-directioncolumn;
    align-itemscenter;
    min-height100%;
}

.exercicio div {
    font-size1.8em;
    bordersolid 5px #fff;
    padding0px 40px;
    margin10px;
}

.exercicio div:nth-of-type(1) {
    background-colordarkgoldenrod;
}

.exercicio div:nth-of-type(2) {
    background-colorcrimson;
}

.exercicio div:nth-of-type(3) {
    background-colordarkcyan;
}

.exercicio div:nth-of-type(4) {
    background-colordarkorchid;
}

.exercicio div:nth-of-type(5) {
    background-colordodgerblue;
}

.exercicio div:nth-of-type(6) {
    background-colorsalmon;
}

.exercicio .destaque {
    bordersolid 10px greenyellow;
    colorgreenyellow;
    font-weightbold;
}

Arquivo: plugin1.html
<!DOCTYPE html>
<html>

<head>
    <meta charset='UTF-8'>
    <title>Plugin #01</title>
    <link rel='stylesheet' href='css/estilo.css'>
    <script src='js/jquery.js'></script>
</head>

<body class='conteudo exercicio'>
    <h1>Plugin #01</h1>
    <div>
        {{ 1 + 2 }}
        Texto 1
        {{ 3 ** 3 }}
        Texto 2
        {{ console.log('Funcionou!') }}
        Texto 3
        {{ (function() { return 'Legal!!!' })() }}
        Texto Final
    </div>

    <script>
        //Objetivo: converter o texto acima em algo concreto
        //const $ = {nome: 'Não é o jQuery'}
        (function ($) {
            $.fn.interpretar = function (){
                const retirarChaves = s => s.substring(2s.length -2)
                const conteudo = $(this).html()
                const expressoesComChaves = conteudo.match(/\{\{.+\}\}/g)
                const expressoes = expressoesComChaves.map(retirarChaves)
                const resultados = expressoes.map(e => eval(e))

                let conteudoFinal = conteudo
                for(let i = 0i < expressoesComChaves.lengthi++){
                    conteudoFinal = conteudoFinal.replace(
                        expressoesComChaves[i], resultados[i]
                    )
                }
                $(this).html(conteudoFinal)
            }
        })(jQuery)
        $('div').interpretar()//chamando o plugin
    </script>
</body>

Arquivo: jquery.js CLIQUE AQUI para fazer o download do arquivo







06/07/2021

Animação #02 com jQuery em HTML

Arquivo: estilo.css
@font-face {
    font-family'Oswald';
    srcurl('../fonts/Oswald-Regular.ttf'format('truetype');
}

*{
    font-family'Oswald'sans-serif;
}

html {
    height100%;
}

body {
    margin0;
    background-color#0D262D;
    color#fff;
    height100%;
}

table {
    border-collapsecollapse;
}

tr {
    border-bottomsolid 1px white;
}

td {
    font-size1.6em;
    padding10px;
}

li {
    font-size1.6em;
}

.conteudo {
    displayflex;
    flex-directioncolumn;
    align-itemscenter;
    min-height100%;
}

.exercicio div {
    font-size1.8em;
    bordersolid 5px #fff;
    padding0px 40px;
    margin10px;
}

.exercicio div:nth-of-type(1) {
    background-colordarkgoldenrod;
}

.exercicio div:nth-of-type(2) {
    background-colorcrimson;
}

.exercicio div:nth-of-type(3) {
    background-colordarkcyan;
}

.exercicio div:nth-of-type(4) {
    background-colordarkorchid;
}

.exercicio div:nth-of-type(5) {
    background-colordodgerblue;
}

.exercicio div:nth-of-type(6) {
    background-colorsalmon;
}

.exercicio .destaque {
    bordersolid 10px greenyellow;
    colorgreenyellow;
    font-weightbold;
}

Arquivo: animacao2.html
<!DOCTYPE html>
<html>

<head>
    <meta charset='UTF-8'>
    <title>Animação #02</title>
    <link rel='stylesheet' href='css/estilo.css'>
    <script src='js/jquery.js'></script>
    <style>
        body {
            positionrelative;
            background-color#999;
            color#000;
        }

        div {
            positionabsolute;
            displayinline;
            bordersolid 10px #000;
            padding50px;
            font-size3em;
            background-colorcrimson;
        }
    </style>
</head>

<body>
    <div>Animar!</div>

    <script>
        //Função para alterar largura
        function alterarLargura(valorduracaocallback) {
            $('div').animate({ width: `+=${valor}` }, duracao
                , callback)
        }

        //função para mover na diagonal
        function moverDiagonal(valorduracaocallback) {
            $('div').animate({ top: `+=${valor}`left: `+=${valor}` }
                , duracaocallback)
        }

        //função de girar
        function girar(valorduracaocallback) {
            $('div').animate({ transform: `+=${valor}` }, {
                step: function (valor) {
                    $(this).css('transform'`rotate(${valor}deg)`)
                },
                duration: duracao
            }, 'linear'callback)
        }

        //chamando as funções
        alterarLargura(300100, () => {
            alterarLargura(-300'slow', () => {
                moverDiagonal(300600, () => {
                    girar(33003000)
                })
            })
        })
    </script>
</body>


Arquivo: jquery.js clique aqui para fazer o download