Grove Indoor Environment for Edison to Arduino

Hello,

I am trying to convert a project that was intended for the intel edison to arduino. I believe this is feasible but I am having trouble with some code I found online where the attempt to convert was initially made. First off the code utilizes the standard arduino wifi shield which has always been buggy for me so I am trying in vein to convert this to use the cc3000 by adafruit. Lastly, and this will show my inexperience, but I'm having trouble finding the appropriate pin for Temperature and Humidity. Also 80% of the code is posted due to character limits. Any advice or suggestions would be extremely helpful (for what it's worth I did do a lot of googling before posting).

#include <Wire.h>
#include <Servo.h>
#include <SPI.h>
#include <WiFi.h>
#include <TimerOne.h>
#include "rgb_lcd.h"
#include <stdlib.h>
#include <string.h>
#include <TH02_dev.h>
#include <Encoder.h>


#define CMDSTR_MAX_LEN (128)
#define LOW_TEMP       (10)
#define NOM_TEMP       (25) 
#define HIGH_TEMP      (40)

#define SENSOR_COUNT   (6)
#define ACTUATOR_COUNT (4)
#define VAR1_COUNT     (SENSOR_COUNT+1)
#define VAR2_COUNT     (ACTUATOR_COUNT+1)
typedef void (*pActuatorHandler)(int);
typedef int (*pgetSensorValue)(void);

rgb_lcd lcd;
boolean isBackLightOn = true;

char cmdstr[CMDSTR_MAX_LEN];

char ssid[48] = "EdisonAP";           // your network SSID (name) 
char psw[48] = "12345678";       // your network password
boolean isSSIDreconfiged = false;
int keyIndex = 0;                // your network key Index number (needed only for WEP)
int status = WL_IDLE_STATUS;
WiFiServer server(88);
int serverconnected = 0;

unsigned char BLColorRGB[]={0x00, 0x00, 0xFF};  //Backlight color

const int numRows = 2;
const int numCols = 16;

const int MenuCount = 5;
int MenuIndex = 0;

const int MoistrueSensorIndex = 0;
const int LightSensorIndex = 1;
const int UVSensorIndex = 2;
const int THSensorIndex = 3;
const int LocalIPIndex = 4;

const int pinSound = A0;
const int pinMoistrue = A1;
const int pinLight = A2;
const int pinUV = A3;
const int pinButton =8;
const int pinEncoder1 = 2;
const int pinEncoder2 = 3;
const int pinBuzzer = 4;
const int pinRelay = 5;
const int pinPIR = 7;
const int pinServo = 6;
Servo myservo;
Encoder myEncoder(pinEncoder1, pinEncoder2);

const char* SerialVarList1[] = { "temp", "humi", "light", "uv", "pir", "ms","ssid"};
const char* SerialVarList2[] = { "relay", "buzzer", "servo", "sleep", "psw"};
enum ACTUATOR {RELAY=0,BUZZER,SERVO,SLEEP};
enum SENSOR {TEMPER=0,HUMI,LIGHT,UV,PIR,MS};

pgetSensorValue getSensorValueList[]={
  getTempSensorValue, 
  getHumiSensorValue, 
  getLightSensorValue, 
  getUVSensorValue, 
  getPIRSensorValue, 
  getMoistrueSensorValue
};

int SensorValue[SENSOR_COUNT];
                                      
pActuatorHandler ActuatorHandlerList[]={RelayHandle, BuzzerHandle, ServoHandle, SleepHandle};

int SensorConfig[][4] = {       // value, condition, Actuator, action
  {85,  '>', SLEEP,  1},        //Temperature
  {100, '>', SLEEP,  1},        //Humdity
  {200, '<', SERVO,  90},        //Light
  {1023,'>', SLEEP,  1},        //UV
  {2,   '=', BUZZER, 1},        //PIR
  {600, '<', RELAY,  1}         //Moistrue
};

void printSettings(void){
  Serial.println("The Sensors Configurations as follow:");
  for(int i=0; i<SENSOR_COUNT;i++){
    Serial.print(SerialVarList1[i]);
    Serial.write((char)SensorConfig[i][1]);
    Serial.print(SensorConfig[i][0]);
    Serial.write(',');
    Serial.print(SerialVarList2[SensorConfig[i][2]]);
    Serial.write('=');
    Serial.println(SensorConfig[i][3]);    
  }
  Serial.print('\n');
  Serial.print("SSID = ");
  Serial.print(ssid);
  Serial.print(", PSW = ");
  Serial.println(psw);
  Serial.print('\n');
  
  Serial.println("The Sensors Value as follow:");
  for(int i=0; i<SENSOR_COUNT;i++){
    Serial.print(SerialVarList1[i]);
    Serial.print(" = ");
    Serial.println(getSensorValueList[i]());   
  }
  Serial.print('\n');
}

