domingo, 27 de outubro de 2013

Armazenando dados pela Serial

Esse programa mostra como tratar informações vindas da serial, armazenando-as em variáveis do tipo char. A partir disso podemos tratar cada informação individualmente, executando assim uma função especifica para cada uma delas.

Ele começa lendo a serial, porem só  armazena os dados se o primeiro digito recebido for igual a ' abre chave ' ( { ), dai ele armazena os próximos sete caracteres. Se o sétimo carácter for igual a ' fecha chave ' ( } ), ele fecha a leitura da porta serial. Depois ele mostra os valores armazenados.

Como exemplo de tratamento dessas informações, programei sete leds para acender de acordo com o carácter que esta nas variáveis ' digx '.

ex: {000000}
{001100}
{100001}
{010010}
{101010}
{010101}
{111111}

// Declara variaveis globais
char data [7];
byte byte_received;
byte cont1 = 1;
char dig0,dig1,dig2,dig3,dig4,dig5,dig6,dig7;
int flag;
int cont;
void setup(){
  Serial.begin(9600);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
}

void loop(){
  flag=1;//    Ativa a leitura Serial
  while(Serial.available() > 0 && flag == 1){
    byte_received = Serial.read();
    if(byte_received == '{'){
      cont=0;
    }
    if(cont <=8){
      data[cont] = byte_received;
      cont=cont++;
    }
    // Aqui o programa armazena cada informacao q vem da serial
    // em uma varivel diferente.
    dig0 = data[0];
    dig1 = data[1];
    dig2 = data[2];
    dig3 = data[3];
    dig4 = data[4];
    dig5 = data[5];
    dig6 = data[6];
    dig7 = data[7];
    }
    if(dig7 == '}'){
      flag=0;
    }
    // O programa so ira armazenar os dados se o primeiro caracter
    // recebido for igual a abre chave { ,
    //e a ultima for igual a fecha chave } .
 
    // Aqui ele mostra os dados enviados. A apartir daqui eles
    // podem ser processados de acordo com o programa que vc ira
    // criar.
    if(dig0=='{' && dig7 =='}'){
      Serial.print(dig0);
      Serial.print(dig1);
      Serial.print(dig2);
      Serial.print(dig3);
      Serial.print(dig4);
      Serial.print(dig5);
      Serial.print(dig6);
      Serial.println(dig7);
    }
    if(dig1 == '1'){
      digitalWrite(2,HIGH);
    }
    if(dig1 == '0'){
      digitalWrite(2,LOW);
    }
        if(dig2 == '1'){
      digitalWrite(3,HIGH);
    }
    if(dig2 == '0'){
      digitalWrite(3,LOW);
    }
        if(dig3 == '1'){
      digitalWrite(4,HIGH);
    }
    if(dig3 == '0'){
      digitalWrite(4,LOW);
    }
        if(dig4 == '1'){
      digitalWrite(5,HIGH);
    }
    if(dig4 == '0'){
      digitalWrite(5,LOW);
    }
        if(dig5 == '1'){
      digitalWrite(6,HIGH);
    }
    if(dig5 == '0'){
      digitalWrite(6,LOW);
    }
        if(dig6 == '1'){
      digitalWrite(7,HIGH);
    }
    if(dig6 == '0'){
      digitalWrite(7,LOW);
    }
}

Nenhum comentário:

Postar um comentário