useless Box Hilfe gesucht

Hallo,

habe es nun lange genug probiert.
Bestimmt 20 Stunden damit verbracht das Programmieren überhaupt erst mal zu verstehen aber es bringt einfach nichts. Ich verstehe nicht was da steht, und muss auch zugeben habe dafür nicht mehr die Lust noch weiter XXX Stunden an Zeit hinein zu stecken.
Daher Suche ich nun auf diesem Wege jemanden der mir, natürlich gegen Bezahlung meine Useless Box Programmiert. Gerne im Raum München, oder aber auch via DHL das ich Dir die Useless Box zukommen lassen.

Sehe das nun als letzte Möglichkeit bevor das Ding entweder am Speicher landet oder unter den Hammer kommt.

Danke

Thomas

Hast' ein paar Fotos incl. Verkabelung und Schaltplan?

hey,

ich habe mich eigentlich an diese anleitung gehalten ab 3:30

einziger unterschied ist das Soundshield vs1053, servos bewegen sich auch schon in meiner "Programmierung"

aber ja halt bei weitem nicht so wie die servos das tun sollten, geschweige denn in zusammen spiel mit dem schalter.

der finger innen drin ist offiziel noch nicht fertig war nur als rohentwurf gedacht um das mal einzustellen aber man verliert die lust wenn nichts funktioniert :confused:

Was funktioniert denn nicht?

ähm ja wenn ich das so genau wüsste dann wäre ich ja schon ein stück schlauer :smiley:
der finger oder der tür öffner fährt halt nicht so wie dieser soll, wenn der kipp schalter gedrückt wird geht alles noch weiter so 10 sekunden lang und bleibt dann irgendwo stehen ob zu oder nicht, ääähhhmmm und ich glaube es funktioniert "nur" die erste programm schleife für open door usw moment ich lade meine programmierung hoch, ah ja stimmt sound kommt auch noch ein fehler beim Hochladen

Bis move 3 ist es angepasst so das die servos nirgendwo anstöhsen aber ob das mit dem mp3 Player überhaupt funktioniert soweit bin ich noch garnicht?!

erste_stehende_Programmierung_f_r_meine_box.ino (14.5 KB)

   //Moving door
    for(pos = 30; pos < 85; pos += 3)
    {
    doorServo.write(pos);
    delay(2500);
    }

dir ist schon bewußt, dass das alleine das da (85-30)/3*2.5 = 46 Sekunden dauert?

Hallo
die Verwendung von gezählten 77 delay()-Funktionen führen zu den von Dir erwähnten Blockaden

77? Ui,ich hab' nach 3 aufgehört zu zählen :slight_smile:

Oh, ich vergaß: 20 Stunden sind ein Tropfen auf dem Heißen Stein der Programmierkunst. Zwei Nuller hinten dran, und du kannst mal so ein bischen was - das ist dann die Zeit, die die meisten mit Volldampf auf den Idiotenhügle raufbrettern - bevor sie bei ~ 5000 Stunden die Talabfahrt gemeistert haben Dunning-Kruger-Effekt – Wikipedia

und die delay_Funktionen mit dem größten Wert von 2500 hast Du bereits erwähnt

ich habe die delay zeit "erstmal" nur erhöht um sozusagen zuschauen zu können und verstehen zu können was da passiert, weil ich wie schon 2-3 mal erwähnt 0 plan davon habe. Das mir zwieblum eben gerade mal erklärt hat WAS da steht ist schonmal ein erster lern erfolg
ja das die Box nicht das beste wahl war, bzw auch die anleitung zu gering war um einfach Copy Paste zu machen und eine fertige box da zu haben, habe ich mitlerweile auch eingesehen

das freut :slight_smile:

Ein Projekt zerlegt man in Teile
zB Deckel bewegen; Finger Bewegen, Tonausgabe, ecc
Danach gehts ans zusammenbasteln eins zum anderen.

