Go Down

Topic: WiFi Connection problems - Digitalfoosball App (Read 833 times) previous topic - next topic

knallt

Hi,

I am actually a newby on adruino. But want to make this stuff working. I read an article about building a table foosball with light barriers for transfering the goals to a website. Now I have the hardware but actually some problems with the code for the adruino one with the sparkfun wifi shield. The barriers are on Pin 2 and 4.

- I tested the uno with the wifi shield examples: working without any problems
- I tested the script I have without using wifi but I actually cant manage to use it with the wifi. I think there are some problems with the new version of the wifly libary?

This ist the code I am using - maybe you can help me on finding the errors?

Code: [Select]

/***********************
***  CONFIGURATION  ***
***********************/
#define TABLE_ID "main"

// - INTERNET_WIFLY (Sparkfun WiFly shield), or
// - INTERNET_MOCKUP (simulate connection)
#define INTERNET_WIFLY

// WIFI Access
char WIFLY_SSID[] = "gastknallt";
char WIFLY_PASSPHRASE[] = "berlin2012";

// Server
char SERVER_NAME[] = "82.165.145.84";
byte SERVER_IP[] = {82, 165, 165, 84};

#include "WiFly.h"

// Define to enable output messages on Serial
#define DEBUG_APP

/**  CONSTANTS AND GLOBALS  **/

// Pin constants
const int GOAL_A_PIN = 2;
const int GOAL_B_PIN = 4;
const int RESET_A_PIN = 3;
const int RESET_B_PIN = 5;
const int LED_PIN = 8; // Standard LED pin 13 used by Spi

// Uniqueness token, initialized by random

#if defined(INTERNET_WIFLY)
// The client for communication with goal server
Client client(SERVER_IP, 80);
#endif

// Whether we think we have associated/connected
boolean associated = false;
boolean connected = false;
int failures = 0;

// Debugging
#ifdef DEBUG_APP
#define LOG(message) Serial.print(message)
#else
#define LOG(message) (((0)))
#endif

/**************************
***  HELPER FUNCTIONS  ***
**************************/

void disconnect()
{
#if defined(INTERNET_WIFLY)
 client.stop();
#endif

 connected = false;
}

boolean ensureConnection(boolean checkWiFlyStatus)
{
#if defined(INTERNET_WIFLY)
WiFlyDevice::Status status = checkWiFlyStatus ? wiFly.getStatus(false) : WiFlyDevice::StatusConnected;
 if (status == WiFlyDevice::StatusError || status == WiFlyDevice::StatusNotAssociated
   || status == WiFlyDevice::StatusNoIp)
 {
   if (associated)
   {
     if (status == WiFlyDevice::StatusNotAssociated)
       LOG("ERROR: Association LOST, resetting...\n");
     else if (status == WiFlyDevice::StatusNoIp)
       LOG("ERROR: No WiFi IP, resetting...\n");
     else
       LOG("ERROR: WiFi problem, resetting...\n");

     reset();
   }

   LOG("Joining network...\n");
   if (!wiFly.join(WIFLY_SSID, WIFLY_PASSPHRASE))
   {
     LOG("ERROR: Joining network failed, trying again later.\n");
     flashError(1);

     if (failures++ >= 3)
     {
       LOG("ERROR: Three failures, resetting.\n");
       reset();
     }

     return false;
   }

   LOG("Network joined.\n");
   associated = true;
   connected = false;
   failures = 0;
 }

 status = checkWiFlyStatus ? wiFly.getStatus(false) : WiFlyDevice::StatusConnected;
 if (!client.isConnected() || status != WiFlyDevice::StatusConnected)
 {
   if (connected)
     LOG("Connection LOST, reconnecting...\n");
   else
     LOG("Preconnecting to server...\n");

   if (!client.connect(false) || !client.isConnected())
   {
     LOG("Connection FAILED, trying again later. (003) \n");
     flashError(2);

     if (failures++ >= 3)
     {
       LOG("ERROR: Three failures, resetting.\n");
       reset();
     }

     return false;
   }

   LOG("Connected.\n");
   connected = true;
   failures = 0;
 }

 delay(250);
#endif

 return true;
}

void flashError(int errorNo)
{
 int i;
 for (int i=0; i<8; i++)
 {
   digitalWrite(LED_PIN, HIGH);
   delay(100);
   digitalWrite(LED_PIN, LOW);
   delay(100);
 }

 delay(500);

 for (int i=0; i<errorNo; i++)
 {
   digitalWrite(LED_PIN, HIGH);
   delay(500);
   digitalWrite(LED_PIN, LOW);
   delay(500);
 }

 delay(500);
}

void reset()
{
 associated = false;
 connected = false;
 
#if defined(INTERNET_WIFLY)
 wiFly.begin();
#endif
 failures = 0;
}


/*****************************
***  Setup and main loop  ***
*****************************/

void setup()
{
 Serial.begin(9600);
 LOG("Initializing...\n");

 pinMode(GOAL_A_PIN, INPUT);
 pinMode(GOAL_B_PIN, INPUT);
 pinMode(RESET_A_PIN, OUTPUT);
 pinMode(RESET_B_PIN, OUTPUT);
 pinMode(LED_PIN, OUTPUT);

 digitalWrite(GOAL_A_PIN, LOW);
 digitalWrite(GOAL_B_PIN, LOW);
 digitalWrite(RESET_A_PIN, LOW);
 digitalWrite(RESET_B_PIN, LOW);

 for (int i=0; i<10; i++)
 {
   digitalWrite(LED_PIN, LOW);
   delay(50);
   digitalWrite(LED_PIN, HIGH);
   delay(50);
 }

 randomSeed(analogRead(0));
 token = random(65535);

#ifdef INTERNET_WIFLY
 wiFly.begin();

 while (!ensureConnection(true))
   delay(1000);
#endif

 digitalWrite(RESET_A_PIN, HIGH);
 digitalWrite(RESET_B_PIN, HIGH);
 delay(10);
 digitalWrite(RESET_A_PIN, LOW);
 digitalWrite(RESET_B_PIN, LOW);
 delay(10);

 digitalWrite(LED_PIN, LOW);
 LOG("Initialization done.\n");
}

