Resultados da busca - %E6%81%92%E8%BE%BE%E5%A8%B1%E4%B9%9021960%E4%BB%A3%E7%90%86%E3%80%90%E2%94%8B%E5%B8%82%E5%9C%BA%E9%83%A82%E2%92%8F7%E2%92%8F01705%5B%E6%89%A3%5D%E3%80%93%E3%80%91
(0); e direita(160); (Do servomotor) e caso ele ache uma distância a menos de 10 cm seja ele para a direita ou esquerda do sentido que o servomotor girou ele faça uma novabusca até que a condição (novabusca > 10) para ele seguir em frente (Chama a função "frente();")
OBS : O servomotor quando acha um obstaculo ele vira pro sentido que achou o obstaculo mas fica "voltando" pra posição inicial ( 90º) gostaria de saber o porque dele ficar assim,sendo que não estou usando DELAY;
CODE :
// FUNCAO SERVOMOTOR//Inicializa a posiçao do servomotor int distancia;int distanciae;int distanciad;int novabusca;#include <Servo.h>Servo meuservo;#define motor1A 4#define motor2A 5#define motor1B 6#define motor2B 7int pwma = 3;int pwmb = 9;#include "Ultrasonic.h"// Portas do Arduino que vou utilizar para programar o sensorUltrasonic ultrasonic(12,13);void setup (){ Serial.print("Lendo dados dos sensores:"); Serial.begin(9600); pinMode(motor1A,OUTPUT); pinMode(motor2A,OUTPUT); pinMode(motor1B,OUTPUT); pinMode(motor2B,OUTPUT); pinMode(pwma,OUTPUT); pinMode(pwmb,OUTPUT); meuservo.attach(8); //Centraliza Servomotor :) meuservo.write(90); }void loop () {busca();if (distancia < 10) { parado(); // Vira o servo para a direita (busca) meuservo.write(160); nbusca(); } if ( novabusca < 10) { // Vira para a esquerda meuservo.write(0); parado(); nbusca(); // Faz uma nova busca para ver se o sensor eh menor que 10 cm // Condicao para verificar se o sensor da esquerda eh menor que 10 if ( novabusca < 10) { parado(); nbusca(); } else { parado(); nbusca(); esquerda(); //Centralizar o motor } } if ( novabusca < 10) { parado(); nbusca(); meuservo.write(145); }else{ parado(); nbusca(); direita(); } if (novabusca > 10) { parado(); esquerda(); nbusca(); } else{ parado(); direita(); nbusca(); } if (novabusca > 10) { frente(); }}void frente () { digitalWrite(motor1A,LOW); digitalWrite(motor2A,HIGH); analogWrite(pwma,130); digitalWrite(motor1B,LOW); digitalWrite(motor2B,HIGH); analogWrite(pwmb,130);}void tras(){ digitalWrite(motor1A,HIGH); digitalWrite(motor2A,LOW); analogWrite(pwma,100); digitalWrite(motor1B,LOW); digitalWrite(motor2B,HIGH); analogWrite(pwmb,100);}void direita(){ digitalWrite(motor1A,HIGH); digitalWrite(motor2A,LOW); analogWrite(pwma,100); digitalWrite(motor1B,HIGH); digitalWrite(motor2B,LOW); analogWrite(pwmb,100);}void esquerda () { digitalWrite(motor1A,LOW); digitalWrite(motor2A,LOW); analogWrite(pwma,100); digitalWrite(motor1B,HIGH); digitalWrite(motor2B,HIGH); analogWrite(pwmb,100);}void parado () { digitalWrite(motor1A,LOW); digitalWrite(motor2A,LOW); analogWrite(pwma,0); digitalWrite(motor1B,LOW); digitalWrite(motor2B,LOW); analogWrite(pwmb,0);}/*void desvio_direita(){ parado(); delay(1000); direita(); delay(1000); frente();}*/void busca(){ // Funçao para Fazer leituras de Sensor Ultrasonico t distancia = (ultrasonic.Ranging(CM)); Serial.print(distancia); Serial.println("cm de distancia"); }void nbusca(){ // Funçao para Fazer leituras de Sensor Ultrasonico t novabusca = (ultrasonic.Ranging(CM)); Serial.print(distancia); Serial.println("cm de distancia"); }…
ensantes.
É o seguinte, eu construí um aspirador Robo (85% pronto só faltam alguns detalhes), quero ajuda com as melhorias.
Queria um aspirador Robo que conseguisse fazer a limpeza da minha casa, vi muitos exemplos de aspiradores feitos em casa aqui no Brasil e em outros países e sinceramente eram todos ruins não vi nenhum bom de verdade, pareciam que todos queriam mesmo colocar em prática suas habilidades com Arduino e programação do que fazer algo realmente efetivo. Porem todos foram fontes de ideias. Bom, que queria algo mais pratico mesmo, que fosse adaptado a minha casa e minha necessidade e que limpasse de verdade, não manjava nada de Arduino, mas como fui técnico em eletrônica muitos anos vi que não era nada muito complexo e tinha infinitas possibilidades, era um mundo fantástico.
Pois bem mãos a obra, desenvolvi toda a parte física usando materiais baratos, como vasilhas tupware bacias e cerdas de vassoura motores velhos, para o rolo de cerdas que giram debaixo do robô e o batedor de borracha usei a versão original do Roomba, depois de tentar fazer alguns, alias meu projeto se inspira nos Roomba série 600 com Aerovac ( aspira sujeira pela mesma entrada que varre os detritos) vi testes e reparei que mesmo aparentemente sendo um contra senso tinha um desempenho superior.
Bom o sistema de limpeza é feito por duas vassourinhas giratórias que varrem os cantos e jogam para o centro do Robô (as duas tem motor com redução, aqueles amarelinhos que o pessoal usa pra rodas) no centro do Robô tem duas escova que giram em direção opostas uma de borracha e outra de cerdas , uma “raspa” o tapete e outra coleta a sujeira levando pra dentro de um recipiente, onde tenho um motor potente ( retirado de um aspirador sem uso) que faz a sucção. Depois de muito trabalho ajustes e de fazer 3 vezes módulos diferentes porque não ficam bons (nessa parte das escovas giratórias) consegui com que ficasse bom. Realmente ele aspira e raspa e coleta sujeira cabelos e pelos da nossa cachorra muito bem, fiquei impressionado, o compartimento fica repleto de sujeira mesmo aspirando um tapete aparentemente limpo.
Agora estou substituindo os motores das rodas por dois com mais redução e maior torque (2,2kg cada) e instalando uma suspenção com molas que é muito necessário para a subida em tapetes.
Não tenho sensores de escada pq não tem necessidade aqui e quero fazer com que ele retorne a base de carga sozinho futuramente mas ainda não tenho isso muito elaborado ( sei que os robôs comerciais retornam andando a esmo até “enxergarem” o Led infravermelho da base e ai começam as manobras).
Nos testes ele usa 8 baterias 18650 (2200mah samsumg) de células de notebook novas, isso é o que custa mais caro em todo projeto, pq as baterias que vc compra no Mercado livre com 9000 mah tem no max 400mah como pude ter a experiência de bater a cabeça com isso. Agora estou instalando as outras baterias serão no total de 16. Parece muito mas quero que ele funcione por pelo menos uma hora. E o motor de aspiração consome 2,6 amperes o que suga as baterias muito rapidamente, os outros motores são todos com até 300mah conf. datasheets ( no total de 7 motores – duas escovas com redução, um para cada roda, um para o batedor de borracha outro para escova e mais um para o vácuo).
Atualmente ele já esta com 4 programas, andar aleatoriamente ( que é o mais efetivo apesar de meio idiota funciona e a maioria dos robôs comerciais usa com grande êxito), andar pelos cantos, fazer vai e vem e fazer espiral. Tenho, mas ainda não instalei dois módulos de sonar, um será usado para localizar entradas à 90 graus nos cantos e perceber que o robô não se move quando se enrosca e o outro ainda não sei o que faço com ele.
Bom mas ajuda que gostaria aqui com o pessoal é sobre a alimentação.
É o problema que me trouxe até aqui, tenho muitas tensões diferentes no projeto.
O motor de aspiração já esta com duas velocidades, comutação automática quando sobe no tapete (mas só na baixa já da conta do recado muito bem) ele usa 3 e 6 volts, as rodas, escovas e o módulo Arduíno 12v, a outra escova de borracha motor de 3v.
As baterias atualmente não estão ligadas todas em um mesmo circuito (tipo em um pack seria bom) mas são 3 conjuntos, dois com baterias em série(4) e um com baterias em paralelo(2) ( sei que não é legal mas ..) infelizmente ainda tenho que carrega-las de modo individual (tenho vários módulos carregadores) é trabalhoso mas ainda quero trabalhar nesse ponto.
Agora finalmente o que peço ajuda dos senhores, gostaria de trabalhar com todas baterias ligadas ou em série ou em paralelo em um conjunto só pra descarregarem todas de forma igual, não quero o robô andando fingindo que limpa quando a bateria do vácuo já se esgotou e a das rodas estão ali ali sobrando carga.
Uso dois módulos um step-up e outro step-down para acertos de tensões no motores, mas apesar da documentação dizendo que eles fornecem até 2 ou 3 A, percebi que após a conversão de tensão seja aumentando ou diminuindo o motor perde força, sei que se eleva a tensão a custo de corrente e se reduz a custo de dissipação de calor o que prejudica o projeto pois perco torque e queimo energia com calor dissipado minando as baterias, alguém tem alguma ideia? outro circuito ? divisores resistivos perdem muito em calor, 7806 nem pensar como posso equilibrar isso?
Ainda vou tirar fotos e fazer vídeos melhores para um futuro tutorial. Segue o link do youtube do ja tenho: https://www.youtube.com/watch?v=_8J0xE1IOxc…
Adicionado por Tomás Vieira ao 14:50 em 5 setembro 2017
ão do meu outro tópico (com os modelos de fontes aprovadas).
Fonte 10:
Loja online que comprei essa fonte: Infelizmente não encontrei a informação de onde ou quando eu comprei esta fonte (ou até mesmo se foi reaproveitada de algum equipamento...).
Link do anúncio do produto: - - -
Marca / Modelo: FY-00118 (fabricada na China)
Data da compra: - - -
Valor pago: - - -
Observações relevantes: Como podem ver, é um absurdo a etiqueta da fonte informar que ela pode fornecer 2A e na prática a mesma mal consegue fornecer 0,65A...
-------------------------------------------------------------------------------------------------------------------------------------
Fonte 11:
Loja online que comprei essa fonte: Baú da Eletrônica
Link do anúncio do produto: https://www.baudaeletronica.com.br/fonte-bivolt-9v-1a-para-arduino....
Marca / Modelo: KDL-121000 (fabricada na China)
Data da compra: 12/06/2018
Valor pago: R$12,90
Observações relevantes: Infelizmente eu comprei 3 unidades deste modelo de uma só vez e levei prejuízo. Testei os 3 modelos e todos obtiveram resultados semelhantes (péssimos). Quando aumentei um pouco mais a corrente drenada, a Tensão caiu para abaixo de 8V e ficou oscilando bastante, o que considero inadequado para uso. Mas em hipótese algum ela chega a fornecer sequer 0,3A... Já quebrei muito a cabeça em um projeto meu e só depois de muito tempo fui descobrir que o problema era esta fonte.
-------------------------------------------------------------------------------------------------------------------------------------
Fonte 12:
Loja online que comprei essa fonte: Baú da Eletrônica
Link do anúncio do produto: https://www.baudaeletronica.com.br/fonte-bivolt-12v-1a.html
Marca / Modelo: Green (fabricada na China)
Data da compra: 30/04/2018
Valor pago: R$11,65
Observações relevantes: Apesar de fornecer o dobro de corrente em relação à fonte anterior (fonte 11), essa aguenta fornecer apenas a metade da corrente descrita em sua etiqueta. Comprei 2 unidades desse modelo e ambos tiveram o mesmo desempenho ruim.
Imagino que os distribuidores / vendedores têm como alvo o público de iniciantes em Arduino (estudantes), que conhecem muito pouco (ou até nada) de eletrônica. Aí a pessoa compra, testa ela no Arduíno (fazendo apenas piscar um ou 2 leds) e já faz um comentário positivo na loja, aí vai virando uma bola de neve... Cheio de comentários positivos (mas ninguém testou a fonte de verdade) e quem ousar comentar negativo (como eu fiz) eles simplesmente barram a análise no site da loja deles. Se aproveitam da falta de conhecimento da galera...
-------------------------------------------------------------------------------------------------------------------------------------
Fonte 13:
Loja online que comprei essa fonte: Kabum
Link do anúncio do produto: https://www.kabum.com.br/produto/60415/fonte-empire-para-instalacao...
Marca / Modelo: HL-207 (fabricada na China)
Data da compra: 24/11/2017
Valor pago: R$9,41
Observações relevantes: Mesmo desempenho ruim das demais fontes acima. Notem que o distribuidor dela é a Empire (mesmo distribuidor da fonte colmeia 12V - 5A que eu elogiei bastante no outro tópico), ou seja, o mesmo distribuidor fornece tanto modelos muito bons como modelos porcarias, com etiqueta com valores falsos. Isso é bem complicado para o consumidor na hora de escolher um modelo de fonte...
-------------------------------------------------------------------------------------------------------------------------------------
E assim termina aqui meus testes com as fontes chaveadas que comprei até o momento.
Caso alguém tiver alguma sugestão de bons fornecedores / vendedores de fontes chaveadas, compartilhe aí. Se possível teste você mesmo suas fontes para descobrir os limites dela e postem aqui os resultados.
Qualquer dúvida ou sugestão, podem me chamar.
…
cas Auxiliares ---#include <LiquidCrystal.h> //Biblioteca para o display LCD
// --- Mapeamento de Hardware ---#define butUp 10 //Botão para selecionar tela acima no digital 12//#define butDown 11 //Botão para selecionar tela abaixo no digital 11#define butP 9 //Botão de ajuste mais no digital 10#define butM 8 //Botão de ajuste menos no digital 9#define Lamp1 A0 //Saída para lâmpada 1 no A0 (será usado como digital)#define Lamp2 A1 //Saída para lâmpada 2 no A1 (será usado como digital)#define sensor A3 //define o pino do sensor (que será usado para ler o sensor)
const int sensoragua = 2; //ler sinal do sensor Temperaturafloat valorsensor = 0.0;float ValorTempMax = -150,ValorTempMin = 300; //valor ue vai receber int val= 0;
// --- Protótipo das Funções Auxiliares ---void changeMenu(); //Função para modificar o menu atualvoid dispMenu(); //Função para mostrar o menu atualvoid sonda_lambda(); //Função do menu1, data e horavoid temperatura_agua(); //Função do menu2, temperaturavoid lights(); //Função do menu3, acionamento de lampadasvoid temperatura_ar(); //Função do menu4
// --- Variáveis Globais ---char menu = 0x01; //Variável para selecionar o menuchar set1 = 0x00, set2 = 0x00; //Controle das lâmpadasboolean t_butUp, t_butDown, t_butP, t_butM; //Flags para armazenar o estado dos botõesconst int valorsensoragua = 0;// --- Hardware do LCD ---LiquidCrystal disp(12, //RS no digital 7 11, //EN no digital 6 5, //D4 no digital 5 4, //D5 no digital 4 3, //D6 no digital 3 2); //D7 no digital 2
// --- Configurações Iniciais ---void setup(){ disp.begin(16,2); //Inicializa LCD 16 x 2 for(char i=7; i<10; i++) pinMode(i, INPUT_PULLUP); //Entrada para os botões (digitais 9 a 12) com pull-ups internos pinMode(Lamp1, OUTPUT); //Configura saída para lâmpada 1 pinMode(Lamp2, OUTPUT); //Configura saída para lâmpara 2 t_butUp = 0x00; //limpa flag do botão Up //t_butDown = 0x00; //limpa flag do botão Down t_butP = 0x00; //limpa flag do botão P t_butM = 0x00; //limpa flag do botão M digitalWrite(Lamp1, LOW); //Lâmpada 1 inicia apagada digitalWrite(Lamp2, LOW); //Lâmpada 2 inicia apagada
} //end setup
// --- Loop Infinito ---void loop(){ changeMenu(); dispMenu();
} //end loop
// --- Desenvolvimento das Funções Auxiliares ---void changeMenu() //Modifica o menu atual{ if(!digitalRead(butUp)) t_butUp = 0x01; //Botão Up pressionado? Seta flag // if(!digitalRead(butDown)) t_butDown = 0x01; //Botão Down pressionado? Seta flag if(digitalRead(butUp) && t_butUp) //Botão Up solto e flag setada? { //Sim... t_butUp = 0x00; //Limpa flag disp.clear(); //Limpa display menu++; //Incrementa menu if(menu > 0x04) menu = 0x01; //Se menu maior que 4, volta a ser 1 } //end butUp /* if(digitalRead(butDown) && t_butDown) //Botão Down solto e flag setada? { //Sim... t_butDown = 0x00; //Limpa flag disp.clear(); //Limpa display menu--; //Decrementa menu if(menu < 0x01) menu = 0x04; //Se menu menor que 1, volta a ser 4 } //end butDown */
} //end changeMenu
void dispMenu() //Mostra o menu atual{ switch(menu) //Controle da variável menu { case 0x01: //Caso 1 sonda_lambda(); //Chama a função de relógio break; //break case 0x02: //Caso 2 temperatura_agua(); //Chama a função do termômetro break; //break case 0x03: //Caso 3 lights(); //Chama função para acionamento de lâmpadas break; //break case 0x04: //Caso 4 temperatura_ar(); //Chama função para o menu4 break; //break } //end switch menu
} //end dispMenu
void sonda_lambda() //Data e Hora (menu1){ disp.setCursor(2,0); //Posiciona cursor na coluna 1, linha 1 disp.print("Sonda Lambda"); //Imprime mensagem disp.setCursor(6,1); //Posiciona cursor na coluna 1, linha 2 // Desenvolver uma função de data e hora... disp.print("0.89"); //Mostrador (apenas ilustrativo......)
} //end Sonda
void temperatura_agua() //Temperatura (menu2){ val = analogRead(sensoragua); valorsensor = (val * 358.0)/1024; Serial.println(valorsensor);
disp.setCursor(3,0); //Posiciona cursor na coluna 1, linha 1 disp.print("Temp: Agua"); //Imprime mensagem disp.setCursor(0,1); //Posiciona cursor na coluna 2, linha 2
if (valorsensor > ValorTempMax){ ValorTempMax = valorsensor; } disp.setCursor(0,1); disp.print(valorsensor); disp.write(B11011111); //disp.print(" C "); disp.setCursor(11,1); disp.print(ValorTempMax); disp.write(B11011111);
if (valorsensor >= 27)
{ digitalWrite (A3,HIGH); }
else if (valorsensor <= 25 ) { digitalWrite (A3,LOW); }
// Desenvolver uma função de data e hora... //Mostrador (apenas ilustrativo......)
// disp.print(valorsensor); //disp.write(B11011111); //disp.setCursor(11,1);
delay (1000);
} //end temperatura() void lights() //Acionamento de lâmpadas (menu3){ disp.setCursor(0,0); //Posiciona cursor na coluna 1, linha 1 disp.print("Acionar Lampadas"); //Imprime mensagem do menu 3 if(!digitalRead(butP)) t_butP = 0x01; //Botão P pressionado? Seta flag if(!digitalRead(butM)) t_butM = 0x01; //Botão M pressionado? Seta flag if(digitalRead(butP) && t_butP) //Botão P solto e flag setada? { //Sim... t_butP = 0x00; //Limpa flag set1++; //Incrementa set1 if(set1 > 2) set1 = 0x01; //Se maior que 2, volta a ser 1 switch(set1) //Controle do set1 { case 0x01: //Caso 1 disp.setCursor(0,1); //Posiciona cursor na coluna 1, linha 2 disp.print("L1 on "); //Imprime mensagem digitalWrite(Lamp1, HIGH); //Liga lâmpada 1 break; //Break case 0x02: //Caso 2 disp.setCursor(0,1); //Posiciona cursor na coluna 1, linha 2 disp.print("L1 off"); //Imprime mensagem digitalWrite(Lamp1, LOW); //Desliga lâmpada 1 break; //Break } //end switch set1 } //end butP if(digitalRead(butM) && t_butM) //Botão D solto e flag setada? { //Sim... t_butM = 0x00; //Limpa flag set2++; //Incrementa set2 if(set2 > 2) set2 = 0x01; //Se maior que 2, volta a ser 1 switch(set2) //Controle do set2 { case 0x01: //Caso 1 disp.setCursor(8,1); //Posiciona cursor na coluna 8, linha 2 disp.print("L2 on "); //Imprime mensagem digitalWrite(Lamp2, HIGH); //Liga lâmpada 2 break; //Break case 0x02: //Caso 2 disp.setCursor(8,1); //Posiciona cursor na coluna 8, linha 2 disp.print("L2 off"); //Imprime mensagem digitalWrite(Lamp2, LOW); //Liga lâmpada 1 break; //Break } //end switch set1 } //end butM
} //end lights
void temperatura_ar() //Função genérica para um quarto menu...{ disp.setCursor(3,0); //Posiciona cursor na coluna 1, linha 1 disp.print("Temp: AR "); //Imprime mensagem disp.setCursor(4,1); //Posiciona cursor na coluna 8, linha 2 // Desenvolver uma função de data e hora... disp.print("30 graus"); //Créditos
} //end menu4
//pode-se implementar quantos menus quiser //............
Então ele funciona perfeitamente, só que quando mudo o menu (a função para acender o led não funciona).
Quando está acesa ela não apaga e quando está desligada ela não acende, o que ta de errado no codigo ai, vc poderia me umas dicas.
…
OPROTECT,NOBROWNOUT#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,errors,stream=pc)void verificacao(){ char est1,est2,est3,est4,est5; //Estado da Sala if(!input(pin_b0)) est1 ='Q'; else est1 ='q'; //Estado do Quarto if(!input(pin_b1)) est2 ='Z'; else est2 ='z'; //Estado da Cozinha if(!input(pin_b2)) est3 ='S'; else est3 ='s'; //Estado da Panela if(!input(pin_b3)) est4 ='E'; else est4 ='e'; //Estado do Abajur if(!input(pin_b4)) est5 ='C'; else est5 ='c'; //Imprimindo a Resposta fprintf(pc,"%c%c%c%c%c\n\r",est1,est2,est3,est4,est5); delay_ms(150);}void main (void){ char dir; //variaveis de controle das lampadas int a0,a1,a2,a3,opc; //variaveis de controle dos motores e switch-case //Inicializa��o das Variveis a0=a1=a2=a3=opc=0; while(true){ while(!kbhit()); //aguarda at� que seja recebido um dado na porta serial dir=getc(); //armazena em c o caracter recebido na porta serial //SALA if (dir == 'q') //Liga a Sala opc=1; else if (dir == 'Q') // Desliga a Sala opc=2; //QUARTO if (dir == 'z') //Liga o Quarto opc=3; else if (dir == 'Z') // Desliga o Quarto opc=4; //COZINHA if (dir == 's') //Liga a Cozinha opc=5; else if (dir == 'S') // Desliga a Cozinha opc=6; //PANELA if (dir == 'e') //Liga a Panela opc=7; else if (dir == 'E') // Desliga a Panela opc=8; //Abajur if(dir == 'c') //Liga o Abajur opc=9; else if (dir == 'C') // Desliga o Abajur opc=10; //Tabela de verifica��o else if (dir == 'p') opc=12; switch(opc) { case 1: //Liga SALA output_high(pin_b0); delay_ms(100); verificacao(); break; case 2: //Desliga SALA output_low(pin_b0); delay_ms(100); verificacao(); break; case 3: //Liga Quarto output_high(pin_b1); delay_ms(100); verificacao(); break; case 4: //Desliga Quarto output_low(pin_b1); delay_ms(100); verificacao(); break; case 5: //Liga Cozinha output_high(pin_b2); delay_ms(100); verificacao(); break; case 6: //Desliga Cozinha output_low(pin_b2); delay_ms(100); verificacao(); break; case 7: //Liga Panela output_high(pin_b3); delay_ms(100); verificacao(); break; case 8: //Desliga Panela output_low(pin_b3); delay_ms(100); verificacao(); break; case 9: //Liga Abajur output_high(pin_b4); delay_ms(100); verificacao(); break; case 10: //Desliga Abajur output_low(pin_b4); delay_ms(100); verificacao(); break; case 12: delay_ms(100); verificacao(); delay_ms(100); break; } //Fim do Switch-case } // Fim do While True}//Fim do Void"No compilador do Windows está funcionando perfeitamente, só quando tento compilar pelo Linux retorna o seguinte erro:will@will-laptop:~/Área de trabalho$ sdcc --debug -mpic14 -p16f877a Serial.cSerial.c:2:20: error: 16f877.h: No such file or directorySerial.c:3:2: error: invalid preprocessing directive #useSerial.c:4:2: error: invalid preprocessing directive #fusesSerial.c:5:2: error: invalid preprocessing directive #useSerial.c:12: warning 112: function 'input' implicit declarationSerial.c:18: warning 112: function 'input' implicit declarationSerial.c:24: warning 112: function 'input' implicit declarationSerial.c:30: warning 112: function 'input' implicit declarationSerial.c:36: warning 112: function 'input' implicit declarationSerial.c:44: warning 112: function 'fprintf' implicit declarationSerial.c:46: warning 112: function 'delay_ms' implicit declarationSerial.c:12: error 101: too many parameters Serial.c:18: error 101: too many parameters Serial.c:24: error 101: too many parameters Serial.c:30: error 101: too many parameters Serial.c:36: error 101: too many parameters Serial.c:44: error 101: too many parameters Serial.c:46: error 101: too many parameters Serial.c:62: warning 112: function 'kbhit' implicit declarationSerial.c:63: warning 112: function 'getc' implicit declarationSerial.c:104: warning 112: function 'output_high' implicit declarationSerial.c:105: warning 112: function 'delay_ms' implicit declarationSerial.c:110: warning 112: function 'output_low' implicit declarationSerial.c:111: warning 112: function 'delay_ms' implicit declarationSerial.c:116: warning 112: function 'output_high' implicit declarationSerial.c:117: warning 112: function 'delay_ms' implicit declarationSerial.c:122: warning 112: function 'output_low' implicit declarationSerial.c:123: warning 112: function 'delay_ms' implicit declarationSerial.c:128: warning 112: function 'output_high' implicit declarationSerial.c:129: warning 112: function 'delay_ms' implicit declarationSerial.c:134: warning 112: function 'output_low' implicit declarationSerial.c:135: warning 112: function 'delay_ms' implicit declarationSerial.c:140: warning 112: function 'output_high' implicit declarationSerial.c:141: warning 112: function 'delay_ms' implicit declarationSerial.c:146: warning 112: function 'output_low' implicit declarationSerial.c:147: warning 112: function 'delay_ms' implicit declarationSerial.c:152: warning 112: function 'output_high' implicit declarationSerial.c:153: warning 112: function 'delay_ms' implicit declarationSerial.c:158: warning 112: function 'output_low' implicit declarationSerial.c:159: warning 112: function 'delay_ms' implicit declarationSerial.c:166: warning 112: function 'delay_ms' implicit declarationSerial.c:168: warning 112: function 'delay_ms' implicit declarationSerial.c:60: error 20: Undefined identifier 'true'Serial.c:104: error 101: too many parameters Serial.c:105: error 101: too many parameters Serial.c:110: error 101: too many parameters Serial.c:111: error 101: too many parameters Serial.c:116: error 101: too many parameters Serial.c:117: error 101: too many parameters Serial.c:122: error 101: too many parameters Serial.c:123: error 101: too many parameters Serial.c:128: error 101: too many parameters Serial.c:129: error 101: too many parameters Serial.c:134: error 101: too many parameters Serial.c:135: error 101: too many parameters Serial.c:140: error 101: too many parameters Serial.c:141: error 101: too many parameters Serial.c:146: error 101: too many parameters Serial.c:147: error 101: too many parameters Serial.c:152: error 101: too many parameters Serial.c:153: error 101: too many parameters Serial.c:158: error 101: too many parameters Serial.c:159: error 101: too many parameters Serial.c:166: error 101: too many parameters Serial.c:168: error 101: too many parameters Já procurei alguns exemplos e nada de conseguir fazer funcionar, alguma sugestão??…
Adicionado por William Lima para PIC ao 20:51 em 19 junho 2012
ino tem que ficar no automatico até acionar outros botões ou os fim de curso.
Ele começa bem , porem, para após um certo tempo, quando o valor fica entre 300 e 700.
vou colocar o programa para quem quiser me ajudar a melhora-lo, já que sou iniciante no arduino.
int botao1 = A3;int botao2 = A4;int botao3 = A5;int sensor = A0;//Sensor com LDRint fdc1 = A1;//fim de curso 1int fdc2 = A2;//fim de curso 2int valor1 = 0;//variavel para fim de curso 1int valor2 = 0;//variavel para fim de curso 2int state1 = 0;//variavel para botao 1int state2 = 0;//variavel para botao 2int state3 = 0;//variavel para botao 3int a = 0;//variavel de controleint b = 0;//variave2 de controleint c = 0;//variave3 de controle
void setup(){Serial.begin(9600);pinMode(8,OUTPUT);//porta em que esta o motor de passospinMode(9,OUTPUT);//porta em que esta o motor de passospinMode(10,OUTPUT);//porta em que esta o motor de passospinMode(11,OUTPUT);//porta em que esta o motor de passos}void loop(){ // utilizei entradas analogicas para os botões e fins de curso, pois as portas digitais são muito sensiveis valor1 = analogRead(fdc1);valor2 = analogRead(fdc2);state1 = analogRead(botao1);state2 = analogRead(botao2);state3 = analogRead(botao3);delay(500);if(state1 > 600 && state1 < 700){Serial.println(111111);//para exibir quando for realizado a condiçãoa = 1;abrir();delay(500);}if(state2 > 600 && state2 < 700){Serial.println(222222);//para exibir quando for realizado a condiçãob = 1;fechar();delay(500);}if(state3 > 600 && state3 < 700){Serial.println(333333);//para exibir quando for realizado a condiçãoc = 1;automatico(); delay(500);}}void abrir(){ //Executa para abrir a persianawhile(a){digitalWrite(8, HIGH); //Logica mais simples para funcionamento do motor de passos sentido horario delay(10);digitalWrite(8, LOW);digitalWrite(9, HIGH);delay(10);digitalWrite(9, LOW);digitalWrite(10, HIGH);delay(10);digitalWrite(10, LOW);digitalWrite(11, HIGH);delay(10);digitalWrite(11, LOW);Serial.println(1);//para visualizar o funcionamento na telavalor1 = analogRead(fdc1);//fazer leitura para verificar condiçãovalor2 = analogRead(fdc2);//fazer leitura para mudar valorstate2 = analogRead(botao2);//fazer leitura para verificar condiçãostate3 = analogRead(botao3);//fazer leitura para verificar condiçãoif(state2 > 600 && state2 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta{a = 0;b = 1;c = 0;fechar();}if(state3 > 600 && state3 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta{a = 0;b = 0;c = 1;automatico();}if(valor1 > 600 && valor1 <700)//Quando o fim de curso é acionado ele fica com um valor de 650 na porta{state1 = 0;state2 = 0;state3 = 0;return;}}}void fechar(){ //Executa para fechar a persianawhile(b){digitalWrite(11, HIGH); //Logica mais simples para funcionamento do motor de passos sentido anti-horariodelay(10);digitalWrite(11, LOW);digitalWrite(10, HIGH);delay(10);digitalWrite(10, LOW);digitalWrite(9, HIGH);delay(10);digitalWrite(9, LOW);digitalWrite(8, HIGH);delay(10);digitalWrite(8, LOW);Serial.println(2);//para visualizar o funcionamento na telavalor1 = analogRead(fdc1);//fazer leitura para mudar valorvalor2 = analogRead(fdc2);//fazer leitura para verificar condiçãostate1 = analogRead(botao1);//fazer leitura para verificar condiçãostate3 = analogRead(botao3);//fazer leitura para verificar condiçãoif (state1 > 600 && state1 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta{a = 1;b = 0;c = 0;abrir();}if(state3 > 600 && state3 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta{a = 0;b = 0;c = 1;automatico();}if(valor2 > 600 && valor2 < 700)//Quando o fim de curso é acionado ele fica com um valor de 650 na porta{state1 = 0;state2 = 0;state3 = 0;return;}}}void automatico(){//Executa para ficar no modo automatico a persianawhile(c){int val=analogRead(sensor);Serial.println(val); if(val < 300){ //se o sensor estiver com valor abaixo de 300digitalWrite(11, HIGH); //Logica mais simples para funcionamento do motor de passos sentido anti-horariodelay(10);digitalWrite(11, LOW);digitalWrite(10, HIGH);delay(10);digitalWrite(10, LOW);digitalWrite(9, HIGH);delay(10);digitalWrite(9, LOW);digitalWrite(8, HIGH);delay(10);digitalWrite(8, LOW); Serial.println(3);//para visualizar o funcionamento na telaint val=analogRead(sensor);}if(val > 700){ //se o sensor estiver com valor acima de 700digitalWrite(8, HIGH); //Logica mais simples para funcionamento do motor de passos sentido horariodelay(10);digitalWrite(8, LOW);digitalWrite(9, HIGH);delay(10);digitalWrite(9, LOW);digitalWrite(10, HIGH);delay(10);digitalWrite(10, LOW);digitalWrite(11, HIGH);delay(10);digitalWrite(11, LOW);Serial.println(4);//para visualizar o funcionamento na telaint val=analogRead(sensor);}if(val <= 700 && val >= 300){//se o sensor não estiver com nenhuma das duas condiçõesdelay(1000); //esperar 1 segundo para fazer verificação}valor1 = analogRead(fdc1); //fazer leitura para verificar condiçãovalor2 = analogRead(fdc2); //fazer leitura para verificar condiçãostate1 = analogRead(botao1);//fazer leitura para verificar condiçãostate2 = analogRead(botao2);//fazer leitura para verificar condiçãoif (state1 > 600 && state1 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta{a = 1;b = 0;c = 0;abrir();}if(state2 > 600 && state2 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta{a = 0;b = 1;c = 0;fechar();}if(valor1 > 600 && valor1 < 700) //Quando o fim de curso é acionado ele fica com um valor de 650 na porta{state1 = 0;state2 = 0;state3 = 0;return;}if(valor2 > 600 && valor2 < 700) //Quando o fim de curso é acionado ele fica com um valor de 650 na porta{state1 = 0;state2 = 0;state3 = 0;return;}} }…
ino tem que ficar no automatico até acionar outros botões ou os fim de curso.
Ele começa bem , porem, para após um certo tempo, quando o valor fica entre 300 e 700.
vou colocar o programa para quem quiser me ajudar a melhora-lo, já que sou iniciante no arduino.
int botao1 = A3;int botao2 = A4;int botao3 = A5;int sensor = A0;//Sensor com LDRint fdc1 = A1;//fim de curso 1int fdc2 = A2;//fim de curso 2int valor1 = 0;//variavel para fim de curso 1int valor2 = 0;//variavel para fim de curso 2int state1 = 0;//variavel para botao 1int state2 = 0;//variavel para botao 2int state3 = 0;//variavel para botao 3int a = 0;//variavel de controleint b = 0;//variave2 de controleint c = 0;//variave3 de controle
void setup(){ Serial.begin(9600); pinMode(8,OUTPUT);//porta em que esta o motor de passos pinMode(9,OUTPUT);//porta em que esta o motor de passos pinMode(10,OUTPUT);//porta em que esta o motor de passos pinMode(11,OUTPUT);//porta em que esta o motor de passos } void loop(){ // utilizei entradas analogicas para os botões e fins de curso, pois as portas digitais são muito sensiveis valor1 = analogRead(fdc1); valor2 = analogRead(fdc2); state1 = analogRead(botao1); state2 = analogRead(botao2); state3 = analogRead(botao3); delay(500); if(state1 > 600 && state1 < 700){ Serial.println(111111);//para exibir quando for realizado a condição a = 1; abrir(); delay(500); } if(state2 > 600 && state2 < 700){ Serial.println(222222);//para exibir quando for realizado a condição b = 1; fechar(); delay(500); } if(state3 > 600 && state3 < 700){ Serial.println(333333);//para exibir quando for realizado a condição c = 1; automatico(); delay(500); }} void abrir(){ //Executa para abrir a persiana while(a){ digitalWrite(8, HIGH); //Logica mais simples para funcionamento do motor de passos sentido horario delay(10); digitalWrite(8, LOW); digitalWrite(9, HIGH); delay(10); digitalWrite(9, LOW); digitalWrite(10, HIGH); delay(10); digitalWrite(10, LOW); digitalWrite(11, HIGH); delay(10); digitalWrite(11, LOW); Serial.println(1);//para visualizar o funcionamento na tela valor1 = analogRead(fdc1);//fazer leitura para verificar condição valor2 = analogRead(fdc2);//fazer leitura para mudar valor state2 = analogRead(botao2);//fazer leitura para verificar condição state3 = analogRead(botao3);//fazer leitura para verificar condição if(state2 > 600 && state2 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta { a = 0; b = 1; c = 0; fechar(); } if(state3 > 600 && state3 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta { a = 0; b = 0; c = 1; automatico(); } if(valor1 > 600 && valor1 <700)//Quando o fim de curso é acionado ele fica com um valor de 650 na porta { state1 = 0; state2 = 0; state3 = 0; return; } } } void fechar(){ //Executa para fechar a persiana while(b){ digitalWrite(11, HIGH); //Logica mais simples para funcionamento do motor de passos sentido anti-horario delay(10); digitalWrite(11, LOW); digitalWrite(10, HIGH); delay(10); digitalWrite(10, LOW); digitalWrite(9, HIGH); delay(10); digitalWrite(9, LOW); digitalWrite(8, HIGH); delay(10); digitalWrite(8, LOW); Serial.println(2);//para visualizar o funcionamento na tela valor1 = analogRead(fdc1);//fazer leitura para mudar valor valor2 = analogRead(fdc2);//fazer leitura para verificar condição state1 = analogRead(botao1);//fazer leitura para verificar condição state3 = analogRead(botao3);//fazer leitura para verificar condição if (state1 > 600 && state1 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta { a = 1; b = 0; c = 0; abrir(); } if(state3 > 600 && state3 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta { a = 0; b = 0; c = 1; automatico(); } if(valor2 > 600 && valor2 < 700)//Quando o fim de curso é acionado ele fica com um valor de 650 na porta { state1 = 0; state2 = 0; state3 = 0; return; } } } void automatico(){//Executa para ficar no modo automatico a persiana while(c){ int val=analogRead(sensor); Serial.println(val); if(val < 300){ //se o sensor estiver com valor abaixo de 300 digitalWrite(11, HIGH); //Logica mais simples para funcionamento do motor de passos sentido anti-horario delay(10); digitalWrite(11, LOW); digitalWrite(10, HIGH); delay(10); digitalWrite(10, LOW); digitalWrite(9, HIGH); delay(10); digitalWrite(9, LOW); digitalWrite(8, HIGH); delay(10); digitalWrite(8, LOW); Serial.println(3);//para visualizar o funcionamento na tela int val=analogRead(sensor); } if(val > 700){ //se o sensor estiver com valor acima de 700 digitalWrite(8, HIGH); //Logica mais simples para funcionamento do motor de passos sentido horario delay(10); digitalWrite(8, LOW); digitalWrite(9, HIGH); delay(10); digitalWrite(9, LOW); digitalWrite(10, HIGH); delay(10); digitalWrite(10, LOW); digitalWrite(11, HIGH); delay(10); digitalWrite(11, LOW); Serial.println(4);//para visualizar o funcionamento na tela int val=analogRead(sensor); } if(val <= 700 && val >= 300){//se o sensor não estiver com nenhuma das duas condições delay(1000); //esperar 1 segundo para fazer verificação } valor1 = analogRead(fdc1); //fazer leitura para verificar condição valor2 = analogRead(fdc2); //fazer leitura para verificar condição state1 = analogRead(botao1);//fazer leitura para verificar condição state2 = analogRead(botao2);//fazer leitura para verificar condição if (state1 > 600 && state1 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta { a = 1; b = 0; c = 0; abrir(); } if(state2 > 600 && state2 < 700)//Quando o botão é acionado ele fica com um valor de 650 na porta { a = 0; b = 1; c = 0; fechar(); } if(valor1 > 600 && valor1 < 700) //Quando o fim de curso é acionado ele fica com um valor de 650 na porta { state1 = 0; state2 = 0; state3 = 0; return; } if(valor2 > 600 && valor2 < 700) //Quando o fim de curso é acionado ele fica com um valor de 650 na porta { state1 = 0; state2 = 0; state3 = 0; return; } } }…