Delays sollte man vermeiden weil diese die Ausführung des Sketches blockieren.

Stattdessen kann man millis() verwenden. Siehe das Beispiel "blink without delay" in der IDE und die Nachtwächtererklährung hier im Forum.

Dazu solltest Du auch mal nachlesen was eine Schrittsteuerung ist (finite state machine).

Grüße Uwe

Hallo
nehme eine Suchmaschine Deiner Wahl und beschäftige diese mit instructables useless box :slight_smile:

thomas_boehmer:
Bis move 3 ist es angepasst so das die servos nirgendwo anstöhsen aber ob das mit dem mp3 Player überhaupt funktioniert soweit bin ich noch garnicht?!

Ok,
ich hab da mal kurz drüber geschaut - sieht recht zum aufräumen aus :wink:

Was auffällt, neben den vielen delay(), ist das if else Konstrukt im loop. Dazu dann auch noch im setup() doppelte Initialisierungen...

  sd.begin (SD_SEL, SPI_HALF_SPEED);
  MP3player.begin();
  if (MP3player.begin() != 0) Serial.print (F ("Error"));
  if (!sd.begin (SD_SEL, SPI_HALF_SPEED)) sd.initErrorHalt();

Du solltest Dich für eine der Varianten entscheiden. Entweder die ersten beiden oder die letzten beiden Zeilen.

