Resultados da busca - %E5%8D%8E%E5%AE%87%E4%BC%AF%E4%B9%90%E5%BD%A9%E3%80%90%E2%94%83%E4%BF%A1%E8%AA%892%E2%92%8F7%E2%92%8F01705(%E6%89%A3)%E3%80%91%E3%80%91
abaixo.
Agora meu problema é um menu que seja eficiente e eu consiga agregar as funções que quero.
Montei o código abaixo que funciona mas encontrei o seguinte problema. O horário mostrado na primeira ela fica congelado no momento que dispara o timer até o fim da programação.
Não sei se tenho que mudar o código de lugar.
Gostaria de criticas e aprimoramentos para colocar para funcionar. Quem quiser discutir estou aberto. O codigo foi feito aproveitando ideias da internet e por isso pode ter alguma inconsistencia. Mas agente aprende sempre.
Este sistema já está em teste de desempenho e espero que tenha ele pronto até o fim da semana.
Desde já agradeço a ajuda.
Quem quiser ver a parte física montada olha o video a seguir:
http://www.youtube.com/watch?v=iWk_hh_ZA60
int t1[7]= { //Timer do motor de 3cv 0,0,0,0,0,0,0};
int dd=1000; // used for delay in show timer data
#include <LiquidCrystal.h> #include <Wire.h>#include <EEPROM.h>#include "RTClib.h"
RTC_DS1307 RTC;
// Definição dos pinos dos botões
#define bMenu A2 // Os pinos analógicos podem ser#define bChange A3 // usados como digitais, bastando#define bUp A0 // referenciá-los por A0, A1..#define bDown A1#define benter 8
#define bMenu0 90 // Valor de referência que a #define bChange0 91 // função CheckButton() passa#define bUp0 92 // indicando que um botão foi#define bDown0 93 // solto#define benter0 94
boolean aMenu, aChange, aUp, aDown, aenter; // Grava o ultimo valor lidos nos botões.// Utilizado pela função Checkbutton p/ identificar quando há uma alteração no estado do pino dos botões
int horini=EEPROM.read(0); // variavel a ser alterada pelo menuint minini=EEPROM.read(1);int horfim=EEPROM.read(2);int minfim=EEPROM.read(3);
char state=1; // variável que guarda posição atual do menuLiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Declaração do objeto tipo lcd
String ArrumaZero(int i) { String ret; if (i < 10) ret += "0"; ret += i; return ret; }
//============================================== SETUPvoid setup(){ Wire.begin(); lcd.begin(16, 2); // Iniciando a biblioteca do LCD RTC.begin(); pinMode(bMenu, INPUT); // Botões pinMode(bChange,INPUT); pinMode(bUp, INPUT); pinMode(bDown, INPUT); pinMode(benter, INPUT); pinMode(6, OUTPUT); // USADO PARA VALVULA 2 pinMode(7, OUTPUT); // USADO PARA VALVULA 1 pinMode(9, OUTPUT); // USADO PARA CONTROLAR A BOMBA
digitalWrite(bMenu, HIGH); // Aciona o pull-up interno digitalWrite(bChange,HIGH); // dos botões digitalWrite(bUp, HIGH); digitalWrite(bDown, HIGH); digitalWrite(benter, HIGH); if (!RTC.isrunning()) { RTC.adjust(DateTime(__DATE__, __TIME__)); } t1[0]= EEPROM.read(0);t1[1]= EEPROM.read(1);t1[2]= EEPROM.read(2);t1[3]= EEPROM.read(3);t1[4]= 8;t1[5]= 1;}//==============================================//============================================== LOOP
void loop(){ switch (state) { // Define checa qual tela atual case 1: // executado quando na TELA 1 switch (CheckButton()) { case bUp: lcd.clear(); Set_state(7); // antes de mudar de tela, é necessário limpar o break; // display com a função lcd.clear() case bDown: lcd.clear(); Set_state(2); break; default: // Caso nenhum botão tenha sido apertado, ela executa a set_state Set_state(1); // mesmo assim para atualizar o display. } break; case 2: // executado quando na TELA 2 switch (CheckButton()) { case bMenu: lcd.clear(); horini--; break; case bChange: lcd.clear(); horini++; break; case bUp: lcd.clear(); Set_state(1); break; case bDown: lcd.clear(); Set_state(3); break; case benter: EEPROM.write(0, horini); default: Set_state(2); } break; case 3: // executado quando na TELA 3 switch (CheckButton()) { case bMenu: lcd.clear(); minini--; break; case bChange: lcd.clear(); minini++; break; case bUp: lcd.clear(); Set_state(2); break; case bDown: lcd.clear(); Set_state(4); break; case benter: EEPROM.write(1, minini); default: Set_state(3); } break; case 4: // executado quando na TELA 4 switch (CheckButton()) { case bMenu: lcd.clear(); horfim--; break; case bChange: lcd.clear(); horfim++; break; case bUp: lcd.clear(); Set_state(3); break; case bDown: lcd.clear(); Set_state(5); break; case benter: EEPROM.write(2, horfim); default: Set_state(4); } break; case 5: // executado quando na TELA 5 switch (CheckButton()) { case bMenu: lcd.clear(); minfim--; break; case bChange: lcd.clear(); minfim++; break; case bUp: lcd.clear(); Set_state(4); break; case bDown: lcd.clear(); Set_state(6); break; case benter: EEPROM.write(3, minfim); default: Set_state(5); } break; case 6: // executado quando na TELA 6 switch (CheckButton()) { case bUp: lcd.clear(); Set_state(5); break; case bDown: lcd.clear(); Set_state(7); break; default: Set_state(6); } break; case 7: // executado quando na TELA 7 switch (CheckButton()) { case bUp: lcd.clear(); Set_state(6); break; case bDown: lcd.clear(); Set_state(1); break; default: Set_state(7); } break; default: ; }
checktimer1(); delay(200); // to stop screen flicker}
//============================================== FIM da função LOOP
void checktimer1()// checa o horário para saber se irá ligar o motor{ DateTime agora = RTC.now(); int hora = agora.hour(); int minuto = agora.minute(); int segundo = agora.second(); if (t1[4]==8); { if (hora==t1[0] && minuto==t1[1]) { digitalWrite(7, HIGH); delay(5000); digitalWrite(9,HIGH); delay(3600000); digitalWrite(6,HIGH); delay(5000); digitalWrite(7,LOW); delay(3600000); digitalWrite(9,LOW); digitalWrite(6,LOW); t1[6]=1; } if (hora==t1[2] && minuto==t1[3]) { digitalWrite(9, LOW); digitalWrite(6,LOW); digitalWrite(7,LOW); t1[6]=0; } }}
//============================================== CheckButtonchar CheckButton() { if (aMenu!=digitalRead(bMenu)) { aMenu=!aMenu; if (aMenu) return bMenu0; else return bMenu; } else if (aChange!=digitalRead(bChange)) { aChange=!aChange; if (aChange) return bChange0; else return bChange; } else if (aUp!=digitalRead(bUp)) { aUp=!aUp; if (aUp) return bUp0; else return bUp; } else if (aDown!=digitalRead(bDown)) { aDown=!aDown; if (aDown) return bDown0; else return bDown; } else if (aenter!=digitalRead(benter)) { aenter=!aenter; if (aenter) return benter0; else return benter; } else return 0;}
//========================================================//============================================== Set_statevoid Set_state(char index) { state = index; // Atualiza a variável state para a nova tela DateTime agora = RTC.now(); String relogio_data = "DT: "; String relogio_hora = "HR: "; int dia = agora.day(); int mes = agora.month(); int ano = agora.year();
relogio_data += ArrumaZero(dia); relogio_data += "/"; relogio_data += ArrumaZero(mes); relogio_data += "/"; relogio_data += ano; int hora = agora.hour(); int minuto = agora.minute(); int segundo = agora.second(); relogio_hora += ArrumaZero(hora); relogio_hora += ":"; relogio_hora += ArrumaZero(minuto); relogio_hora += ":"; relogio_hora += ArrumaZero(segundo);
switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente case 1: //==================== state 1 lcd.setCursor(0, 0); lcd.print(relogio_data); lcd.setCursor(0, 1); lcd.print(relogio_hora); break; case 2: //==================== state 2 lcd.setCursor(0,0); lcd.print("Hor. Inicio"); lcd.setCursor(0,1); lcd.print(horini); break; case 3: //==================== state 3 lcd.setCursor(0,0); lcd.print("Min. Inicio"); lcd.setCursor(0,1); lcd.print(minini); break; case 4: //==================== state 4 lcd.setCursor(0,0); lcd.print("Hor. Fim"); lcd.setCursor(0,1); lcd.print(horfim); break; case 5: //==================== state 5 lcd.setCursor(0,0); lcd.print("Min. Fim"); lcd.setCursor(0,1); lcd.print(minfim); break; case 6: //==================== state 6 lcd.setCursor(0,0); lcd.print("Alarme:"); break; case 7: //==================== state 7 lcd.setCursor(0,0); lcd.print("Segundos:"); lcd.setCursor(0,1); lcd.print( millis()/1000 , DEC); // mostra os segundos na tela lcd.print(" s"); lcd.print(" "); lcd.print(millis()/86400000, DEC); // mostra os dias na tela lcd.print(" dias"); break; default: ; } }…
CD onde pretendo ter na primeira tela após ser acionado por um botão "bverde" uma mensagem com o nome da máquina passando então 1 segundo irá mostrar a quantidade a ser envasada. A quantidade será o valor digitado no Keypad;
- Após o valor ser digitado pelo keypad uma segunda tela é mostrada, nessa tela será contada a quantidade de envasada e pressionando o "bamarelo" muda a tela para a terceira tela onde irá mostrar o nível do tanque de armazenamento, pressionando o "bamarelo" novamente ele volta para a segunda tela, ou seja o "bamarelo" irá funcionar como um botão de opões que transita entre essas duas telas;
- Usando um decrementador quero que o mesmo decremente o valor digitado na tela 1 mostrando a mensagem de que o Lote esta pronto e que se deve inserir um novo valor;
- Um terceiro botão "bvermelho" seria o botão de emergência, ou seja se pressionado a máquina trava.
- Todo esse programa foi baseado em exemplos e projetos que encontrei aqui no fórum e em outros sites.
Segue o Programa:
//========================================================================
#include <Keypad.h>#include <LiquidCrystal.h> LiquidCrystal lcd(22,23,24,25,26,27); // DECLARAÇÃO DOS PINOS DO LCD NO ARDUINO
// DEFINIÇÃO DOS BOTÕES - VERDE. VERMELHO, AMARELO#define bverde A1 // Os pinos analógicos podem ser#define bamarelo A2 // usados como digitais, bastando#define bvermelho A3 // referenciá-los por A0, A1..#define bDown A4
#define bverde0 90 // Valor de referência que a#define bamarelo0 91 // função CheckButton() passa#define bvermelho0 92 // indicando que um botão foi#define bDown0 93 // solto
boolean averde, aamarelo, avermelho, aDown; // Grava o ultimo valor lidos nos botões.// Utilizado pela função Checkbutton p/ identificar quando há uma alteração no estado do pino dos botões
// DEFINIÇÃO DOS PINOS E VALORES PARA O SENSOR, ESTEIRA E BOMBAint contador = 0; int Sensor = 0; int sensorPin = A0; int MotorEsteira = 11;int MotorBomb= 12;int EstadoMotor=0;int EstadoSensor=1;int LED1=8;int LED2=9;int LED3=10;int LED4=2;int buzzer=7;int variavel; // VARIAVEL A SER ALTERADA PELO MENUchar state=1; // VARIÁVEL QUE GUARDA POSIÇÃO ATUAL DO MENUint dec=-1;int i=0;
const byte LIN = 4; // TECLADO POSSUI 4 LINHASconst byte COL = 3; //TECLADO POSSUI 3 COLUNASchar keys[LIN][COL] = { {//MATRIZ CORRESPONDENTE AOS CARACTERES DO KEYPAD '1','2','3' } , { '4','5','6' } , { '7','8','9' } , { '*','0','#' }};byte LinPins[LIN] = { 28,29,30,31}; //PINOS DO ARDUINO CORRESPONDENTES AS COLUNASbyte ColPins[COL] = { 32,33,34}; //E AS LINHAS DA MATRIZ
Keypad keypad = Keypad( makeKeymap(keys), LinPins, ColPins, LIN, COL );char key = keypad.getKey();
void setup(){ lcd.begin(16, 2); // Iniciando a biblioteca do LCD Serial.begin(9600); // DEFINIÇÃO DA PORTA SERIAL
pinMode(bverde, INPUT); // Botões pinMode(bamarelo,INPUT); pinMode(bvermelho, INPUT); pinMode(bDown, INPUT);
digitalWrite(bverde, HIGH); // Aciona o pull-up interno digitalWrite(bamarelo,HIGH); // dos botões digitalWrite(bvermelho, HIGH); digitalWrite(bDown, HIGH);
pinMode(sensorPin, INPUT); //DEFINIR SE A VARIAVEL É ENTRADA(IMPUT) OU SAIDA(OUTPUT) DE DADOS pinMode(MotorEsteira, OUTPUT); pinMode(MotorBomb, OUTPUT); pinMode(EstadoSensor, INPUT); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(buzzer, OUTPUT);}
void loop(){ Sensor = digitalRead(sensorPin); // A VARIAVEL SENSOR CORRESPONDE AO sensorPin QUE ESTÁ LIGADO A PORTA ANALÓGICA A0 DO ARDUIN
if(Sensor == LOW){ digitalWrite(MotorEsteira, HIGH); // SE O SENSOR NÃO ESTIVER ACIONADO O MOTOR DA BOMBA ESTA PARADO E O LED1 ASCESO digitalWrite(LED1,HIGH); digitalWrite(LED2, LOW); digitalWrite(MotorBomb, LOW); digitalWrite(buzzer, LOW); } if(Sensor == HIGH) { // SE O SENSOR ESTIVER ACIONADO O MOTOR DA ESTEIRA ESTA PARADO E O LED1 APAGA digitalWrite(MotorEsteira, LOW); // O MOTOR DA BOMBA LIGA E O LED2 ASCENDE E UM TOQUE DE 2 SEGUNDO É digitalWrite(MotorBomb, HIGH); // ACIONADO PELO BUZZER digitalWrite(LED1, LOW); digitalWrite(LED2, HIGH);
delay(8000);//ESTE DELAY SERVE PARA A BOMBA JOGAR 200ml DE AGUA NA GARRAFA contador++; Sensor == !Sensor; //O SINAL DO SENSOR É INVERTIDO PARA A FUNÇAO RETORNAR DE ONDE ESTAVA } EstadoSensor = digitalRead(sensorPin); // O SINAL DO SENSOR É MOSTRADO NO SERIAL MONITOR Serial.println(Sensor);
if(EstadoSensor == HIGH){ // A FUNÇAO RETORNA AO ESTADO INICIAL digitalWrite(MotorEsteira, HIGH); digitalWrite(MotorBomb, LOW); digitalWrite(LED1, HIGH); digitalWrite(LED2, LOW); digitalWrite(buzzer,LOW); delay(2000); }
switch (state) { // Define checa qual tela atual
case 1: // executado quando na TELA 1 switch (CheckButton()) {
case bverde: lcd.setCursor(0,0); lcd.print("Maquina Envase"); lcd.setCursor(0,2); lcd.print("Eng. Mecatronica"); delay(5000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Controle Prod.");
Set_state(1); break; case bamarelo: lcd.clear(); Set_state(2); // antes de mudar de tela, é necessário limpar o break; lcd.clear(); Set_state(3); // display com a função lcd.clear() break; lcd.clear(); Set_state(1); break; default: // Caso nenhum botão tenha sido apertado, ela executa a set_state Set_state(1); // mesmo assim para atualizar o display. } break;
case 2: // executado quando na TELA 2 switch (CheckButton()) { case bverde: lcd.clear(); Set_state(1); break; case bamarelo: // lcd.clear(); Set_state(3); break; lcd.clear(); Set_state(1); break; lcd.clear(); Set_state(2); break; default: Set_state(2); } break;
case 3: // executado quando na TELA 3 switch (CheckButton()) { case bverde: lcd.clear(); Set_state(1); case bamarelo: lcd.clear(); Set_state(2); break; lcd.clear(); Set_state(3); break; lcd.clear(); Set_state(1); break; default: Set_state(3); } break;
case 4: // executado quando na TELA 4 switch (CheckButton()) { case bamarelo: lcd.clear(); Set_state(1); break; default: Set_state(1); } break;
default: ; }}// FIM DO LOOP
char CheckButton() { if (averde!=digitalRead(bverde)) { averde=!averde; if (averde) return bverde0; else return bverde; } else if (aamarelo!=digitalRead(bamarelo)) { aamarelo=!aamarelo; if (aamarelo) return bamarelo0; else return bamarelo; } else if (avermelho!=digitalRead(bvermelho)) { avermelho=!avermelho; if (avermelho) return bvermelho0; else return bvermelho; } else if (aDown!=digitalRead(bDown)) { aDown=!aDown; if (aDown) return bDown0; else return bDown; } else return 0;}
void PCP() // FUNÇÃO QUE DEFINE A QUANTIDADE DE GARRAFAS A SEREM ENVASADAS NO DIA{ char key = keypad.getKey(); if (key != NO_KEY){ lcd.setCursor(i,2); lcd.print(key); i++; }}
void Set_state(char index) { state = index; // Atualiza a variável state para a nova tela switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente
case 1: //==================== state 1 PCP(); break; case 2: //==================== state 2
lcd.setCursor(0,0); lcd.print("Qnt. Envasada:"); lcd.setCursor(0,1); lcd.print(contador); // mostra os segundos na tela lcd.print(" garrafas"); delay(20);
// if(contador==key){ // lcd.setCursor(0,0); // lcd.print("Lote Pronto!"); // lcd.setCursor(0,1); // lcd.print("Insira Novo"); // } break; case 3: //==================== state 3 lcd.setCursor(0,0); lcd.print("Nivel Tanque"); lcd.setCursor(1,2); lcd.print("%"); break; case 4: //==================== state 4
break; default: ; }}…
controlo por potenciômetro e quando chego no angulo q eu quero aperto um botão na placa shield e ele grava na eprom esse valor e vou fazendo ate pegar o objeto e levar para outro lugar, quando termino aperto outro botão que repeti os movimentos que gravei e tá funcionando só que ele repeti 4x de boa depois ele perde um movimento e começa a fazer movimentos que não havia gravado, gostaria de saber pq acontece depois da quarta repetição! alguem pode me ajudar não manjo de programação e não sei se o código esta correto,!
Placa Shield
Programação do Braço Robótico
#include <Servo.h> #include <EEPROM.h> // Biblioteca
Servo Garra; Servo Ggarra; Servo Lgarra; Servo Cotovelo; Servo Ombro; Servo Base; int buzzer = 7; int state = LOW; int state1 = LOW; int button = 3; int button1 = 2; int potgarra = 0; //Canal Analógico A0 int potggarra = 1; //Canal Analógico A1 int potlgarra = 2; //Canal Analógico A2 int potombro = 3; //Canal Analógico A3 int potcot = 4; //Canal Analógico A4 int potbase = 5; //Canal Analógico A5 int valbase; // Constante p/ valor do ângulo servomotor Base int valombro; // Constante p/ valor do ângulo servomotor Ombro int valcot; // Constante p/ valor do ângulo servomotor Cotovelo int valgarra; // Constante p/ valor do ângulo servomotor Garra int valggarra; // Constante p/ valor do ângulo servomotor Giro da Garra int vallgarra; // Constante p/ valor do ângulo servomotor Levantar Garra int addr = 0; // Endereço de escrita na memória int cont; int address = 0; // endereço de leitura na memória byte value; // valor lido da EEPROM
void setup() { pinMode(button, INPUT); pinMode(button1, INPUT); pinMode(buzzer, OUTPUT); Garra.attach(13); Ggarra.attach(12); Lgarra.attach(11); Ombro.attach(10); Cotovelo.attach(9); Base.attach(8); Serial.begin(9600); } void loop(){ state=digitalRead(button); // Se o botão for pressionado grava a posição dos servos if(state==HIGH){ digitalWrite(buzzer, HIGH); //Liga sinal de aviso do buzzer delay(100); digitalWrite(buzzer, LOW); //desliga sinal de aviso do buzzer delay(100); valbase= analogRead(potbase); // Lê e o valor do potenciometro valbase= map(valbase, 0, 1023, 0, 179); // Converte o valor lido p/ respetiva referência entre (0° a 180°) EEPROM.write(addr, valbase); // Grava o valor lido na EEPROM Serial.print(addr); //Printa o endereço e os respectivos ângulos para cada servomotor Serial.println(" - Endereço"); Serial.println("Base"); Serial.println(valbase); addr = addr + 1; //Incremento p/ o proximo endereço delay(100);
valombro= analogRead(potombro); // valombro= map(valombro, 0, 1023, 53, 90); EEPROM.write(addr, valombro); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Ombro"); Serial.println(valombro); addr = addr + 1; delay(100);
valcot = analogRead(potcot); valcot = map(valcot, 0, 1023, 48, 158); EEPROM.write(addr, valcot); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Cotovelo"); Serial.println(valcot); addr = addr + 1; delay(100);
valgarra= analogRead(potgarra); valgarra= map(valgarra, 0, 1023, 34, 110); EEPROM.write(addr, valgarra); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Garra"); Serial.println(valgarra); addr = addr + 1; delay(100); valggarra= analogRead(potggarra); // valggarra= map(valgarra, 0, 1023, 0, 179); EEPROM.write(addr, valggarra); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Ggarra"); Serial.println(valggarra); addr = addr + 1; delay(100);
vallgarra= analogRead(potlgarra); // vallgarra= map(valgarra, 0, 1023, 5, 90); EEPROM.write(addr, vallgarra); Serial.print(addr); Serial.println(" - Endereço"); Serial.println("Lgarra"); Serial.println(vallgarra); addr = addr + 1; delay(100);
if (addr == 1024){ // Aviso para limite de posições salvas na EEPROM delay(10); digitalWrite(buzzer, HIGH); delay(10); digitalWrite(buzzer, LOW); delay(10); digitalWrite(buzzer, HIGH); delay(10); digitalWrite(buzzer, LOW); delay(10); } } else { //leitura do analogico valbase= analogRead(potbase); //Lê o valor do potenciometro de ( 0 - 1023) valbase= map(valbase, 0, 1023, 0, 179); //converte o valor lido de ( 0 - 1023) p/ (0 °– 180°) Base.write(valbase);
valombro = analogRead(potombro); valombro = map(valombro, 0, 1023, 53, 90); Ombro.write(valombro);
valcot = analogRead(potcot); valcot = map(valcot, 0, 1023, 48, 158); Cotovelo.write(valcot);
valgarra = analogRead(potgarra); valgarra = map(valgarra, 0, 1023, 34, 110); Garra.write(valggarra);
valggarra = analogRead(potggarra); valggarra = map(valggarra, 0, 1023, 0, 179); Ggarra.write(valggarra);
vallgarra = analogRead(potlgarra); vallgarra = map(vallgarra, 0, 1023, 5, 90); Lgarra.write(vallgarra);
} state1=digitalRead(button1); // Botão p/ acionamento das movimentações gravadas if(state1==HIGH){ digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW); delay(100); digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW); delay(100); Play(); //Chamada da função p/ movimentar } } void movServo(Servo &s, int ANGfinal, int veloc){ int ANGinicial = s.read(); // lê a posição atual do servo e o coloca como o angulo inicial de movimento if(ANGinicial > ANGfinal){ for(int i= ANGinicial; i > ANGfinal; i--){ //decremanta 1º grau s.write(i); // 'escreve' o valor 'i' no servo selecionado delay(veloc); // tempo de espera. } } else{ for(int i= ANGinicial; i <= ANGfinal; i++){ //incremanta 1º grau s.write(i); // 'escreve' o valor 'i' no servo selecionado delay(veloc); // tempo de espera. } } } void Play(){ // Função de movimento automático dos servos delay(1000); state1=digitalRead(button1); while(state1==LOW){ state1=digitalRead(button1); if(state1==HIGH){ zerar(); delay(100); } int l; LDR=0; //Zera a variável LDR for(l=0;l<10;l++){ //Faz 10 vezes a leitura do sensor cont=analogRead(sensor); //Lê o valor do sensor e guarda na variável LDR LDR = LDR+cont; //Armazenamento na varíavel LDR o valor lido + o valor anterior delay(10); //Delay se 10 milissegundos } LDR=LDR/10; //Divide o valor armazenado por 10 Serial.println(LDR); //Imprime o valor do LDR
if(LDR > 80){ // Se o valor do LDR for maior ou igual a 400 movServo(Base, valbase, 15); movServo(Ombro, valombro, 15); movServo(Cotovelo, valcot, 15); movServo(Garra, valgarra, 15); Serial.println("Home Position"); delay(100); } if(LDR < 400){ int j; address=0; addr=addr-1; Serial.println("addr"); Serial.println(addr); for(j=0; j<addr; j+=4){ value = EEPROM.read(address); // Leitura da EEPROM movServo(Base, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Base"); Serial.print(value, DEC); Serial.println(); address = address + 1; delay(100); value = EEPROM.read(address); movServo(Ombro, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Ombro"); Serial.print(value, DEC); Serial.println(); address = address + 1; delay(100); value = EEPROM.read(address); movServo(Cotovelo, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Cotovelo"); Serial.print(value, DEC); Serial.println(); address = address + 1; delay(100); value = EEPROM.read(address); movServo(Garra, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Garra"); Serial.print(value, DEC); Serial.println(); delay(100); address = address + 1; value = EEPROM.read(address); movServo(Ggarra, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Giro da Garra"); Serial.print(value, DEC); Serial.println(); delay(100); address = address + 1; value = EEPROM.read(address); movServo(Lgarra, value, 15); delay(100); Serial.print(address); Serial.println(" - Posicao Levanta Garra"); Serial.print(value, DEC); Serial.println(); delay(100); address = address + 1; } } } } void zerar(){ // Zera o endereço da EEPROM p/ realizar novas gravações digitalWrite(buzzer, HIGH); // Aviso p/ realizar novas gravações delay(100); digitalWrite(buzzer, LOW); delay(100); digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW); delay(100); addr=0; Serial.print("Modo Gravar");…
logy/rest/1.0/file/get/1798908783?profile=original
também não funcionou!!
Aliás, as pastas de instalação do meu arduino ide não tem a pasta Utility citada no tutorial, pelo menos não como foi citada: Arduino\Libraries>Ethernet>Utility
No meu caso, tenho uma pasta Utility no seguinte caminho: Arduino\libraries\Ethernet\src\utility
Seria para substituir os arquivos nesta pasta?
De qualquer forma, já tentei fazer isso e sempre dá um erro na hora de compilar o código, que é o seguinte:
INICIO
Arduino: 1.6.4 (Windows 8.1), Placa:"Arduino Uno"
C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp: In member function 'int EthernetClass::begin(uint8_t*)':C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp:19:24: error: 'SPI_ETHERNET_SETTINGS' was not declared in this scope SPI.beginTransaction(SPI_ETHERNET_SETTINGS); ^C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp: In member function 'void EthernetClass::begin(uint8_t*, IPAddress, IPAddress, IPAddress, IPAddress)':C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp:68:24: error: 'SPI_ETHERNET_SETTINGS' was not declared in this scope SPI.beginTransaction(SPI_ETHERNET_SETTINGS); ^C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp: In member function 'int EthernetClass::maintain()':C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp:89:30: error: 'SPI_ETHERNET_SETTINGS' was not declared in this scope SPI.beginTransaction(SPI_ETHERNET_SETTINGS); ^C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp: In member function 'IPAddress EthernetClass::localIP()':C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp:107:24: error: 'SPI_ETHERNET_SETTINGS' was not declared in this scope SPI.beginTransaction(SPI_ETHERNET_SETTINGS); ^C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp: In member function 'IPAddress EthernetClass::subnetMask()':C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp:116:24: error: 'SPI_ETHERNET_SETTINGS' was not declared in this scope SPI.beginTransaction(SPI_ETHERNET_SETTINGS); ^C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp: In member function 'IPAddress EthernetClass::gatewayIP()':C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Ethernet.cpp:125:24: error: 'SPI_ETHERNET_SETTINGS' was not declared in this scope SPI.beginTransaction(SPI_ETHERNET_SETTINGS); ^Erro compilando.
Este relatório deveria ter mais informações "Mostrar saída verbosa durante a compilação" habilitado em Arquivo > Preferências.
FIM
O Sketch que estou tentando carregar ou compilar é esse:
#include <SPI.h>#include <Ethernet.h>// Enter a MAC address and IP address for your controller below.// The IP address will be dependent on your local network:byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x83, 0xEA };IPAddress ip(192,168,0,120);
// Initialize the Ethernet server library// with the IP address and port you want to use // (port 80 is default for HTTP):EthernetServer server(80);int LEDpin = 13;String readString = String(30);String state = String(3);
void setup(){// start the Ethernet connection and the server:Ethernet.begin(mac, ip);
//Configura o PINO 13 com saída pinMode(LEDpin,OUTPUT);
//Iniciar o PINO 8 0VdigitalWrite(LEDpin,LOW);state = "OFF";}void loop(){// listen for incoming clients//server.available()= Ler total de bytes disponível no bufferEthernetClient client = server.available();
if (client) {// an http request ends with a blank lineboolean currentLineIsBlank = true;// client.connected() = verifica se está conectado 1 0u 0
while (client.connected()) {
if (client.available()) {//mostra o códico ASCII decimal do q está lendo char c = client.read();
// if you've gotten to the end of the line (received a newline// character) and the line is blank, the http request has ended,// so you can send a replyif (readString.length() < 30) {readString.concat(c);}if (c == '\n' && currentLineIsBlank) {// send a standard http response headerint LED = readString.indexOf("LED=");if (readString.substring(LED,LED+5) == "LED=T") {digitalWrite(LEDpin,HIGH);state = "ON";}else if (readString.substring(LED,LED+5) == "LED=F") {digitalWrite(LEDpin,LOW);state = "OFF";}
client.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html");client.println();
client.print("LED is ");client.print(state);client.print("<br><br>");
if (state == "ON") {client.println("<a href=\"./?LED=F\">Turn Off<a>");}else {client.println("<a href=\"./?LED=T\">Turn On<a>");}
break;}if (c == '\n') {// you're starting a new linecurrentLineIsBlank = true;} else if (c != '\r') {// you've gotten a character on the current linecurrentLineIsBlank = false;}}}// give the web browser time to receive the datadelay(1);readString = "";// close the connection:client.stop();}}
Se puderem me ajudar, fico muito agradecido.
Tenho um Ethernet Shield que parece não funcionar. Daí comprei um Garagino + Mini Ethernet Garagino e também continuo com problemas para fazer alguns testes. :(
…
se sim acende se não você pode pular para o próximo menu acender a luz do quarto .) mais coloquei outros menus como aumentar volume ou abaixar e aumentar ou abaixar a temperatura do ar-condicionado com o led ir emissor maisai encontrei um problema quando altero o volume automaticamente altera o da temperatura e não estou conseguindo separar esses parâmetros ..
Abaixo segue o sketch :
#include <LiquidCrystal.h>
#include <IRremote.h>
IRsend irsend; // Variável para poder enviar o código a TV
const int ledIR = 13; // Pino onde iremos conectar o LED emissor de infravermelho
int armazenavalor = 0;
// Pinos de controle dos reles
int pinorele1 = 10; //Pino do Arduino ligado ao IN1 da placa de relés
int pinorele2 = 9; //Pino do Arduino ligado ao IN2 da placa de relés
int pinorele3 = 8; //Pino do Arduino ligado ao IN3 da placa de relés
int pinorele4 = 7; //Pino do Arduino ligado ao IN4 da placa de relés
int estadorele1 = HIGH; //Armazena o estado do relé 1
int estadorele2 = HIGH; //Armazena o estado do relé 2
int estadorele3 = HIGH; //Armazena o estado do relé 3
int estadorele4 = HIGH; //Armazena o estado do relé 4
// Definição dos pinos dos botões
#define bMenu A0 // Os pinos analógicos podem ser
#define bChange A1 // usados como digitais, bastando
#define bUp A2 // referenciá-los por A0, A1..
#define bDown A3
#define bMenu0 90 // Valor de referência que a
#define bChange0 91 // função CheckButton() passa
#define bUp0 92 // indicando que um botão foi
#define bDown0 93 // solto
boolean aMenu, aChange, aUp, aDown; // Grava o ultimo valor lidos nos botões.
// Utilizado pela função Checkbutton p/ identificar quando há uma alteração no estado do pino dos botões
int variavel; // variavel a ser alterada pelo menu
char state=1; // variável que guarda posição atual do menu
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Declaração do objeto tipo lcd
//============================================== SETUP
void setup()
{
pinMode(ledIR ,OUTPUT); // Definimos o LED de infra como de saída
Serial.begin(9600); // Iniciamos o Serial Monitor
lcd.begin(16, 2); // Iniciando a biblioteca do LCD
pinMode(bMenu, INPUT); // Botões
pinMode(bChange,INPUT);
pinMode(bUp, INPUT);
pinMode(bDown, INPUT);
digitalWrite(bMenu, HIGH); // Aciona o pull-up interno
digitalWrite(bChange,HIGH); // dos botões
digitalWrite(bUp, HIGH);
digitalWrite(bDown, HIGH);
pinMode(pinorele1, OUTPUT); //Define os pino dos reles como saída
pinMode(pinorele2, OUTPUT);
pinMode(pinorele3, OUTPUT);
pinMode(pinorele4, OUTPUT);
digitalWrite(pinorele1, estadorele1); //Coloca os pinos dos reles em
digitalWrite(pinorele2, estadorele2); //estado alto (rele desligado)
digitalWrite(pinorele3, estadorele3);
digitalWrite(pinorele4, estadorele4);
}
//==============================================
//============================================== LOOP
void loop()
{
switch (state) { // Define checa qual tela atual
// Tela de controle de acesso
case 1: // executado quando na TELA 1
switch (CheckButton()) {
case bChange:
break;
case bUp:
lcd.clear(); Set_state(1);
break;
case bDown:
lcd.clear(); Set_state(2);
break;
default:
Set_state(1);
}
break;
case 2: // executado quando na TELA 2 APAGAR LUZ ?
switch (CheckButton()) {
case bChange:
estadorele1 = !estadorele1;
//Aciona rele 1 e liga e desliga a luz
digitalWrite(pinorele1, estadorele1);
break;
case bUp:
lcd.clear(); Set_state(1);
break;
case bDown:
lcd.clear(); Set_state(3);
break;
default:
Set_state(2);
}
break;
case 3: // executado quando na TELA 3 MODO CINEMA
switch (CheckButton()) {
case bChange:
estadorele2 = !estadorele2;
//Aciona rele 2 e liga o retro projetor
digitalWrite(pinorele2, estadorele2);
break;
case bUp:
lcd.clear(); Set_state(2);
break;
case bDown:
lcd.clear(); Set_state(4);
break;
default:
Set_state(3);
}
break;
case 4: // executado quando na TELA 4 AUMENTAR E ABAIXAR VOLUME
switch (CheckButton()) {
case bMenu:
if (digitalRead(bMenu) == HIGH)
{
irsend.sendRC6(0x80542711, 36); } // Código que será enviado a TV para aumentar o volume
lcd.clear(); variavel++;
break;
case bChange:
if (digitalRead(bChange) == HIGH)
{
irsend.sendRC6(0x80542710, 36); } // Código que será enviado a TV para diminuir o volume
lcd.clear(); variavel--;
break;
case bUp:
lcd.clear(); Set_state(3);
break;
case bDown:
lcd.clear(); Set_state(5);
break;
default:
Set_state(4);
}
break;
case 5: // executado quando na TELA 5 PASSAR E VOLTAR CANAL
switch (CheckButton()) {
case bChange:
if (digitalRead(bChange) == HIGH) { // Se o botão for pressionado ele irá enviar o código para PASSAR o canal na TV
irsend.sendRC6(0x80542720, 36); }
lcd.clear(); variavel++;
break;
case bMenu:
if (digitalRead(bMenu) == HIGH) {
irsend.sendRC6(0x8054A721, 36); } // Se o botão for pressionado ele irá enviar o código para diminuir o canal na TV
lcd.clear(); variavel--;
break;
case bUp:
lcd.clear(); Set_state(4);
break;
case bDown:
lcd.clear(); Set_state(6);
break;
default:
Set_state(5);
}
break;
case 6: // executado quando na TELA 3 Ar-condicionado
switch (CheckButton()) {
case bChange:
estadorele3 = !estadorele3;
//Aciona rele 3 e liga o retro projetor
digitalWrite(pinorele3, estadorele3);
break;
case bUp:
lcd.clear(); Set_state(5);
break;
case bDown:
lcd.clear(); Set_state(7);
break;
default:
Set_state(6);
}
break;
case 7: // executado quando na TELA 5 Abaixar e aumentar o frio
switch (CheckButton()) {
case bChange:
if (digitalRead(bChange) == HIGH) { // Se o botão for pressionado ele irá enviar o código para PASSAR o canal na TV
irsend.sendNEC(0xFFE01F, 32); }
lcd.clear(); variavel++;
break;
case bMenu:
if (digitalRead(bMenu) == HIGH) {
irsend.sendNEC(0xFFA857, 32); } // Se o botão for pressionado ele irá enviar o código para diminuir o canal na TV
lcd.clear(); variavel--;
break;
case bUp:
lcd.clear(); Set_state(6);
break;
case bDown:
lcd.clear(); Set_state(7);
break;
default:
Set_state(7);
}
}
}
//============================================== FIM da função LOOP
//==============================================
//============================================== CheckButton
char CheckButton() {
if (aMenu!=digitalRead(bMenu)) {
aMenu=!aMenu;
if (aMenu) return bMenu0; else return bMenu;
} else
if (aChange!=digitalRead(bChange)) {
aChange=!aChange;
if (aChange) return bChange0; else return bChange;
} else
if (aUp!=digitalRead(bUp)) {
aUp=!aUp;
if (aUp) return bUp0; else return bUp;
} else
if (aDown!=digitalRead(bDown)) {
aDown=!aDown;
if (aDown) return bDown0; else return bDown;
} else
return 0;
}
//========================================================
//============================================== Set_state
void Set_state(char index) {
state = index; // Atualiza a variável state para a nova tela
switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente
case 1: //==================== state 1
lcd.setCursor(0,0);
lcd.print("Controle Acessos");
lcd.setCursor(6,1);
lcd.print( "MENU"); // mostra os segundos na tela
break;
case 2: //==================== state 2
lcd.setCursor(0,0);
lcd.print("Estado");
lcd.setCursor(2,1);
lcd.print("da Luz ?");
break;
case 3: //==================== state 3
lcd.setCursor(2,0);
lcd.print("Modo Cinema");
lcd.setCursor(5,1);
lcd.print("Acessar ?");
break;
case 4: //==================== state 4
lcd.setCursor(0,0);
lcd.print("Volume:");
lcd.setCursor(0,1);
lcd.print(variavel, DEC); // mostra o valor de "variavel"
break;
case 5: //==================== state 5
lcd.setCursor(0,0);
lcd.print("Canal:");
lcd.setCursor(0,1);
lcd.print(variavel, DEC); // mostra o valor de "variavel"
break;
case 6: //==================== state 6
lcd.setCursor(0,0);
lcd.print("Ar-condicionado");
lcd.setCursor(5,1);
lcd.print("Estado ?");
break;
case 7: //==================== state 7
lcd.setCursor(0,0);
lcd.print("Temperatura:");
lcd.setCursor(0,1);
lcd.print(variavel, DEC); // mostra o valor de "variavel"
break;
default: ;
}
}
se tiver uma ideia sera bem vinda kk
ISSO TA BASTANTE INTERESSANTE KK
…
=============>
#include <SPI.h>
#include <Ethernet.h>#include <SD.h>#include <RelayBoard.h>// size of buffer used to capture HTTP requests#define REQ_BUF_SZ 60#define date 6#define strobe 3#define clock 2#define numberboards 1
RelayBoard relay(date, strobe, clock, numberboards);
int i;int j;
// MAC address from Ethernet shield sticker under boardbyte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x42, 0x3E };IPAddress ip(192,168,2,99); // IP address, may need to change depending on networkEthernetServer server(80); // create a server at port 80File webFile; // the web page file on the SD cardchar HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated stringchar req_index = 0; // index into HTTP_req bufferboolean LED_state[6] = {0}; // stores the states of the LEDs
void setup(){ // disable Ethernet chip pinMode(10, OUTPUT); digitalWrite(10, HIGH); Serial.begin(9600); // for debugging // initialize SD card Serial.println("Initializing SD card..."); if (!SD.begin(4)) { Serial.println("ERROR - SD card initialization failed!"); return; // init failed } Serial.println("SUCCESS - SD card initialized."); // check for index.htm file if (!SD.exists("index.htm")) { Serial.println("ERROR - Can't find index.htm file!"); return; // can't find index file } Serial.println("SUCCESS - Found index.htm file."); // switch on pin 2 pinMode(A2, INPUT); pinMode(A3, INPUT); // LEDs Ethernet.begin(mac, ip); // initialize Ethernet device server.begin(); // start to listen for clients}
void loop(){ EthernetClient client = server.available(); // try to get client
if (client) { // got client? boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { // client data available to read char c = client.read(); // read 1 byte (character) from client // limit the size of the stored received HTTP request // buffer first part of HTTP request in HTTP_req array (string) // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1) if (req_index < (REQ_BUF_SZ - 1)) { HTTP_req[req_index] = c; // save HTTP request character req_index++; } // last line of client request is blank and ends with \n // respond to client only after last line received if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); // remainder of header follows below, depending on if // web page or XML page is requested // Ajax request - send XML file if (StrContains(HTTP_req, "ajax_inputs")) { // send rest of HTTP header client.println("Content-Type: text/xml"); client.println("Connection: keep-alive"); client.println(); SetLEDs(); // send XML file containing input states XML_response(client); } else { // web page request // send rest of HTTP header client.println("Content-Type: text/html"); client.println("Connection: keep-alive"); client.println(); // send web page webFile = SD.open("index.htm"); // open web page file if (webFile) { while(webFile.available()) { client.write(webFile.read()); // send web page to client } webFile.close(); } } // display received HTTP request on serial port Serial.print(HTTP_req); // reset buffer index and all buffer elements to 0 req_index = 0; StrClear(HTTP_req, REQ_BUF_SZ); break; } // every line of text received from the client ends with \r\n if (c == '\n') { // last character on line of received text // starting new line with next character read currentLineIsBlank = true; } else if (c != '\r') { // a text character was received from client currentLineIsBlank = false; } } // end if (client.available()) } // end while (client.connected()) delay(1); // give the web browser time to receive the data client.stop(); // close the connection } // end if (client)}
// checks if received HTTP request is switching on/off LEDs// also saves the state of the LEDsvoid SetLEDs(void){ // LED 1 (pin 6) if (StrContains(HTTP_req, "LED1=1")) { LED_state[0] = 1; // save LED state relay.set(0,0,1); } else if (StrContains(HTTP_req, "LED1=0")) { LED_state[0] = 0; // save LED state relay.set(0,0,0); } // LED 2 (pin 7) if (StrContains(HTTP_req, "LED2=1")) { LED_state[1] = 1; // save LED state relay.set(0,1,1); } else if (StrContains(HTTP_req, "LED2=0")) { LED_state[1] = 0; // save LED state relay.set(0,1,0); } // LED 3 (pin 8) if (StrContains(HTTP_req, "LED3=1")) { LED_state[2] = 1; // save LED state relay.set(0,2,1); } else if (StrContains(HTTP_req, "LED3=0")) { LED_state[2] = 0; // save LED state relay.set(0,2,0); } // LED 4 (pin 9) if (StrContains(HTTP_req, "LED4=1")) { LED_state[3] = 1; // save LED state relay.set(0,3,1); } else if (StrContains(HTTP_req, "LED4=0")) { LED_state[3] = 0; // save LED state relay.set(0,3,0); } // LED 5 (pin 5) if (StrContains(HTTP_req, "LED5=1")) { LED_state[4] = 1; // save LED state relay.set(0,4,1); } else if (StrContains(HTTP_req, "LED5=0")) { LED_state[4] = 0; // save LED state relay.set(0,4,0); } // LED 6 (pin 3) if (StrContains(HTTP_req, "LED6=1")) { LED_state[5] = 1; // save LED state relay.set(0,5,1); } else if (StrContains(HTTP_req, "LED6=0")) { LED_state[5] = 0; // save LED state relay.set(0,5,0); }}
// send the XML file with analog values, switch status// and LED statusvoid XML_response(EthernetClient cl){ cl.println("<?xml version = \"1.0\" ?>"); cl.println("<inputs>"); // read analog inputs cl.print("<analog>"); cl.print(analogRead(4)); cl.println("</analog>"); cl.print("<analog>"); cl.print(analogRead(5)); cl.println("</analog>");
// read switches cl.print("<switch>"); if (digitalRead(2)) {cl.print("ON");} else {cl.print("OFF");} cl.println("</switch>"); cl.print("<switch>"); if (digitalRead(A2)) {cl.print("ON");} else {cl.print("OFF");} cl.println("</switch>"); cl.print("<switch>"); if (digitalRead(A3)) {cl.print("ON");} else {cl.print("OFF");} cl.println("</switch>"); // checkbox LED states // LED1 cl.print("<LED>"); if (LED_state[0]) {cl.print("checked");} else {cl.print("unchecked");} cl.println("</LED>"); // LED2 cl.print("<LED>"); if (LED_state[1]) {cl.print("checked");} else {cl.print("unchecked");} cl.println("</LED>"); // LED3 cl.print("<LED>"); if (LED_state[2]) {cl.print("on");} else {cl.print("off");} cl.println("</LED>"); // LED4 cl.print("<LED>"); if (LED_state[3]) {cl.print("on");} else {cl.print("off");} cl.println("</LED>"); // LED5 cl.print("<LED>"); if (LED_state[4]) {cl.print("on");} else {cl.print("off");} cl.println("</LED>"); // LED6 cl.print("<LED>"); if (LED_state[5]) {cl.print("on");} else {cl.print("off");} cl.println("</LED>"); cl.print("</inputs>");}
// sets every element of str to 0 (clears array)void StrClear(char *str, char length){ for (int i = 0; i < length; i++) { str[i] = 0; }}
// searches for the string sfind in the string str// returns 1 if string found// returns 0 if string not foundchar StrContains(char *str, char *sfind){ char found = 0; char index = 0; char len;
len = strlen(str); if (strlen(sfind) > len) { return 0; } while (index < len) { if (str[index] == sfind[found]) { found++; if (strlen(sfind) == found) { return 1; } } else { found = 0; } index++; }
return 0;}
<==================================================>
<==================================================>
Quero adicionar esses dois arquivos que ficaram junto com o index no micro sd
"jquery.accordion.js"
"jquery.easing.1.3"…