• Welcome to LusoRobótica - Robótica em Português.
 

separar valores de vários sensores

Started by guibot, 13 de December de 2008, 20:47

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

guibot

já agora.. sabem como se usam certas funções de C no arduino?   por exemplo:

sscanf
atoi
strchr

já tentei importar as livrarias mas não estou a conseguir

TigPT

Duvido que essas funções existam por requererem bastante espaço, iria gastar a memoria toda do arduino. Porque não fazes esse processamento no pc? tenta baixar o nível de complexidade, afinal é hardware ;)

defer

o sscanf é um monstro de função, mas as outras podes re-implementar facilmente sem ter que usar as libs standard, algo do género:

int my_atoi (char *s) {
  int result = 0;
  while (*s) {
    result = result * 10 + *s-'0';
    s++;
  }
  return result;
}


char *my_strchr (char *s, int chr) {
  while (*s) {
    if (*s == chr) return s;
    s++;
  }
  return NULL;
}

Atenção que a primeira não faz qualquer tipo de verificação se é mesmo um número e tambem nao funciona para números negativos, mas a adaptação não é difícil, era só um proof of concept

guibot

vou ter que aprofundar, já tenho material para me entreter, obrigado defer  ;)

guibot

#19
depois de pesquisar como se processa a interpretação dos 'bytes' e como se convertem em 'ints', consegui chegar a uma resolução.

para já parece ser relativamente estável.
estou desejando chegar a casa e experimentar controlar os motores do farrusco remotamente   8)


Arduino que envia:
int analogValue2, analogValue5;
int val2, val5;

void setup()
{
  // start serial port at 9600 bps:
  Serial.begin(9600);
}

void loop()
{
  // read analog input
  analogValue2 = analogRead(5);
  analogValue5 = analogRead(2);

  val2 = map(analogValue2, 0, 1023, 253, 0); //254 e 255 para SYNC
  val5 = map(analogValue5, 0, 1023, 253, 0);

  Serial.print(254, BYTE); //SYNC char
  Serial.print(val2, BYTE);
  Serial.print(255, BYTE); //SYNC char
  Serial.print(val5, BYTE);

  // pause for 100 milliseconds:
  delay(100);      //
}


Arduino que recebe:
#include <AFSoftSerial.h>
AFSoftSerial mySerial =  AFSoftSerial(3, 2);

byte incomingByte;
byte sensor1, sensor2;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void setup() {
  Serial.begin(9600);         // connect to the serial port
  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  mySerial.println("Hello, world?");

}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void loop() {
   
   if (mySerial.available()) {
      incomingByte = mySerial.read();

      Serial.println(int(incomingByte));

      if ((int(incomingByte) == 254)) {
        sensor1 = mySerial.read();
        Serial.print("Sensor 1 = ");
        Serial.println(int(sensor1));       
      }

      if ((int(incomingByte) == 255)) {
        sensor2 = mySerial.read();
        Serial.print("Sensor 2 = ");
        Serial.println(int(sensor2));             
      }
   
   }

}