Dann fängst Du im loop an mit:

  if (digitalRead (switch_pin) == HIGH)
  {
    if (selectedMove > 10)
    {
      selectedMove = 0;  //when all moves are played, repeat the moves from beginning
    }
    if (selectedMove == 0)
    {
      switchoff();
    }
    else
      if (selectedMove == 1)
      {
        switchoff();
      }
      else
[...]

um später unten dann:

    if (selectedMove == 0)
    {
      switchoff();
    }
    else
      if (selectedMove == 1)
      {
        switchoff();
      }

zu schreiben.
Die Frage der Fragen: welche der 77 delays können raus? (Ja alle... müssen raus) Die restlichen bekommt man dann auch noch aufgelöst.
Und: Was passiert, wenn der Schalter nicht ein ist?
Das Ding soll doch sicher in eine Ausgangsposition...

Ich hab mal Dein loop() umgeschrieben, wie ich es mir denke.

void loop()
{
  if (Testmove != 0)
  {
    selectedMove = Testmove;
  }
  //if the switch is on, then move door and hand to switch it off...
  if (digitalRead (switch_pin) == HIGH)
  {
    if (selectedMove > 10)
    {
      selectedMove = 0;  //when all moves are played, repeat the moves from beginning
    }
    switch (selectedMove)
  {
    case 0:
      switchoff();
        break;
      case 1:
        switchoff();
        break;
      case 2:
        switchoffbitaraddod();
        break;
      case 3:
        crazydoor();
        break;
      case 4:
        crazyslow();
        break;
      case 5:
        m7anika7anika();
        break;
      case 6:
        m3alla2();
        break;
      case 7:
        switchoff();
        break;
      case 8:
        matrix();
        break;
      case 9:
        sneak();
        break;
      case 10:
        zee7();
        break;
      default:
        selectedMove = 0;
        break;
    }
    if (!Testmove) selectedMove++;         //swith to next move if not in test mode
  }
// EDIT
  else // Wenn Schalter aus
  {
    switchoff();
    selectedMove = 0;
  }

}

Hinweis: Ich benutze eine etwas andere Formatierung - wenn den Code übernommen hast, einfach STRG-T drücken...

Hey, danke für die hilfer stellung, ich kann nur das machen was du gesagt hast, es ist nicht so als würde ich irgendwas von dem verstehen was du mir da mitteilen wolltest. Das etwas doppelt drin steht ja das sehe ich aber, vielleicht gehört das so, ich hab ja keine ahnung?!

Danke das du dir die mühe gemacht hast einen Code zu schreiben, auch diesen habe ich versucht einzukopieren an die stelle wo ich glaube das dieser hin gehört. Leider wird mir ein fehler angezeigt und
"switch selectMove" ist rot hinterlegt.

Ich würde gerne konstruktivere fehler meldungen geben aber wie gesagt 0 plan sorry

Die Überschrift ist aber immer noch "programm" ich suche immer noch jemanden der das Programmieren übernehmen will gegen entgeld? Wenn sich keiner finden lässt kann man dann auch gerne die unfertige Box für wenig haben zum ausschlachten.

Tschüss

thomas_boehmer:
Danke das du dir die mühe gemacht hast einen Code zu schreiben, auch diesen habe ich versucht einzukopieren an die stelle wo ich glaube das dieser hin gehört. Leider wird mir ein fehler angezeigt und
"switch selectMove" ist rot hinterlegt.

Aehm... sorry, da fehlten noch die Klammern. Ich habs geändert. war nur mal so reingetackert... - Nochmal rauskopieren.

Ich würde gerne konstruktivere fehler meldungen geben aber wie gesagt 0 plan sorry

Die Überschrift ist aber immer noch "programm" ich suche immer noch jemanden der das Programmieren übernehmen will gegen entgeld? Wenn sich keiner finden lässt kann man dann auch gerne die unfertige Box für wenig haben zum ausschlachten.

Ach das mit der Fehlermeldung bekommen wir ganz schnell hin.
Unter DATEI-Vorerinstellungen Haken rein bei:
"Ausführliche Ausgabe während [x] Kopilierung"
Das was dann unten im schwarzen Fenster rauskommt, kannst schön mit der Maus markieren, kopieren und hier in CodeTags wieder einfügen.
Voila!
Wieder was gelernt :wink: Garnicht so schwer.

Und nein, ich denke Du willst nicht, das Dir jemand ein seriöses Angebot macht für das Spielzeug.
Du kannst natürlich sagen, das Dir der Preis egal ist, dafür gibts Jobs and Paid Consultancy - Arduino Forum

Mein gut gemeinter Rat:
Lies einfach mal in das pdf von ArduinoForum.de - Das deutschsprachige Forum rund um den Arduino - Arduino Code-Referenz (deutsch)
Nur drüber lesen! Nicht alles wirklich verstehen - das kommt mit der Zeit. Und davon dürfte der Eine oder Andere die nächsten Wochen noch genügend haben.

Mach hier einfach einen Schritt nach dem anderen - Das wird. versprochen.
Heute ist Dienstag, ich denke am Sonntag sollte das Ding funktionieren.

Hey, ok werd ich morgen ausprobieren, heute nicht mehr.
Danke für deine Mühen.
Das PDF sieht mal so aus als wäre das etwa das was ich bräuchte um mal irgendwas zu verstehen.
An Zeit soll es momentan nicht mangeln, nur an der Lust. Nach 5-6 tagen und es bewegen sich gerade mal nur die servos und das auch noch falsch ist das ganze sehr ernüchternd. Aber gut ich bleibe mal noch dran.

Danke für die Hilfe auf jedenfall schonmal!

thomas_boehmer:
Danke für die Hilfe auf jedenfall schonmal!

Gerne.

Solltest Du Dich doch fürs selbermachen entscheiden, dann änder in Deinem ersten Post(!) den Betreff z.B. in "useless Box Hilfe gesucht" oder so ähnlich.
Das passt dann sicher besser und ggfls. schaut noch wer drauf, der sowohl servo als auf MP3 macht :wink:
Na dann.
Aufgabe: Probier die loop() aus, bitte komplett kopieren, entscheide Dich, welche zwei Zeilen Du im Setup nutzen willst und dann lösche alle delays, die Du nur für Dich eingebaut hast.
Dann den neuen Sketch hier eintackern - und das wird.