Arduino Yun : Problem SD Karte

Hallo,

ich habe seit heute den Arduino Yun, nun wollte ich auf diesem ein kleines Webinterface aufbauen, mit dem ich die entsprechenden Modis auswählen kann für eine Beleuchtung. Bislang habe ich nur eine entsprechende Anleitung gefunden, nach der es aber nicht geht. Das AdminWebinterface ist soweit konfiguriert.

Nach dieser Anleitung bin ich vorgegangen.

Habe hier vorerst nur 2 Skripte zum Test zusammengefügt.

// Possible commands are listed here:
//
// "digital/13"     -> digitalRead(13)
// "digital/13/1"   -> digitalWrite(13, HIGH)
// "analog/2/123"   -> analogWrite(2, 123)
// "analog/2"       -> analogRead(2)
// "mode/13/input"  -> pinMode(13, INPUT)
// "mode/13/output" -> pinMode(13, OUTPUT)

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

#include <FastSPI_LED2.h>
#define NUM_LEDS 8
#define DATA_PIN 4
CRGB leds[NUM_LEDS];
// Listen on default port 5555, the webserver on the Yun
// will forward there all the HTTP requests for us.
YunServer server;

void setup() {
  Serial.begin(9600);

  // Bridge startup
  pinMode(13,OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  digitalWrite(13, HIGH);

  // Listen for incoming connection only from localhost
  // (no one from the external network could connect)
  server.listenOnLocalhost();
  server.begin();

  FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS);
  for(uint8_t led = 0; led < NUM_LEDS; led++) leds[led] = CRGB(0,0,0);
}

void loop() {

  unsigned long currentTime = millis();
  static unsigned long previousTime;

  if(currentTime - previousTime > 50)
  {

    // Get clients coming from server
    YunClient client = server.accept();

    // There is a new client?
    if (client) {
      // Process request
      process(client);

      // Close connection and free resources.
      client.stop();
    }
    previousTime = currentTime;
  }

  if(digitalRead(13) == HIGH) farbenwechsel(5000, 255, 255);
  else if(digitalRead(13) == LOW) regenbogen(5000, 255, 255);

}

void process(YunClient client) {
  // read the command
  String command = client.readStringUntil('/');

  // is "digital" command?
  if (command == "digital") {
    digitalCommand(client);
  }

  // is "analog" command?
  if (command == "analog") {
    analogCommand(client);
  }

  // is "mode" command?
  if (command == "mode") {
    modeCommand(client);
  }
}

void digitalCommand(YunClient client) {
  int pin, value;

  // Read pin number
  pin = client.parseInt();

  // If the next character is a '/' it means we have an URL
  // with a value like: "/digital/13/1"
  if (client.read() == '/') {
    value = client.parseInt();
    digitalWrite(pin, value);
  } 
  else {
    value = digitalRead(pin);
  }

  // Send feedback to client
  client.print(F("Pin D"));
  client.print(pin);
  client.print(F(" set to "));
  client.println(value);

  // Update datastore key with the current pin value
  String key = "D";
  key += pin;
  Bridge.put(key, String(value));
}

void analogCommand(YunClient client) {
  int pin, value;

  // Read pin number
  pin = client.parseInt();

  // If the next character is a '/' it means we have an URL
  // with a value like: "/analog/5/120"
  if (client.read() == '/') {
    // Read value and execute command
    value = client.parseInt();
    analogWrite(pin, value);

    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" set to analog "));
    client.println(value);

    // Update datastore key with the current pin value
    String key = "D";
    key += pin;
    Bridge.put(key, String(value));
  }
  else {
    // Read analog pin
    value = analogRead(pin);

    // Send feedback to client
    client.print(F("Pin A"));
    client.print(pin);
    client.print(F(" reads analog "));
    client.println(value);

    // Update datastore key with the current pin value
    String key = "A";
    key += pin;
    Bridge.put(key, String(value));
  }
}

void modeCommand(YunClient client) {
  int pin;

  // Read pin number
  pin = client.parseInt();

  // If the next character is not a '/' we have a malformed URL
  if (client.read() != '/') {
    client.println(F("error"));
    return;
  }

  String mode = client.readStringUntil('\r');

  if (mode == "input") {
    pinMode(pin, INPUT);
    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as INPUT!"));
    return;
  }

  if (mode == "output") {
    pinMode(pin, OUTPUT);
    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as OUTPUT!"));
    return;
  }

  client.print(F("error: invalid mode "));
  client.print(mode);
}








void regenbogen(uint32_t warteZeit, uint8_t saettigung, uint8_t hellwert)
// warteZeit = Dauer um den Farbkreis einmal zu durchlaufen
// saettigung = 0 - 255; 255 voll gesaettigte Farben
// hellwert = 0 - 255; 255 volle Helligkeit
{
  uint32_t aktuelleZeit = millis();
  uint8_t farbverschiebung = (255 * aktuelleZeit / warteZeit) % 255;

  for(uint8_t led = 0; led < NUM_LEDS; led++)
  {
    uint8_t farbwert = (led * 255 / (NUM_LEDS - 1) + farbverschiebung) % 255;
    leds[led] = CHSV(farbwert, saettigung, hellwert);
  }
  FastLED.show();
}

void farbenwechsel(uint32_t warteZeit, uint8_t saettigung, uint8_t hellwert)
// warteZeit = Dauer um den Farbkreis einmal zu durchlaufen
// saettigung = 0 - 255; 255 voll gesaettigte Farben
// hellwert = 0 - 255; 255 volle Helligkeit
{
  uint32_t aktuelleZeit = millis();
  uint8_t farbverschiebung = (255 * aktuelleZeit / warteZeit) % 255;

  for(uint8_t led = 0; led < NUM_LEDS; led++)
  {
    uint8_t farbwert = (farbverschiebung) % 255;
    leds[led] = CHSV(farbwert, saettigung, hellwert);
  }
  FastLED.show();
}

Der Code spielt für die Anleitung aber erst einmal keine Rolle.

Ich habe im Sketchordner (D:\Dropbox\Arduino\sketch_sep24b) auch einen Ordner mit www angelegt sowie eine test-HTML Seite als index.htm. Nun bin ich an dem Punkt, wo der www Ordner eigentlich auf meine Karte kopiert werden soll.

Ich starte den Upload meines Sketches mit der Arduino IDE 1.5 über Wifi. Beim Upload werde ich nach dem Passwort gefragt. Der Upload wird erfolgreich abgeschlossen, jedoch dann kommt folgende Fehlermeldung

Sketch uses 21.030 bytes (73%) of program storage space. Maximum is 28.672 bytes.
Global variables use 642 bytes (25%) of dynamic memory, leaving 1.918 bytes for local variables. Maximum is 2.560 bytes.
Warnung: Problem accessing board folder /www/sd

Unter Mount Points wird meine SD Karte jedoch richtig erkannt.

Hat Du vesucht Dein Problem auf http://forum.arduino.cc/index.php?board=93.0 zu posten? Grüße Uwe

:astonished: Das Yun Forum hab ich gestern nicht gesehen.

Ich habe deshalb das Storage Topic gewählt http://forum.arduino.cc/index.php?topic=189822.0, da dort auch einiges mit dem Yun stand und SD Karten. Die hatten aber andere Probleme damit.

So, habe bislang nun erfahren, dass die Ordner-Struktur auf dem System vorher wie folgt angelegt werden muss

…/arduino/www

Das hat nun auch soweit geklappt, dass er mir beim Sketch den sketchOrdner + die html Datei uploaded