void loop()
{
 char string[512];

 // Analyze inputs until we find a goal (HIGH is true)
 // Also check that we are still connected to the server and access point

 int playerPin = GOAL_A_PIN;
 long checkCount = 0;
 while (true)
 {
   playerPin = playerPin == GOAL_A_PIN ? GOAL_B_PIN : GOAL_A_PIN;
   if (digitalRead(playerPin) == HIGH)
     break;

   if ((checkCount % 200) == 0)
     while (!ensureConnection(checkCount == 0))
       delay(5000);

   delay(10);
   checkCount = (checkCount + 1) % 2000;
 }

 digitalWrite(LED_PIN, HIGH);
#ifdef DEBUG_APP
 sprintf(string, "Goal for %s team, ID %lu\n", playerPin == GOAL_A_PIN ? "home" : "visitors", token);
 LOG(string);
#endif

 // Retry at most 3 times

 boolean success = false;
 while (!success && failures < 3)
 {
   while (!ensureConnection(false))
     delay(1000);

   // Send a POST to the goal server

   char content[128];
   sprintf(content, "token=%lu&table=%s", token, TABLE_ID);
   sprintf(string, "POST %s/events.php?type=goal&team=%s HTTP/1.1\r\n"
     "Host: %s\r\n"
     "User-Agent: Arduino/KnalltsKicker\r\n"
     "Content-Type: application/x-www-form-urlencoded\r\n"
     "Content-Length: %d\r\n\r\n%s",
   playerPin == GOAL_A_PIN ? "home" : "visitors", SERVER_NAME,
   strlen(content), content);

   LOG("Sending request...\n");
   LOG(string);
   LOG("\n");
#if defined(INTERNET_ETHERNET) || defined(INTERNET_WIFLY)
   client.print(string);
#endif

   LOG("Request done, checking response...\n");
#if defined(INTERNET_ETHERNET)
   success = findInEthernetResponse("200 OK", 5000);
#elif defined(INTERNET_WIFLY)
   success = wiFly.findInResponse("200 OK", 5000);
#else
   delay(500);
   success = true;
#endif

   if (success)
   {
     LOG("Request successful.\n");
     failures = 0;
   }
   else
   {
     LOG("Request FAILED.\n");
     failures++;

     disconnect();
   }
 }

 token++;

 if (!success)
 {
   LOG("Giving up and resetting...\n");

   reset();
   ensureConnection(true);
 }

 // Reset goal flip-flop and wait for input to be false (LOW) again
 do
 {
   digitalWrite(playerPin == GOAL_A_PIN ? RESET_A_PIN : RESET_B_PIN, HIGH);
   delay(10);
   digitalWrite(playerPin == GOAL_A_PIN ? RESET_A_PIN : RESET_B_PIN, LOW);
   delay(10);
 }
 while (digitalRead(playerPin) != LOW);

 digitalWrite(LED_PIN, LOW);

 // Disconnect and preconnect again

 if (success)
 {
   disconnect();
   ensureConnection(false);
 }

 LOG("Ready for next goal.\n");
}



ERRORs

Code: [Select]

sketch_sep21b.cpp: In function 'boolean ensureConnection(boolean)':
sketch_sep21b:78: error: 'Status' is not a member of 'WiFlyDevice'
sketch_sep21b:78: error: expected `;' before 'status'
sketch_sep21b:79: error: 'status' was not declared in this scope
sketch_sep21b:79: error: 'StatusError' is not a member of 'WiFlyDevice'
sketch_sep21b:79: error: 'StatusNotAssociated' is not a member of 'WiFlyDevice'
sketch_sep21b:80: error: 'StatusNoIp' is not a member of 'WiFlyDevice'
sketch_sep21b:84: error: 'StatusNotAssociated' is not a member of 'WiFlyDevice'
sketch_sep21b:86: error: 'StatusNoIp' is not a member of 'WiFlyDevice'
sketch_sep21b:95: error: 'wiFly' was not declared in this scope
sketch_sep21b:115: error: 'status' was not declared in this scope
sketch_sep21b:115: error: 'wiFly' was not declared in this scope
sketch_sep21b:115: error: 'StatusConnected' is not a member of 'WiFlyDevice'
sketch_sep21b:116: error: 'class Client' has no member named 'isConnected'
sketch_sep21b:116: error: 'StatusConnected' is not a member of 'WiFlyDevice'


Thank you so much!!!

jraskell

sketch_sep21b:78: error: 'Status' is not a member of 'WiFlyDevice'

Why do you believe WiFlyDevice has a member called Status?  It doesn't, hence the compile error when you try to access a member that doesn't exist.

Ditto for pretty much all the errors (although I didn't confirm each and every one).

knallt

To be honest I have no clue what this part of the code does. I thought it's defined in the wifly libary :o ...

Maybe you can help me to correct the program? What I know is that the problem is the wifi connection check... But I don't know how to correct it.

Thank you!!

jraskell

I don't have a WiFly shield, and have no experience using one.  I did notice that the library does come with several examples.  Have you looked through those to see if they do what you are trying to do?

knallt

Hi, I think I found the solution. There was a private libary which I changed to public.
I still have one problem, within the serial monitor the board says:

Match, skipping rest of line.
Waiting for response '8'
Wait timed out.

Do you know what the 8 means. Is there an error with the pin?

Thank you!

Go Up