domenica 23 marzo 2014

Trasmissione dati di sensori via Bluetooth 4.0 - parte 2 : il codice

Per leggere e trasmettere i dati letti sulla porta A0 sono sufficienti davvero poche righe di codice.

La scrittura dei dati via BLE è fatta in modo seriale, semplificando tutte le operazioni di lettura e scrittura.


Per migliorare la trasmissione dei dati  il codice implementa:
- una lettura in oversampling, per migliorare la precisione della porta A0 da 10 a 12 bit 
- un "trigger" sul dato letto, per trasmettere effettivamente il valore letto solo quando questo differisce dal precedente.
Il valore letto viene inviato via BLE in formato stringa, seguito da un "line feed" (0x0A).


#if defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__) 
  AltSoftSerial BLEMini; 
#else
  #define BLEMini Serial1
#endif

void setup()
{
    BLEMini.begin(57600);
    Serial.begin(57600);
}

int value=0;
int previousValue=0;
bool first=HIGH;
String valueStr="";

void loop()

{
   readValue(2); //0=(10 bit),1 (11 bit),2 (12 bit)
   valueStr=String(value);
   if (value!=previousValue || first==HIGH)
   {
     for (int i = 0; i < valueStr.length(); i++)
     {
         BLEMini.write(valueStr[i]);
     }
     BLEMini.write(0x0A);
     Serial.println(value);
   }
   previousValue=value;
   first=LOW;
   delay(10);
}

void readValue(int incr)  //0=(10 bit),1 (11 bit),2 (12 bit)
{
      value=0;
      for (k=0; k<oversampling; k++)
      {
        t0=micros();
        value = analogRead(A0)+value ;
        delayMicroseconds(30);
      }
      value= int(value/pow(2,4- incr)) ;
}

Nel prossimo post: come leggere su iPhone i dati trasmessi

Nessun commento:

Posta un commento