void SerialRequestHandler(){
  if(cmdstrInput(cmdstr)){
     if(!parsecmd(cmdstr)){
       Serial.println("\nset cmd FAIL!");
       Serial.println("Please enter command: set temp>50,relay=1 etc.");
     }
     else {
       Serial.println("\nset cmd Success!");
     }
     printSettings();
  }
  
  int changedVal;
  for(int i=0;i<SENSOR_COUNT;i++){
    if(SensorConfig[i][2]==SERVO) changedVal = 0;
    else changedVal = !SensorConfig[i][0];
    switch (SensorConfig[i][1]){
      case '>':
        if(getSensorValueList[i]() > SensorConfig[i][0]) 
          ActuatorHandlerList[SensorConfig[i][2]](SensorConfig[i][3]);
        else ActuatorHandlerList[SensorConfig[i][2]](changedVal);
        break;
      case '<':
        if(getSensorValueList[i]() < SensorConfig[i][0]) 
          ActuatorHandlerList[SensorConfig[i][2]](SensorConfig[i][3]);
        else ActuatorHandlerList[SensorConfig[i][2]](changedVal);
        break;
      case '=':
        if(getSensorValueList[i]() == SensorConfig[i][0]) 
          ActuatorHandlerList[SensorConfig[i][2]](SensorConfig[i][3]);
        else ActuatorHandlerList[SensorConfig[i][2]](changedVal);
        break;
    }
  }
  
}

int parsecmd(char *cmd){
  char* cp = cmd;

/*  // use SSID and Passwrod, should not changed to lowcase
  while(*cp != '\0'){
    if(*cp >= 'A' && *cp <= 'Z') *cp += 0x20;     //tolower
    cp++;
  }
*/
  
  if(!(cmd[0]=='s' && cmd[1]=='e' && cmd[2]=='t' && cmd[3]==' ')) return 0;   //Illegal cmd
  
  char tmpcmd[CMDSTR_MAX_LEN];
  char *cp1=cmd+4;
  int len=0;
  while(*cp1 != '\0'){
    if(*cp1 != ' ') tmpcmd[len++] = *cp1;   //delete space
    cp1++;
  }
  tmpcmd[len]='\0';
  if(len<7) return 0;   // at least 7 characters,like T>0,R=1
  
  char *pvar1, *pvar2;
  pvar1 = strtok(tmpcmd,",");
  if(pvar1 == NULL) return 0;          //no setting
  pvar2 = strtok(NULL,",");
  if(pvar2 == NULL) return 0;          //no setting
  if(strtok(NULL,",")!=NULL) return 0; //more setting
  
  char op1='\0',op2='\0';
  char *pvarvalue1=NULL, *pvarvalue2=NULL;
  int i = 0;
  while(pvar1[i]!='\0'){
    if(pvar1[i]=='>' || pvar1[i]=='<' || pvar1[i]=='='){
      op1 = pvar1[i];
      pvar1[i] = '\0';
      pvarvalue1 = pvar1+i+1;
      break;
    }
    i++;
  }
  i=0;
  while(pvar2[i]!='\0'){
    if(pvar2[i]=='>' || pvar2[i]=='<' || pvar2[i]=='='){
      op2 = pvar2[i];
      pvar2[i] = '\0';
      pvarvalue2 = pvar2+i+1;
      break;
    }
    i++;
  }
  int varindex1,varindex2;
  for(i=0;i<VAR1_COUNT;i++)
    if(strcmp(pvar1,SerialVarList1[i])==0){
      varindex1 = i;
      break;
    }
    
  if(i==VAR1_COUNT) return 0;  // Illegal sensor name
  
  for(i=0;i<VAR2_COUNT;i++)
    if(strcmp(pvar2,SerialVarList2[i])==0){
      varindex2 = i;
      break;
    }
    
  if(i==VAR2_COUNT) return 0; // Illegal actuator name
  
  if(op1=='\0' || op2=='\0') return 0; // Illegal operator name
  
  if(varindex1 == VAR1_COUNT-1 && varindex2 == VAR2_COUNT-1){
    strcpy(ssid,pvarvalue1);
    strcpy(psw,pvarvalue2);
    isSSIDreconfiged = true;
  } 
  else if(varindex1 != VAR1_COUNT-1 && varindex2 != VAR2_COUNT-1) {
    int value1 = atoi(pvarvalue1), value2 = atoi(pvarvalue2);
    if(value1 < 0 || value1 > 1023) return 0;
    if(value2 < 0 || value2 > 1023) return 0;  
    SensorConfig[varindex1][0] = value1;
    SensorConfig[varindex1][1] = op1;
    SensorConfig[varindex1][2] = varindex2;
    SensorConfig[varindex1][3] = value2;  
}

You seem to be used to big controllers. With such coding style the ATmega chips may reach their memory limits, with string manipulations and operations on arrays of data structures.

When you start with the example sketches, coming with each shield, you should succeed very soon in making all components work. Afterwards you can concentrate on the program logic, to make everything do what you want.