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;
}