Arduino Dashboard

Salut,

the demo sketch is on the project page (as it is rather short) or here:

#include <MsTimer2.h>

int bufferCount;    // Anzahl der eingelesenen Zeichen
char buffer[80];    // Serial Input-Buffer
char temp[80];
char lastpin=2;
int blinkdelay;
boolean dbOpen = false;
boolean readPort = false;
boolean sglPort = false;
int maxSequence = 1;
int sequence = 0;
int c2chrt = 0;

void setup()
{
  Serial.begin(115200);
  for (int i=2;i<14;i++) {
    pinMode(i,OUTPUT);
  }
  MsTimer2::set(150, t2Isr); // 500 ms period
  MsTimer2::start();
}

void loop()
{
  // do nothing for the GUI handling, serial is done through interrupt
}

void serialEvent(){
  char ch = Serial.read();
  buffer[bufferCount] = ch;
  bufferCount++;
  if(ch == 13){
    evalSerialData();
  }
}

void evalSerialData()
{
  int ptr;
  int val;
  strcpy(temp,"");
  if ((buffer[0]=='S')&&(buffer[bufferCount-2]=='E')) {
    strncat(temp, buffer, bufferCount-1);
    if (strcmp(temp,"SQVERSIONE")==0){
      strcpy(temp,"AC 1.0.0");
    }
    if (strcmp(temp,"SINITE")==0){
      // setup the Dashboard
      Serial.println("STTL1Dashboard DemoE");
      Serial.println("SBTN001.0020.0040.0080.0025.Click MeE");
      Serial.println("SCKB001.0105.0040.Led 5E");
      Serial.println("SSLD001.0020.0070.0002.0013.0001.Led SwiperE");
      Serial.println("SSLD011.0020.0150.0000.0250.0025.Led FaderE");
      Serial.println("SCBO001.0020.0240.0080.0025E");
      Serial.println("SCBA001.Port A0E");
      Serial.println("SCBA001.Port A1E");
      Serial.println("SCBA001.Port A2E");
      Serial.println("SCBA001.Port A3E");
      Serial.println("SCBA001.Port A4E");
      Serial.println("SCBA001.Port A5E");
      Serial.println("SCBS001.0002E");
      c2chrt = 2;
      Serial.println("SLBL001.0250.0240.0080.0030.0.00E");
      Serial.println("SCKB011.0335.0040.Chart Timeline DataE");
      Serial.println("SCKB021.0105.0240.Show Port DataE");
      dbOpen = true;
    }
    if (strcmp(temp,"SGoodByeE")==0){
      // stop the Dashboard
      dbOpen = false;
    }
    if ((buffer[1]=='C')&&(buffer[2]=='K')&&(buffer[3]=='B')){
      ptr = (buffer[4]-48)*10 + (buffer[5]-48);
      if (ptr==0) {
        digitalWrite(5,((buffer[6]-48)==1));
      }
      if (ptr==1) {
        readPort = (buffer[6]-48)==1;
      }
      if (ptr==2) {
        sglPort = (buffer[6]-48)==1;
      }
    }
    if ((buffer[1]=='C')&&(buffer[2]=='B')&&(buffer[3]=='O')){
      ptr = (buffer[4]-48)*10 + (buffer[5]-48);
      c2chrt = buffer[12]-48;
      if ((c2chrt<0) || (c2chrt>5)) c2chrt = 0;
    }
    if ((buffer[1]=='B')&&(buffer[2]=='T')&&(buffer[3]=='N')){
      ptr = (buffer[4]-48)*10 + (buffer[5]-48);
      for (int i=2;i<14;i++) {
        digitalWrite(i,!(digitalRead(i)));
      }
    }
    if ((buffer[1]=='S')&&(buffer[2]=='L')&&(buffer[3]=='V')){
      ptr = (buffer[4]-48)*10 + (buffer[5]-48);
      val = (buffer[6]-48)*1000 + (buffer[7]-48)*100 + (buffer[8]-48)*10 + (buffer[9]-48);
      if (ptr==0) {
        digitalWrite(lastpin,LOW);
        lastpin=val;
        digitalWrite(lastpin,HIGH);
      }
      if (ptr==1) {
        analogWrite(10,val);
      }
    }
  } 
  else {
    strcpy(temp,"BadCmd: ");
    strncat(temp, buffer, bufferCount);
    Serial.println(temp);
  }
  bufferCount=0;
}

void t2Isr()
{  
  int led_pin = 13;
  int led_pin2 = 12;
  int ar[6];
  int val;
  char dstr[40];

  switch (sequence) {
  case 0:
    for (int i=0; i<6; i++) {
      ar[i] = analogRead(i) + i * 65;
    }
    sprintf(dstr,"STLViii.%4d.%4d.%4d.%4d.%4d.%4dE",ar[0],ar[1],ar[2],ar[3],ar[4],ar[5]);
    if (readPort) {
      if (dbOpen) {
        Serial.println(dstr);
      }
    }
    break;
  case 1:
    if (sglPort) {
      digitalWrite(led_pin, !digitalRead(led_pin));
      if (dbOpen) {
        val = analogRead(c2chrt);
        Serial.print("SLBV001.");
        Serial.print(millis() % 1000);
        Serial.println("E");
        Serial.print("SCHV001.");
        Serial.print(val);
        Serial.println("E");
      }
    }
  }
  sequence++;
  if (sequence>maxSequence) sequence = 0;
}

The project page also documents (work in progress) the syntax.

Ciao, Mathias