Swift Playgrounds und EV3: Übersicht und erste Beispiele

NXC, C/C++, Lejos, pbLua, RobotC...

Moderator: Moderatoren

ralfb1105
Mindstormsfreund
Mindstormsfreund
Beiträge: 4
Registriert: 19. Dez 2017 15:38

Swift Playgrounds und EV3: Übersicht und erste Beispiele

Beitragvon ralfb1105 » 3. Jan 2018 18:52

Hallo,

ich habe mir ein Lego Mindstorms EV3 Set gekauft und versuche die Programmierung über die Sprache "Swift" mit Hilfe der IOS Swift Playgrounds App zu realisieren. Bei der Suche nach Informationen zu EV3 und zur Programmierung bin ich auf dieses Forum gestoßen, habe aber leider keine Einträge zu Swift und EV3 gefunden.

Vielleicht gibt es dennoch gleichgesinnte die auch an der Programmierung mit Swift interessiert sind und Ideen, Tipps und Tricks austauschen möchten.

Eine Frage an die Moderatoren:

Wäre es möglich die Sprache Swift in die Liste der aufgeführten Text basierten Software aufzunehmen?
Zur Zeit arbeite ich daran das EV3 API der Swift Playgrounds zu beschreiben, da es dieses nur als Hilfe im Playground gibt, aber nicht als zusammenhängende Referenz. Diese Referenz wäre dann mein erster Beitrag zu "Swift & EV3".

Gruß

Ralf

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5228
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Swift Playgrounds und EV3

Beitragvon HaWe » 3. Jan 2018 21:37

hallo, willkommen hier im Forum!
Klar kann Swift mit gelistet werden, kein Problem - schick doch mal 1 oder 2 Links zu Übersichts-Seiten!
Danke im vorraus ,viel Spaß und Erfolg, und auf eine gute Zusammenarbeit hier im Forum!
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

ralfb1105
Mindstormsfreund
Mindstormsfreund
Beiträge: 4
Registriert: 19. Dez 2017 15:38

Re: Swift Playgrounds und EV3

Beitragvon ralfb1105 » 5. Jan 2018 09:45

Hallo HaWe,

Danke für die schnelle Antwort. Sobald ich die EV3 Referenz erstellt habe erstelle ich dazu auf meiner Homepage eine Extra Seite.
Beispiel Lösungen zu den Swift Playgrounds und Links zu Swift Doku Referenzen gibt es bei mir unter:

https://ralfb-web.de/Swift/

Gruß,

Ralf

ralfb1105
Mindstormsfreund
Mindstormsfreund
Beiträge: 4
Registriert: 19. Dez 2017 15:38

Re: Swift Playgrounds und EV3

Beitragvon ralfb1105 » 5. Jan 2018 09:49

Hallo,

hier noch die separaten Links zur Swift Referenz:

https://developer.apple.com/library/con ... 97-CH3-ID0
https://swift.org/

Gruß

Ralf

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5228
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Swift Playgrounds und EV3

Beitragvon HaWe » 6. Jan 2018 11:39

danke, habe es ergänzt
viewtopic.php?f=71&t=1505&p=57794#p57794

gibt es Programmierbeispiele, so ähnlich wie hier: viewtopic.php?f=25&t=4937 :?:

Bin gespannt auf deine Beispiele dazu und mache es auch dann gleich "sticky"! :prima:
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

ralfb1105
Mindstormsfreund
Mindstormsfreund
Beiträge: 4
Registriert: 19. Dez 2017 15:38

Re: Swift Playgrounds und EV3: Übersicht und erste Beispiele

Beitragvon ralfb1105 » 9. Jan 2018 14:47

Hallo,

hier mal drei kleine Beispielprogramme die Ihr einfach in der IOS Swift Playgrounds App (https://www.apple.com/de/swift/playgrounds/) in einer EV3-Vorlage (im Menupunkt "Zubehör") testen könnt. Ich habe dazu den EV3 Roboter "EV3MEG" verwendet. Die Bauanleitung findet Ihr in der Lego Programmier Software oder unter: https://www.lego.com/de-de/service/buildinginstructions/search?initialsearch=31313#?text=31313.
Info: der Code enthält ein paar Kommentare (/* ... */) um die einzelnen Bausteine zu erklären.

1. EV3 MEG - Mission 1
Der Roboter fährt durch die Gegend und bewegt seine Arme und spielt dazu ein Sound-File ab.
Es werden die großen Motoren (B+C) sowie der mittlere Motor (D) verwendet.

Code: Alles auswählen

/*
 EV3 MEG - Mission 1
 */

/* Variablen definieren */
var loop1Count = 0
var loop2Count = 0

/* Funktionen */
func resetAll() {
    /* ALle Motor Counter auf 0 setzen */
    ev3.resetMotor(on: .a)
    ev3.resetMotor(on: .b)
    ev3.resetMotor(on: .c)
    ev3.resetMotor(on: .d)
}
func snapArm(count: Int) {
    /* Sound File abspielen und die Arme auf und ab bewegen. Über den Funktions Übergabe Parameter "Count" kann definiert werden wie häufig die Arme bewegt werden. */
    ev3.playSound(file: .snap, atVolume: 100, withStyle: .playOnce)
    while loop2Count < count {
        ev3.motorOn(forSeconds: 0.15, on: .d, withPower: 75, brakeAtEnd: false)
        ev3.motorOn(forSeconds: 0.15, on: .d, withPower: -75, brakeAtEnd: false)
        loop2Count += 1
    }
}

/* Hauptprogramm startet hier ... */

resetAll()
while loop1Count < 1 {
    /* Arme in Grundposition */
    ev3.motorOn(forSeconds: 1, on: .d, withPower: -11, brakeAtEnd: false)
        /* Roboter bewegen ... */
    ev3.move(forSeconds: 1, leftPort: .c, rightPort: .b, leftPower: -100, rightPower: -50, brakeAtEnd: false)
    snapArm(count: 2)
    ev3.move(forSeconds: 1, leftPort: .c, rightPort: .b, leftPower: -50, rightPower: -50, brakeAtEnd: false)
    ev3.playSound(file: .arm, atVolume: 100, withStyle: .playOnce)
    snapArm(count: 2)
    ev3.move(forSeconds: 1, leftPort: .c, rightPort: .b, leftPower: -100, rightPower: -50, brakeAtEnd: false)
    ev3.move(leftPort: .c, rightPort: .b, leftPower: 100, rightPower: -100)
    ev3.playSound(file: .arm, atVolume: 100, withStyle: .playOnce)
    snapArm(count: 6)
    loop1Count += 1
}


2. EV3MEG - Test1
Hier wird dargestellt wie der Roboter rechts/links rum fährt oder ein Lied abspielt. Auch hier findet Ihr ein paar nützliche Kommentare im Code.

Code: Alles auswählen

/*
 EV3MEG Test 1
 */

/* Funktionen definieren */

func resetAll() {
    /* Motoren Count auf 0 setzen */
    ev3.resetMotor(on: .a)
    ev3.resetMotor(on: .b)
    ev3.resetMotor(on: .c)
    ev3.resetMotor(on: .d)
}
func turnEV3(direction: String) {
    /* Roboter dreht links (left) oder rechts (right) herum, je nach Übergabe Parameter */
    if direction == "left"  {
        ev3.motorOn(forRotations: 2, on: .b, withPower: -80, brakeAtEnd: true)
    } else if direction == "right" {
        ev3.motorOn(forRotations: 2, on: .c, withPower: -80, brakeAtEnd: true)
    }
}
func backEV3(seconds: Float) {
    /* Roboter fährt für "seconds" Sekunden rückwärts. Beim RÜckwärts fahren wird ein Ton gespielt */
    ev3.playSound(file: .laser, atVolume: 20, withStyle: .playRepeat)
    ev3.move(forSeconds: seconds, leftPort: .c, rightPort: .b, leftPower: motorPower, rightPower: motorPower, brakeAtEnd: false)
}

func playSong() {
    /*
     Alle meine Entchen
     C D E F G G
     A A A A G
     A A A A G
     F F F F E E
     D D D D C
     */
   
    /* Pro Zeile ein Array mit den Noten füllen */
    var notes1: [Note] = [.cSharp4,.dSharp4,.e4,.fSharp4,.gSharp4,.gSharp4]
    var notes2: [Note] = [.aSharp4,.aSharp4,.aSharp4,.aSharp4,.gSharp4]
    var notes3: [Note] = [.aSharp4,.aSharp4,.aSharp4,.aSharp4,.gSharp4]
    var notes4: [Note] = [.fSharp4,.fSharp4,.fSharp4,.fSharp4,.e4,.e4]
    var notes5: [Note] = [.dSharp4,.dSharp4,.dSharp4,.dSharp4,.cSharp4]
   
    /* Lied spielen in dem durch die Arrays iteriert wird */
    for notes in [notes1,notes2,notes3,notes4,notes5] {
        for currentNote in notes {
            ev3.playSound(note: currentNote, forSeconds: 0.3, atVolume: 15)
        }
        ev3.waitFor(seconds: 0.7)
    }
}

/* Setze die Motor Power per Zufall */
let motorPower = random(max: 40) + 20
var loopCount1 = 0
resetAll()

while loopCount1 < 2 {
    /* Bewege den Roboter eine Umdrehung vorwärts */
    ev3.move(forRotations: 1, leftPort: .c, rightPort: .b, leftPower: -motorPower, rightPower: -motorPower, brakeAtEnd: false)
   
        /* Links und rechts herum */
    turnEV3(direction: "left")
    turnEV3(direction: "right")
   
        /* Roboter für 3 Sekunden rückwärts fahren */
    backEV3(seconds: 3)
   
        /* Lied spielen */
    playSong()
    loopCount1 += 1
}


3. EV3MEG - Display
Hier ein Beispiel wie das Display angesteuert werden kann.

Code: Alles auswählen

ev3.display(text: "Hello, human!", atX: 40, atY: 60, withColor: .white, withFont: .bold, clearScreen: true)
ev3.waitFor(seconds: 10)
ev3.displayCircle(centerX: 88, centerY: 63, withRadius: 40, withFill: true, withColor: .black, clearScreen: true)
ev3.waitFor(seconds: 30)


Wie man sieht, nicht zu schwierig und die Swift Playground App bietet eine gute Hilfe, einfach "ev3." eingeben und es erscheinen alle möglichen Vorschläge des zur Verfügung stehenden API.
Ich bin dasbei das API in eine Web Seite zu gießen, das dauert allerdings noch ein wenig.

Ich muss dabei sagen das leider nicht alle der EV3 Brick Möglichkeiten im API zur Verfügung stehen, wie z.B. die IR Ansteuerung (Fernsteuerung des Roboter). Vielleicht bessert Apple hier ja noch in naher Zukunft nach. Des weiteren ist es in der Swift Playgrounds App nicht möglich MultiTasking (Dispatch Queue) zu nutzen.

Bei Fragen, Ideen, etc. ... einfach melden :)

Gruß

Ralf


Zurück zu „textbasierte Programmiersoftware“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss