Ir ao conteúdo

Posts recomendados

Postado
int ledPin5 = 5;
int ledPin6 = 6;
int ledPin7 = 7;
int ledPin8 = 8;
bool estado  = 0;
bool m,s,d,f = LOW;
char caracter;

void setup()
{
  Serial.begin(9600);
 
  pinMode(ledPin5, OUTPUT);
  pinMode(ledPin6, OUTPUT);
  pinMode(ledPin7, OUTPUT);
  pinMode(ledPin8, OUTPUT);
}
 
void loop()
{
  caracter = Serial.read();
  if(caracter == '1' && estado == 0)
  {
   m = !m;
   digitalWrite(ledPin5, m);
   estado = !estado;
   delay(10);
  }
  else if(caracter == '1' && estado == 1)
  {
   m = !m;
   digitalWrite(ledPin5, m);
   estado = !estado;
   delay(10);
  }
//------------------------------------------------
    else if(caracter == '2' && estado == 0)
      {
       s = !s;
       digitalWrite(ledPin6, s);
       estado = !estado;
       delay(10);
      }
      else if(caracter == '2' && estado == 1)
      {
       s = !s;
       digitalWrite(ledPin6, s);
       estado = !estado;
       delay(10);
      }
//------------------------------------------------
      else if(caracter == '3' && estado == 0)
        {
         d = !d;
         digitalWrite(ledPin7, d);
         estado = !estado;
         delay(10);
        }
        else if(caracter == '3' && estado == 1)
        {
         d = !d;
         digitalWrite(ledPin7, d);
         estado = !estado;
         delay(10);
        }
//------------------------------------------------
        else if(caracter == '4' && estado == 0)
          {
           f = !f;
           digitalWrite(ledPin8, f);
           estado = !estado;
           delay(10);
          }
          else if(caracter == '4' && estado == 1)
          {
            f = !f;
            digitalWrite(ledPin8, f);
            estado = !estado;
            delay(10);
          }
 
  delay(100);
}

Oi, boa noite, então.. estou precisando fazer o seguinte com arduino:

Eu preciso criar variáveis com números, porém, no caso, eu fico limitado com os números de 0 á 9, certo? Então, como eu faço para gerar variáveis com maiores, para que elas possam ser lidas em um ' if ', por exemplo?

 

Na prog acima, eu to  usando números de 1 até 4.. Mas futuramente eu tenho certeza que irei precisar passar do número 15...

  • Amei 1
Postado

@Gustavoo_      um char só pode armazenar 1 caractere mesmo , então para mais caracteres use uma string  ,  e aí você precisa incluir a biblioteca string.h , e também creio que não seja necessário verificar o estado , pois de qualquer forma ele será modificado invertendo o valor dele , e outra coisa que acredito que seria melhor é usar um switch , no lugar desses if's , para verificar o valor digitado e decidir o que fazer ,  mas não modificando muito seu código , poderia ser assim    :

#include <string.h>
int ledPin5  = 5  ; 
int ledPin6  = 6  ;
int ledPin7  = 7  ;
int ledPin8  = 8  ;
bool estado  = 0  ;
bool m,s,d,f = LOW;
char string[20]   ; /* até 20 digitos de zero a nove */

void setup(){
  Serial.begin(9600);
 
  pinMode(ledPin5, OUTPUT);
  pinMode(ledPin6, OUTPUT);
  pinMode(ledPin7, OUTPUT);
  pinMode(ledPin8, OUTPUT);
}
 
void loop(){
    string = Serial.read();
    if(strcmp(string,"1") == 0 && estado == 0){
        m = !m ;
        digitalWrite(ledPin5, m);
        estado = !estado;
        delay(10);
    }
    else{
        if(strcmp(string,"1") == 0 && estado == 1){
            m = !m;
            digitalWrite(ledPin5, m);
            estado = !estado;
            delay(10);
        }
        //------------------------------------------------
        else{
            if(strcmp(string,"2") == 0 && estado == 0){
                s = !s;
                digitalWrite(ledPin6, s);
                estado = !estado;
                delay(10);
            }
            else{
                if(strcmp(string,"2") == 0 && estado == 1){
                    s = !s;
                    digitalWrite(ledPin6, s);
                    estado = !estado;
                    delay(10);
                }
                //------------------------------------------------
                else{
                    if(strcmp(string,"3") == 0 && estado == 0){
                        d = !d;
                        digitalWrite(ledPin7, d);
                        estado = !estado;
                        delay(10);
                    }
                    else{
                        if(strcmp(string,"3") == 0 && estado == 1){
                            d = !d;
                            digitalWrite(ledPin7, d);
                            estado = !estado;
                            delay(10);
                        }
                        //------------------------------------------------
                        else{
                            if(strcmp(string,"4") == 0 && estado == 0){
                                f = !f;
                                digitalWrite(ledPin8, f);
                                estado = !estado;
                                delay(10);
                            }
                            else{
                                if(strcmp(string,"4") == 0 && estado == 1){
                                    f = !f;
                                    digitalWrite(ledPin8, f);
                                    estado = !estado;
                                    delay(10);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    delay(100);
}

 

  • Amei 1
Postado

Uiaa, obrigado :3

mas.. você pode me explicar o que é esse strcmp? kkkk

sou fã de aprender..

 

E estas mudanças de estado, é para que: Independente do estado em que o led esteja (no caso, seja ele aceso ou apagado), o programa faça essa alteração.. sla.. Fiz isso com um servo motor em outro projeto e foi o unico jeito q achei pra funcionar, ai resolvi implementar nessa programação também, mas se tiver alguma forma de eu melhorar isso, me diz ai, pf..

 

Agradeço desde já

  • Curtir 1
Postado

@devair1010 acabei de testar, e.. não, não funcionou ;-;

 

o erro:

 

C:\Users\Gustavoo\Desktop\TESTE_PHP_HTML\TESTE_PHP_HTML.ino: In function 'void loop()':

TESTE_PHP_HTML:20:12: error: incompatible types in assignment of 'int' to 'char [20]'

     string = Serial.read();

            ^

exit status 1
incompatible types in assignment of 'int' to 'char [20]'
 

            ^

  • Curtir 1
Postado

@Gustavoo_     se puder usar int , então poderia ser assim  :

#include <string.h>
#include <stdio.h>
int ledPin5  = 5  ; 
int ledPin6  = 6  ;
int ledPin7  = 7  ;
int ledPin8  = 8  ;
bool estado  = 0  ;
bool m,s,d,f = LOW;
int inteiro       ;

void setup(){
  Serial.begin(9600);
 
  pinMode(ledPin5, OUTPUT);
  pinMode(ledPin6, OUTPUT);
  pinMode(ledPin7, OUTPUT);
  pinMode(ledPin8, OUTPUT);
}
void loop(){
    inteiro = Serial.read();
    switch( inteiro ){
    case 1 :
        m = !m ;
        digitalWrite(ledPin5, m);
        delay(10);
        break;
    case 2 :    
        s = !s;
        digitalWrite(ledPin6, s);
        delay(10);
        break;
    case 3 :
        d = !d;
        digitalWrite(ledPin7, d);
        delay(10);
        break;
    case 4 :
        f = !f;
        digitalWrite(ledPin8, f);
        delay(10);
        break;
    }
    delay(100);
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!