Boa Tarde,

Estou crianado um projeto em que utilizo um rele para abrir um sensor.. A abertura deste sensor é feito quando clico em botões em uma pagina php. São 2 botões, quando no primeiro botão o sensor abre, e ele deve ser fechado quando a balança chegar a 250g. E quando clico no segundo botão o sensor abre e deve ser fechado quando a balança chegar a 500g. Juntei codigos que encontrei na net.. mas esta acontecendo o seguinte problema, quando em qualquer um dos dois botões, o sensor se fecha quando a balança fecha em 250g.

Será que conseguem me ajudar com essa programação? 

Segue em anexo,

  1. #include <SPI.h>
  2. #include <Ethernet.h>
  3.  
  4. //Configurações do Ethernet Shield
  5. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  6. byte ip[] = { 192,168,1, 90 }; // ip que o arduino assumirá
  7. byte gateway[] = { 192,168,1, 1 };  // ip do roteador
  8. byte subnet[] = { 255, 255, 0, 0 };
  9.  
  10. // String que representa o estado dos dispositivos
  11. char Luz[7] = "0000L#";
  12.  
  13. EthernetServer server(80); // Cria o servidor na porta 8081
  14.  
  15. // String onde é guardada as msgs recebidas
  16. char msg[7] = "0000L#";
  17.  
  18. float loadA = 0.173; //kg
  19. int analogvalA = 159; // Leitura analógico tomado com uma carga sobre a célula de carga
  20.  
  21. float loadB = 1.035; // kg
  22. int analogvalB = 834; // Leitura analógico tomado com uma carga sobre a célula de carga
  23.  
  24.  
  25. // Carregar o esboço de novo, e confirmar , que a partir da saída serial lendo agora quilos está correta , usando suas cargas conhecidos
  26.  
  27. float analogValueAverage = A3;
  28.  
  29. // Quantas vezes fazemos leituras ?
  30. long time = 0; //
  31. int timeBetweenReadings = 200; // Nós queremos uma leitura a cada 200 ms;
  32.  
  33.  
  34.  
  35.  
  36. float load;
  37.  
  38.  
  39. float analogToLoad(float analogval){
  40.  
  41.   // Usando um mapa - função personalizada, porque a função arduino mapa padrão utiliza apenas int
  42.  
  43.   float load = mapfloat(analogval, analogvalA, analogvalB, loadA, loadB);
  44.   return load;
  45. }
  46.  
  47. float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
  48. {
  49.   return (- in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  50. }
  51.  
  52.  
  53.  
  54.  
  55.  
  56. void setup() {
  57.   Ethernet.begin(mac, ip, gateway, subnet);
  58.   server.begin();
  59.  
  60.   pinMode(A4,OUTPUT);
  61.  
  62. }
  63.  
  64.  
  65. void loop() {
  66.  
  67.  
  68.  
  69.  
  70. botao1();  
  71. botao2();
  72.  
  73. }
  74.  
  75.  
  76. void botao1(){
  77.  
  78.  
  79.   EthernetClient client = server.available();
  80.  
  81.    
  82. int analogValue = analogRead(A3);
  83.  
  84.  
  85.   // Executando média - Nós suavizamos as leituras um pouco
  86.  
  87.  
  88.   analogValueAverage = 0.99*analogValueAverage + 0.01*analogValue;
  89.    
  90.  
  91.     load = analogToLoad(analogValueAverage);
  92.  
  93.  
  94.  
  95.  
  96.   // SE receber um caracter...
  97.   if (client) {
  98.     // guarda o caracter na string 'msg'
  99.     msg[1]=msg[2];
  100.     msg[2]=msg[3];
  101.     msg[3]=msg[4];
  102.     msg[4]=msg[5];
  103.     msg[5]=msg[6];
  104.     msg[6] = client.read();
  105.    
  106.     if (msg[6]=='#') {
  107.       switch(msg[5]) {
  108.         case 'R':
  109.          
  110.           // Se receber o comando 'R#' envia de volta o status dos
  111.           //   dispositivos. (Que é a string 'Luz')
  112.           client.write(Luz);
  113.         break;
  114.          
  115.  
  116.  
  117.  case 'P':
  118.  
  119.  
  120.       digitalWrite(A4, HIGH);
  121.    
  122.  
  123. break;
  124.       }
  125.  
  126.  
  127.      
  128.       }
  129.     }
  130.  
  131.  
  132.     if(load > 0.250 && load /span>0.500)
  133.     {
  134.          digitalWrite(A4, LOW);
  135.     }
  136.  
  137. }
  138.  
  139.  
  140.  
  141. void botao2(){
  142.  
  143.  
  144.   EthernetClient client = server.available();
  145.  
  146.    
  147. int analogValue = analogRead(A3);
  148.  
  149.  
  150.   // Executando média - Nós suavizamos as leituras um pouco
  151.  
  152.  
  153.   analogValueAverage = 0.99*analogValueAverage + 0.01*analogValue;
  154.    
  155.  
  156.     load = analogToLoad(analogValueAverage);
  157.  
  158.  
  159.  
  160.  
  161.   // SE receber um caracter...
  162.   if (client) {
  163.     // guarda o caracter na string 'msg'
  164.     msg[1]=msg[2];
  165.     msg[2]=msg[3];
  166.     msg[3]=msg[4];
  167.     msg[4]=msg[5];
  168.     msg[5]=msg[6];
  169.     msg[6] = client.read();
  170.    
  171.     if (msg[6]=='#') {
  172.       switch(msg[5]) {
  173.         case 'R':
  174.          
  175.           // Se receber o comando 'R#' envia de volta o status dos
  176.           //   dispositivos. (Que é a string 'Luz')
  177.           client.write(Luz);
  178.         break;
  179.          
  180.  
  181.  
  182.  case 'G':
  183.  
  184.  
  185.       digitalWrite(A4, HIGH);
  186.    
  187.  
  188. break;
  189.       }
  190.      
  191.  
  192.  
  193.      
  194.       }
  195.     }
  196.  
  197. if(load > 0.500)
  198.     {
  199.          digitalWrite(A4, LOW);
  200.     }
  201.  
  202. }

Exibições: 653

Anexos

Responder esta

Respostas a este tópico

Luis, encontrei 2 locais onde há erros. Na verdade fui eu quem sugeriu fazer desse jeito errado, mas deveria ter sido assim:

  1. if ( load > 0.250 && load < 0.500 && PrimeiroBotao == true )
  2.       {
  3.             digitalWrite(bot1, LOW);
  4.             PrimeiroBotao = false;  // antes estava PrimeiroBotao == false
  5.       }

O segundo local onde tem o mesmo erro é aqui:

  1. if( load > 0.500 && SegundoBotao == true )
  2.       {
  3.             digitalWrite(bot2, LOW);
  4.             SegundoBotao = false; // antes estava SegundoBotao == false
  5.       }

O erro está na transformação da variável em false, ali onde eu tinha dito pra vc colocar 2 sinais de igual, era pra ser um só. Usa-se o sinal de igual duplicado quando se quer comparar, assim como está no IF. Mas quando se deseja definir a variável, é um sinal só.

E aí Luiz, dê um feedback... ainda não deu certo?

Bom Dia, o Botão 1 funcionou, mas desse jeito parece que desabilitou o botão 2, não consigo abrir o corpo de borboleta por ele.

Luiz Felipe, aproveitando seu post ... pelo o que vi você está mandado informação para o arduino via socket com o php não é isso?

Qual a versão do seu php?

Seu ambiente está com wamp, xampp ou instalado apache php mysql separadamente?

Bom dia Manoel,

Exatamente, estou mandando informações via socket.

Estou trabalhando com o xampp

Qual a versão do seu xampp?

Eu tenho um projeto de envio de dados e recebimento via socket, funcionava 100% em 2013 .. ontem fui testar e nao funciona mais ... instalei xampp, wamp, easyphp, separadamente e nada ... sempre fiz que nao pode conectar ... ontem funcionou por alguns minutos pelo easyphp e depois começou a ocorrer o mesmo problema ... creio que seja a versão do php ou alguma zica do windows .. ja que corrompeu e eu so reparei ... se de tudo nao funcionar vou formatar o pc para ver ..

faça o seguinte,  poste o script php e também  a sua última versão do sketch

Olá Luiz Felipe,

   Cara, vi que a galera já respondeu sua duvida, agora fiquei curioso sobre uma coisa,  vi que o seu post ficou super bem apresentado e estruturado, com linhas e indicações numerais delas.

    Como você fez para sua postagem ficar assim ?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço