/*
HARDWARE do PROTÓTIPO do LABORATÓRIO - 2022
BOTÕES
S1 8 TECLA VERMELHA
S2 9 TECLA VERDE
PRESSIONADO = 1
SOLTO = 0
LVM 7 LED VERMELHO
LVD 6 LED VERDE
MOTOR de PASSO
F1 2
F2 3
F3 4
F4 5
AVANTE: 2-3-4-5
REVERSO: 2-5-4-3
MÓDULO DISPLAY
CLOCK A5
DATA A4
POTENCIÔMETRO
POT A3
A4988
DIRECAO 10
PULSOS 11
*/
//============== NOMEAR PINOS ===============
#define F1 2
#define F2 3
#define F3 4
#define F4 5
#define LVM 7
#define LVD 6
#define S1 9 // TECLA VERMELHA
#define S2 8 // TECLA VERDE
#define DIR 10
#define PUL 11
//===================================================
//===================================================
//===================================================
// Atualizado em NOVEMBRO 22
/* //////////////////// FUNÇÕES \\\\\\\\\\\\\\\\\\\\\\
inicia(); // Inicializa MÓDULO DISPLAY
brilho( valor ); // Determina o Brilho dos LEDs no Display [ valor: 0~15 ]
separaDigito( numero ); // numero = 0 Desativa ":" do Relógio
// numero = 1 Ativa ":" do Relógio
Bufferizando...
bufferDigito( posição , valor 0 ~9 , separdor do Relógio ); //Envia para buffer: ( posição 0~3, valor 0~9 , acende/apaga 1/0 ":" do Relógio)
bufferByte( posição , valor 0~255 ); //Envia Byte para buffer ( posição 0~3 , seg a =1 ,seg b = 2, seg c = 4, seg d = 8, seg e = 16 , seg f = 32 , seg g = 64 , DP = 128 )
printbuffer(); // Manda para o Display o conteúdo do Buffer
Números ou Variáveis...
printVar( número OU variável ); //Coloca direto no Display o número ou valor da variável
//////////////////// FUNÇÕES \\\\\\\\\\\\\\\\\\\\\\ */
// ======================================
// ========== TM1637 [INI] ==============
// ======================================
//PALAVRAS UTILIZADAS NESSE CÓDIGO
// maTrix
// inicia
// brilho
// pos_icao
// val_or
// pon_to
// printVar
// printBuffer
// printSegs
// bufferDigito
// separaDigito
#include <TM1637Display.h>
#define CLK A5
#define DIO A4
#define maTrix display
TM1637Display maTrix(CLK, DIO);
byte dATa[]={0,0,0,0};
//===================================
void inicia(){
maTrix.setBrightness(0x0f);
}//fecha inicia
//===================================
//==========================================================
void printVar(int val_or){
maTrix.showNumberDecEx(val_or); // numero
}//fecha printVar
//==========================================================
//==========================================================
void printSegs(byte posi_cao,byte val_or){
dATa[posi_cao]=val_or;
maTrix.setSegments(dATa);
}//fecha printSegs()
//==========================================================
//==========================================================
void brilho(byte val_or){
maTrix.setBrightness(val_or);
}//fecha brilho()
//==========================================================
//==========================================================
void bufferByte(byte posi_cao, byte val_or){
dATa[posi_cao]=val_or;
maTrix.setSegments(dATa);
}//fecha printByte()
//==========================================================
//===========================================
void separaDigito(byte on_off){
if(on_off==1){dATa[1]=dATa[1]+128;}
}//fecha separaDigito()
//===========================================
//===========================================
void printbuffer(){
printSegs(0,dATa[0]);
printSegs(1,dATa[1]);
printSegs(2,dATa[2]);
printSegs(3,dATa[3]);
}//fecha printbuffer()
//===========================================
//===========================================
void bufferDigito(byte posi_cao, byte val_or, byte pon_to){
byte num=val_or;
if(num==0){val_or=63;}
if(num==1){val_or=6;}
if(num==2){val_or=91;}
if(num==3){val_or=79;}
if(num==4){val_or=102;}
if(num==5){val_or=109;}
if(num==6){val_or=125;}
if(num==7){val_or=7;}
if(num==8){val_or=127;}
if(num==9){val_or=111;}
if(pon_to==1 && val_or<128){val_or=val_or+128;}
if(pon_to==0 && val_or>128){val_or=val_or-128;}
dATa[posi_cao]=val_or;
}//fecha bufferDigito()
//===========================================
// ======================================
// ========== TM1637 [END] ==============
// ======================================
/*
//===============================================
//============== ADAFRUIT [INI] ================
//===============================================
// PALAVRAS UTILIZADAS NESSE CÓDIGO
// maTrix
// inicia
// pos_icao
// val_or
// pon_to
// printVar
// printBuffer
// bufferDigito
// separaDigito
#include "Adafruit_LEDBackpack.h"
Adafruit_7segment maTrix = Adafruit_7segment();
//=================================================
void inicia(){
maTrix.begin(0X70); //Troque o endereço 0x70 se for diferente
}//fecha inicia
//=================================================
//===========================================================
void bufferDigito(byte posi_cao , byte val_or, byte pon_to){
if(posi_cao>1){posi_cao++;}
maTrix.writeDigitNum(posi_cao,val_or,pon_to);
}//fecha printDigito()
//===========================================================
//=============================
void separaDigito(byte onoff){
maTrix.drawColon(onoff);
}//fecha separaDigito
//=============================
//=====================================
void printbuffer(){
maTrix.writeDisplay();//Imprime Buffer
}//fecha printbuffer()
//======================================
//======================================
void brilho(byte val_or){
maTrix.setBrightness(val_or);
}//fecha brilho()
//======================================
//======================================
void bufferByte( byte pos , byte valor){
maTrix.writeDigitRaw(pos,valor);
}//fecha printByte()
//======================================
//==========================================================
void printVar(int val_or){
maTrix.print(val_or); // valor da variável
printbuffer();
}//fecha printVar
//==========================================================
//===============================================
//============== ADAFRUIT [END] ================
//===============================================
*/
//===================================================
//===================================================
//===================================================
//=========== VARIÁVEIS E TABELAS ===========
int contadorU, MPASSOS, TEMPO;
//================ SUB-ROTINAS ==============
//-------POSICIONA O MOTOR DE PASSO NO PRIMEIRO MEIO PASSO DO CICLO----
void MP1(){
digitalWrite(F1,1);
digitalWrite(F2,0);
digitalWrite(F3,0);
digitalWrite(F4,0);
}//fecha MP1()
//-------POSICIONA O MOTOR DE PASSO NO SEGUNDO MEIO PASSO DO CICLO----
void MP2(){
digitalWrite(F1,1);
digitalWrite(F2,1);
digitalWrite(F3,0);
digitalWrite(F4,0);
}//fecha MP2()
//-------POSICIONA O MOTOR DE PASSO NO TERCEIRO MEIO PASSO DO CICLO----
void MP3(){
digitalWrite(F1,0);
digitalWrite(F2,1);
digitalWrite(F3,0);
digitalWrite(F4,0);
}//fecha MP3()
//-------POSICIONA O MOTOR DE PASSO NO QUARTO MEIO PASSO DO CICLO----
void MP4(){
digitalWrite(F1,0);
digitalWrite(F2,1);
digitalWrite(F3,1);
digitalWrite(F4,0);
}//fecha MP4()
//-------POSICIONA O MOTOR DE PASSO NO QUINTO MEIO PASSO DO CICLO----
void MP5(){
digitalWrite(F1,0);
digitalWrite(F2,0);
digitalWrite(F3,1);
digitalWrite(F4,0);
}//fecha MP5()
//-------POSICIONA O MOTOR DE PASSO NO SEXTO MEIO PASSO DO CICLO----
void MP6(){
digitalWrite(F1,0);
digitalWrite(F2,0);
digitalWrite(F3,1);
digitalWrite(F4,1);
}//fecha MP6()
//-------POSICIONA O MOTOR DE PASSO NO SETIMO MEIO PASSO DO CICLO----
void MP7(){
digitalWrite(F1,0);
digitalWrite(F2,0);
digitalWrite(F3,0);
digitalWrite(F4,1);
}//fecha MP7()
//-------POSICIONA O MOTOR DE PASSO NO OITAVO MEIO PASSO DO CICLO----
void MP8(){
digitalWrite(F1,1);
digitalWrite(F2,0);
digitalWrite(F3,0);
digitalWrite(F4,1);
}//fecha MP8()
//-------CHAMA O MEIO PASSO CORRESPONDENTE A VARIÁVEL contador-----
void move(){
if(contadorU==1){MP1();}
if(contadorU==2){MP2();}
if(contadorU==3){MP3();}
if(contadorU==4){MP4();}
if(contadorU==5){MP5();}
if(contadorU==6){MP6();}
if(contadorU==7){MP7();}
if(contadorU==8){MP8();}
}//fecha move()
void A4988(){
digitalWrite(DIR,0);
digitalWrite(PUL,1);
delay(50);
digitalWrite(PUL,0);
delay(50);
}//fecha A4988()
void PASSO();{
digitalWrite(PUL,1);
delay(1);
digitalWrite(PUL,0);
delay(1);
}//fecha void PASSO
//================== SETUP ==================
void setup() {
//==========UNIPOLAR===============
pinMode(F1,OUTPUT);
pinMode(F2,OUTPUT);
pinMode(F3,OUTPUT);
pinMode(F4,OUTPUT);
pinMode(LVM,OUTPUT);
pinMode(LVD,OUTPUT);
pinMode(S1,INPUT);
pinMode(S2,INPUT);
pinMode(DIR,OUTPUT);
pinMode(PUL,OUTPUT);
//---------- CONDIÇÕES INICIAIS ----------
inicia();
brilho(15);
bufferByte(0,128);
printbuffer();
delay(250);
bufferByte(1,128);
printbuffer();
delay(250);
bufferByte(2,128);
printbuffer();
delay(250);
bufferByte(3,128);
printbuffer();
delay(250);
bufferByte(0,0);
printbuffer();
delay(250);
bufferByte(1,0);
printbuffer();
delay(250);
bufferByte(2,0);
printbuffer();
delay(250);
bufferByte(3,0);
printbuffer();
delay(250);
TEMPO = 50;
MPASSOS=1;
contadorU=1;
move();
printVar(MPASSOS);
}//fecha void setup()
//============== LOOP INFINITO ===============
void loop() {
//======== PRIMEIRO MOVIMENTO ================
for(int x=0; x<100; x++){
contadorU++;
if(contadorU==9){contadorU=1;
move();
delay(TEMPO);
}// fecha PRIMEIRO MOVIMENTO
//==== ESPERA ================================
delay(2000);
//======== SEGUNDO MOVIMENTO =================
for(int x=0; x<100; x++){
contadorU++;
if(contadorU==9){contadorU=1;
move();
delay(TEMPO);
}// fecha SEGUNDO MOVIMENTO
//==== ESPERA ================================
}//fecha void loop()