here is the code:
In the osc interface on your iphone you need to have 7 buttons:
stop, cw, ccw, up, dwn, hsup, hsdwn.
Dont know why but I changed the serverport to 10000 iso 9000.
it works.
// 24 OCT 2011
// ifoon crane interface
// IP address 192.168.30.177 , port 10000
#include <SPI.h>
#include "Ethernet.h"
#include "OSCClass.h"
int IfoonControlPin = 8;
int CraneDwnSwPin = 7;
int CraneUpSwPin = 6;
int CraneCWSwPin = 2;
int CraneCCWSwPin = 3;
int WinchUpSwPin = 4;
int WinchDwnSwPin = 5;
uint8_t ch;
uint8_t val[16];
int counter;
int CraneHeight = 900;
long prevOSCTransmission = millis();
OSCMessage recMes;
OSCMessage sendMes;
OSCClass osc(&recMes);
uint8_t *destIp;
int destPort = 9000;
char *topAddress="1";
char *subAddress[1]={ "height" };
byte serverMac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte serverIp[] = {
192, 168, 30, 177 };
int serverPort = 10000;
char *page;
char *IfoonCommand;
float value = 0;
int intvalue = 0;
int cw = 0,
ccw = 0,
CraneUp = 0,
CraneDwn = 0,
WinchUp = 0,
WinchDwn = 0,
StopCrane = 0;
long LastPingMillis = millis();
void setup() {
Serial.begin(19200);
Ethernet.begin(serverMac ,serverIp);
osc.begin(serverPort);
pinMode(IfoonControlPin, OUTPUT);
pinMode(CraneDwnSwPin, OUTPUT);
pinMode(CraneUpSwPin, OUTPUT);
pinMode(CraneCWSwPin, OUTPUT);
pinMode(CraneCCWSwPin, OUTPUT);
pinMode(WinchUpSwPin, OUTPUT);
pinMode(WinchDwnSwPin, OUTPUT);
digitalWrite(IfoonControlPin, LOW);
digitalWrite(CraneDwnSwPin, LOW);
digitalWrite(CraneUpSwPin, LOW);
digitalWrite(CraneCWSwPin, LOW);
digitalWrite(CraneCCWSwPin, LOW);
digitalWrite(WinchUpSwPin, LOW);
digitalWrite(WinchDwnSwPin, LOW);
osc.flush();
}
void loop() {
//osc arrive check
if ( osc.available() ) {
Serial.println("received osc");
logMessage(&recMes);
page = recMes.getAddress(0);
IfoonCommand = recMes.getAddress(1);
value = recMes.getArgFloat(0);
intvalue = int(value);
if( !strcmp(IfoonCommand, "ping")){
Serial.println("received ping");
LastPingMillis = millis();
}else if(millis() >(LastPingMillis+65000)){//no ping for 65 sec then everything OFF
StopCrane = 1;
}
if(!strcmp(page,"1")){
if(!strcmp(IfoonCommand,"stop")){
if (intvalue == 1){
StopCrane = 1;
cw = 0;
ccw = 0;
CraneUp = 0;
CraneDwn = 0;
WinchUp = 0;
WinchDwn = 0;
}
else{
StopCrane = 0;
LastPingMillis = millis();
}
}
else if(!strcmp(IfoonCommand , "cw")){
if (intvalue == 1){
cw = 1;
ccw = 0;
}
else{
cw = 0;
}
}
else if(!strcmp(IfoonCommand , "ccw")){
if (intvalue == 1){
ccw = 1;
cw = 0;
}
else{
ccw = 0;
}
}
else if(!strcmp(IfoonCommand , "up")){
if (intvalue == 1){
CraneUp = 1;
CraneDwn = 0;
}
else{
CraneUp = 0;
}
}
else if(!strcmp(IfoonCommand , "dwn")){
if (intvalue == 1){
CraneDwn = 1;
CraneUp = 0;
}
else{
CraneDwn = 0;
}
}
else if(!strcmp(IfoonCommand , "hsup")){
if (intvalue == 1){
WinchUp = 1;
WinchDwn = 0;
}
else{
WinchUp = 0;
}
}
else if(!strcmp(IfoonCommand , "hsdw")){
if (intvalue == 1){
WinchDwn = 1;
WinchUp = 0;
}
else{
WinchDwn = 0;
}
}
}//end page 1
}//end osc reveive
if((!strcmp(page,"1"))&&(!StopCrane)){
digitalWrite(IfoonControlPin, HIGH);
}
else{
digitalWrite(IfoonControlPin, LOW);
}
if ((cw)&&(!ccw)&&(!StopCrane)){
digitalWrite(CraneCWSwPin, HIGH);
digitalWrite(CraneCCWSwPin, LOW);
}
else if ((ccw)&&(!cw)&&(!StopCrane)){
digitalWrite(CraneCWSwPin, LOW);
digitalWrite(CraneCCWSwPin, HIGH);
}
else{
digitalWrite(CraneCWSwPin, LOW);
digitalWrite(CraneCCWSwPin, LOW);
}
if ((CraneUp)&&(!CraneDwn)&&(!StopCrane)){
digitalWrite(CraneUpSwPin, HIGH);
digitalWrite(CraneDwnSwPin, LOW);
}
else if ((CraneDwn)&&(!CraneUp)&&(!StopCrane)){
digitalWrite(CraneDwnSwPin, HIGH);
digitalWrite(CraneUpSwPin, LOW);
}
else{
digitalWrite(CraneDwnSwPin, LOW);
digitalWrite(CraneUpSwPin, LOW);
}
if ((WinchUp)&&(!WinchDwn)&&(!StopCrane)){
digitalWrite(WinchUpSwPin, HIGH);
digitalWrite(WinchDwnSwPin, LOW);
}
else if ((WinchDwn)&&(!WinchUp)&&(!StopCrane)){
digitalWrite(WinchDwnSwPin, HIGH);
digitalWrite(WinchUpSwPin, LOW);
}
else{
digitalWrite(WinchDwnSwPin, LOW);
digitalWrite(WinchUpSwPin, LOW);
}
}
// ********* utility ***********************************
void logMessage(OSCMessage *mes){
uint8_t *ip=mes->getIp();
//disp ip & port
Serial.print(millis()/1000);
Serial.print(" sec from IP:");
Serial.print(ip[0],DEC);
Serial.print(".");
Serial.print(ip[1],DEC);
Serial.print(".");
Serial.print(ip[2],DEC);
Serial.print(".");
Serial.print(ip[3],DEC);
Serial.print(" port:");
Serial.print(mes->getPort(),DEC);
Serial.print(" ");
//disp adr
for(int i = 0 ; i < mes->getAddressNum() ; i++){
Serial.print(mes->getAddress(i));
}
//disp type tags
Serial.print(" ,");
for(int i = 0 ; i < mes->getArgNum() ; i++){
Serial.print(mes->getTypeTag(i));
}
Serial.print(" ");
//disp args
for(int i = 0 ; i < mes->getArgNum() ; i++){
switch( mes->getTypeTag(i) ){
case 'i':
{
Serial.print( mes->getArgInt(i) );
}
break;
case 'f':
{
Serial.print( mes->getArgFloat(i) );
}
break;
}
Serial.print(" ");
}
Serial.println("");
}