Moderadores: andre_luis, 51, guest2003, Renie
void setup(){
pinMode (2, INPUT);
pinMode (3, INPUT);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
digitalWrite (2 , 1);
digitalWrite (3 , 1);
}
void loop(){
int rodamotor = digitalRead (2);
// for(;;)
if (rodamotor == 0){
digitalWrite (8,1);
delay (10000);
delay (10000);
digitalWrite (8,0);
delay (15000);
digitalWrite (9,1);
delay (10000);
delay (10000);
digitalWrite (9,0);
}
}
carlucio escreveu:Pessoal,
Ainda ando testando, mas como ainda sou novato com arduino estou com dificuldades para implementar a seguinte função:
* Se apertar um botão ele deve ligar e ficar rodando initerruptamente ate eu apertar outro botão para parar. Não estou sabendo fazer isso, alguem me ajuda?
carlucio escreveu:Eu quero aprender, cara não importa o jeito.
Sera que não pode pelo menos fazer um rascunho de como deveria fazer, ja ajudaria bastante.
Não sei com funciona ainda as interrupçoes do arduino e nem a funçã milis().
carlucio escreveu:Meu ide neste momento deu pau, não compila e aparece um erro de tempo excedido, não no compilador mas em uma janela do windows com a seguinte mensagem :
Runtime error! R6016 not enough space for thread data.
//Nao verificado quando contagem de millis sofre rollover.
//Não implementado falha de inversor
//Ajustes do automatico
#define TempoCiclo 15 //Tempo do ciclo em segundos; valido para horario e anti-horario
#define CiclosTotal 3 //Total de ciclos a executar; 1 ciclo = horario + anti-horario
//Entradas
#define BotaoLiga 2 //pino 2 liga maquina; pulso negativo com pull-up
#define BotaoDesliga 3 //pino 3 desliga maquina; pulso negativo com pull-up
//Saidas
#define InversorHorario 8 //pino 8 liga inversor horario
#define InversorAntiHorario 9 //pino 9 liga inversor anti-horario
//estados do inversor
#define Para 0
#define Horario 1
#define AntiHorario 2
long MillisAnterior = 0;
unsigned long MillisAtual;
int CronometroSegundos;
boolean Maquina=0; //Estado da maquina
int EstadoInversor = Para;
int CicloAtual = 0; //contagem de ciclos completos
// Setup **************************************************************************
void setup(){
pinMode (BotaoLiga, INPUT_PULLUP);
pinMode (BotaoDesliga, INPUT_PULLUP);
pinMode (InversorHorario, OUTPUT);
pinMode (InversorAntiHorario, OUTPUT);
//Para teste
Serial.begin(9600);
}
// Main loop **********************************************************************
void loop(){
//Para teste
Serial.print("Maq:";Maquina);
Serial.print(" Ciclo:";CicloAtual);
Serial.print(" Inv:";EstadoInversor);
Serial.println(" Crono:";CronometroSegundos);
//Liga desliga maquina
if(!digitalRead(BotaoLiga) && !Maquina){ //liga maquina se estava desligada
Maquina=1;
EstadoInversor = Horario; //inicia inversor sempre em horario
MillisAnterior = MillisAtual; //inicia contagem
}
if(!digitalRead(BotaoDesliga)) Maquina=0; //desliga maquina
//Contagem de segundos
MillisAtual = millis();
CronometroSegundos = (MillisAtual - MillisAnterior) / 1000; //esta linha deve ficar apos liga maquina
//para que inicio de contagem tenha efeito
//Ciclos
if(CicloAtual>=CiclosTotal) Maquina=0;
if(!Maquina){
CicloAtual = 0;
EstadoInversor = Para;
}
//Estados do Inversor
switch(EstadoInversor){
case Para: ParaMotor(); break;
case Horario: RodaHorario(); break;
case AntiHorario: RodaAntiHorario(); break;
}
}
// funcnoes do inversor ***********************************************************
void ParaMotor(){
digitalWrite(InversorHorario,0);
digitalWrite(InversorAntiHorario,0);
}
//obs: esta sem delay para inversao
void RodaHorario(){
digitalWrite(InversorAntiHorario,0);
digitalWrite(InversorHorario,1);
if (CronometroSegundos>=TempoCiclo){
MillisAnterior = MillisAtual; //inicia contagem
EstadoInversor = AntiHorario; //inverte sentido
}
}
void RodaAntiHorario(){
digitalWrite(InversorHorario,0);
digitalWrite(InversorAntiHorario,1);
if (CronometroSegundos>=TempoCiclo){
MillisAnterior = MillisAtual; //inicia contagem
EstadoInversor = Horario; //inverte sentido
CicloAtual++;
}
}
carlucio escreveu:Quando estou compilando esta aparecendo os seguintes erros abaixo . Ja tentei alterar algumas coisas mas sem sucesso, pois ainda desconheço a dinamica da ementação do arduino.
sketch_nov02a.ino: In function 'void loop()':
sketch_nov02a:44: error: expected `)' before ';' token
sketch_nov02a:44: error: expected `)' before ';' token
sketch_nov02a:44: error: expected `;' before ')' token
sketch_nov02a.ino:44: warning: statement has no effect
sketch_nov02a:45: error: expected `)' before 'CicloAtual'
sketch_nov02a:46: error: expected `)' before ';' token
sketch_nov02a:46: error: expected `;' before ')' token
sketch_nov02a.ino:46: warning: statement has no effect
sketch_nov02a:47: error: expected `)' before ';' token
sketch_nov02a:47: error: expected `;' before ')' token
sketch_nov02a.ino:47: warning: statement has no effect
Edsnot, o que sera que devo fazer para corrigir ?
//Nao verificado quando contagem de millis sofre rollover.
//Não implementado falha de inversor
//Ajustes do automatico
#define TempoCiclo 15 //Tempo do ciclo em segundos; valido para horario e anti-horario
#define CiclosTotal 3 //Total de ciclos a executar; 1 ciclo = horario + anti-horario
//Entradas
#define BotaoLiga 2 //pino 2 liga maquina; pulso negativo com pull-up
#define BotaoDesliga 3 //pino 3 desliga maquina; pulso negativo com pull-up
//Saidas
#define InversorHorario 8 //pino 8 liga inversor horario
#define InversorAntiHorario 9 //pino 9 liga inversor anti-horario
//estados do inversor
#define Para 0
#define Horario 1
#define AntiHorario 2
long MillisAnterior = 0;
unsigned long MillisAtual;
int CronometroSegundos;
boolean Maquina=0; //Estado da maquina
int EstadoInversor = Para;
int CicloAtual = 0; //contagem de ciclos completos
// Setup **************************************************************************
void setup(){
pinMode (BotaoLiga, INPUT_PULLUP);
pinMode (BotaoDesliga, INPUT_PULLUP);
pinMode (InversorHorario, OUTPUT);
pinMode (InversorAntiHorario, OUTPUT);
//Para teste
Serial.begin(9600);
}
// Main loop **********************************************************************
void loop(){
//Para teste
Serial.print("Maq:");
Serial.print(Maquina);
Serial.print(" Ciclo:");
Serial.print(CicloAtual);
Serial.print(" Inv:");
Serial.print(EstadoInversor);
Serial.print(" Crono:");
Serial.println(CronometroSegundos);
//Liga desliga maquina
if(!digitalRead(BotaoLiga) && !Maquina){ //liga maquina se estava desligada
Maquina=1;
EstadoInversor = Horario; //inicia inversor sempre em horario
MillisAnterior = MillisAtual; //inicia contagem
}
if(!digitalRead(BotaoDesliga)) Maquina=0; //desliga maquina
//Contagem de segundos
MillisAtual = millis();
CronometroSegundos = (MillisAtual - MillisAnterior) / 1000; //esta linha deve ficar apos liga maquina
//para que inicio de contagem tenha efeito
//Ciclos
if(CicloAtual>=CiclosTotal) Maquina=0;
if(!Maquina){
CicloAtual = 0;
EstadoInversor = Para;
}
//Estados do Inversor
switch(EstadoInversor){
case Para: ParaMotor(); break;
case Horario: RodaHorario(); break;
case AntiHorario: RodaAntiHorario(); break;
}
}
// funcnoes do inversor ***********************************************************
void ParaMotor(){
digitalWrite(InversorHorario,0);
digitalWrite(InversorAntiHorario,0);
}
//obs: esta sem delay para inversao
void RodaHorario(){
digitalWrite(InversorAntiHorario,0);
digitalWrite(InversorHorario,1);
if (CronometroSegundos>=TempoCiclo){
MillisAnterior = MillisAtual; //inicia contagem
EstadoInversor = AntiHorario; //inverte sentido
}
}
void RodaAntiHorario(){
digitalWrite(InversorHorario,0);
digitalWrite(InversorAntiHorario,1);
if (CronometroSegundos>=TempoCiclo){
MillisAnterior = MillisAtual; //inicia contagem
EstadoInversor = Horario; //inverte sentido
CicloAtual++;
}
}
carlucio escreveu:Realmente funcionou e bem.
Agora quero ver se consigo apresentar aquela informação do serial monitor em um display.
Para aumentar o tempo de templo de ciclo de 15 segundos par 2 minutos simplesmente colocar 120, certo? E pode ir ate quanto? 65535?
No meu caso não sera preciso colocar o templo de ciclo total, a não ser uma necessidade exigida? Posso simplesmente comentar? E esse valor chega tambem até os 65536?
Quando for utilizar o inversor estarei usando reles para fazer o serviço, por enquanto a carga é somente led's!
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante