EV3-Basic: Tipps und Tricks

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

Moderator: Moderatoren

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

EV3-Basic: Tipps und Tricks

Beitragvon HaWe » 30. Mär 2015 09:27

hallo,
hier in diesem Thread könnt ihr fertige, bewährte Programmiertipps und Tricks zu EV3-Basic posten, die anderen beim programmieren hilfreich sein könnten (keine Fragen, sondern nur Vostellung mit Source-Code).
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: EV3-Basic: Tipps und Tricks

Beitragvon Peter28 » 30. Mär 2015 10:53

Hallo,
hier mal 3 Unterprogramme zum experimentieren. Diese sind Hin- und Herbewegung eines Armes mit vorgegebenem Winkel, die Rückstellung in Mittelstellung nach Beenden dieser HuH-Beweg. und eine komfortable Abfrage der IR-St. für 2 Kanäle je links- und rechts oben bzw. unten und Mittelknopf. Es lassen sich damit insgesamt mal schnell 20 Zustände schalten. Die write-Bef. und Delay's sind nur zum prüfen und können dann natürlich ins Nirvana.

Code: Alles auswählen

'-- Start in Mittelstellung -----
Thread.Run=schwenken  '#######################
Thread.Run=IRSteuerung ' #######################
k2mitte=0
While k2mitte=0
  TextWindow.Write(k1lo)
  TextWindow.Write(k1lu)
  TextWindow.Write(k1ro)
  TextWindow.Write(k1ru)
  TextWindow.Write(k1mitte)
  TextWindow.Write("    ")
  TextWindow.Write(k2lo)
  TextWindow.Write(k2lu)
  TextWindow.Write(k2ro)
  TextWindow.Write(k2ru)
  TextWindow.Write(k2mitte)
  TextWindow.Writeline(" ")
  Program.Delay(1000) 
EndWhile 
Thread.Run=mittelstellung
Program.Delay(5000)

Sub IRSteuerung
  k1lo=0 ' im Hauptprogramm am Anfang definieren und hier raus
  k1lu=0 ' im Hauptprogramm am Anfang definieren und hier raus
  k1ro=0 ' --- bedeutet Kanal 1 Taste rechts oben --------------
  k1ru=0 ' im Hauptprogramm am Anfang definieren und hier raus
  k1mitte=0
  k2lo=0 ' im Hauptprogramm am Anfang definieren und hier raus
  k2lu=0 ' im Hauptprogramm am Anfang definieren und hier raus
  k2ro=0 ' im Hauptprogramm am Anfang definieren und hier raus
  k2ru=0 ' im Hauptprogramm am Anfang definieren und hier raus
  k2mitte=0
  sensor.SetMode(2,2)
  While "true"
    '------- Kanal 1
    x=sensor.ReadRaw(2,1)
    if x[0]=1 Then
      k1lo=1
    Else
      k1lo=0
    EndIf
    if x[0]=2 Then
      k1lu=1
    Else
      k1lu=0
    EndIf   
    if x[0]=3 Then
      k1ro=1
    Else
      k1ro=0
    EndIf
    if x[0]=4 Then
      k1ru=1
    Else
      k1ru=0
    EndIf
    if x[0]=9 Then
      k1mitte=1
    Else
      k1mitte=0
    EndIf
    '------ Kanal 2
    x=sensor.ReadRaw(2,2)   
    if x[1]=1 Then
      k2lo=1
    Else
      k2lo=0
    EndIf
    if x[1]=2 Then
      k2lu=1
    Else
      k2lu=0
    EndIf   
    if x[1]=3 Then
      k2ro=1
    Else
      k2ro=0
    EndIf
    if x[1]=4 Then
      k2ru=1
    Else
      k2ru=0
    EndIf
    if x[1]=9 Then
      k2mitte=1
    Else
      k2mitte=0
    EndIf   
'----bis Kanal 4 erweiterbar lt. Schema   
  EndWhile
EndSub

Sub schwenken
  Tempo=10
  winkel=70
  i=0
  Motor.ResetCount("B")
  while "true"
    Motor.Speed("B",Tempo)
    Motor.Start("B")
    While i<winkel
      i = Motor.GetCount("B")
    EndWhile
    Motor.Stop("B","TRUE")
    Motor.Speed("B",-Tempo)
    Motor.Start("B")   
    While i>0
      i = Motor.GetCount("B")
    EndWhile
    While i>-winkel
      i = Motor.GetCount("B")
    EndWhile
    Motor.Stop("B","TRUE")
    Motor.Speed("B",Tempo)
    Motor.Start("B")
    While i<0
      i = Motor.GetCount("B")
    EndWhile
    Motor.Stop("B","TRUE")   
  EndWhile
EndSub
'### ###############################
Sub mittelstellung
  If i>=0 then
      Motor.Speed("B",-Tempo)
      Motor.Start("B")   
      While i>0
          i = Motor.GetCount("B")
      EndWhile
      Motor.Stop("B","TRUE")
     else
      Motor.Speed("B",Tempo)
      Motor.Start("B")
      While i<0
          i = Motor.GetCount("B")
      EndWhile
      Motor.Stop("B","TRUE")
    endif
EndSub   

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: EV3-Basic: Tipps und Tricks

Beitragvon c0pperdragon » 30. Mär 2015 22:24

Hi Peter!
Super, dass du da schon so schön ins EV3-Basic-Programmieren reingekommen bist.
Ich hätte sogar noch einen Tip für die Fernsteuerung: Man kann sogar bis zu 2 Knöpfe gleichzeitig drücken und im Programm die Kombinationen abfragen (hätte ich sogar im Anhang der aktuellen Doku beschrieben).

Code: Alles auswählen

A = 1    A&B = 10   B&C = 7
B = 2    A&C = 5    B&D = 8
C = 3    A&D = 6    C&D = 11
D = 4               E = 9

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: EV3-Basic: Tipps und Tricks

Beitragvon Peter28 » 31. Mär 2015 06:11

Hallo,
habe ich mit SB auch schon probiert und ausgelesen. Klar, da bekommt man noch 6 weitere Werte pro Kanal, aber in meiner Routine wollte ich absichtlich nur die 5 Grundtasten und erst mal 2 Kanäle verwenden. Falls es jemand benutzt wird er ja sonst erschlagen. "Und im Vertrauen" - wer braucht schon 44 Schaltvorgänge und kann sich dann auch noch merken, was er damit anrichtet.
Tschüß

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

Re: EV3-Basic: Tipps und Tricks

Beitragvon HaWe » 31. Mär 2015 07:48

man könnte es als alphanumerische Tastatureingabe verwenden... 8-)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: Tipps und Tricks zu EV3-Basic

Beitragvon c0pperdragon » 12. Apr 2015 10:40

Wie kann Dauer einer while-Schleife in SB gemessen werden ?

Du kannst mit EV3.Time die aktuelle Zeit (ms seit Programmstart) auslesen. Musst du nur vor und nach der Schleife messen und Differenz berechnen.

Im Batteriebetrieb ist so was unpraktisch. Haber mir schon längst einen Netzadapter angeschlossen. Ein 9V/2A Steckernetzteil um Ca.15 Eur. Muss man aber ein bisschen was basteln.

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

Re: EV3-Basic: Tipps und Tricks

Beitragvon HaWe » 12. Apr 2015 17:29

wird es eine Möglichkeit geben, in der VM den gesamten autodetect-Kram zu disablen, sodass man (wie beim NXT oder auch jedem anderen embedded MCU) Portnummer, Sensortyp und SensorMode komplett manuell festlegen kann?
z.B. SetSensorType(port, type, mode)

SetSensorType(S1, UART, IRRemote)
SetSensorType(S1, UART, EV3ultrasonic)
SetSensorType(S1, UART, raw9600)
SetSensorType(S1, UART, raw38400)

SetSensorType(S2, I2C, HTCompass)
SetSensorType(S2, I2C, HTAccelerometer)
SetSensorType(S2, I2C, NXTultrasonic)
SetSensorType(S2, I2C, NXTColor)
SetSensorType(S2, I2C, custom)

SetSensorType(S3, ADC, touch)
SetSensorType(S3, ADC, pulse)
SetSensorType(S3, ADC, edge)
SetSensorType(S3, ADC, raw)
SetSensorType(S3, ADC, HTGyro)
SetSensorType(S3, ADC, NXT1LightActive)

SetMotor(A, EV3Large)
SetMotor(B, EV3medium)
SetMotor(C, PFLarge)
SetMotor(D, RCX)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: EV3-Basic: Tipps und Tricks

Beitragvon c0pperdragon » 13. Apr 2015 07:10

Nein. Die Firmware ist praktisch um diese Autodetektion herum konstruiert. Ich finde das auch gar nicht so schlecht für die allermeisten Fälle. Wenn man selbst Sensoren baut, dann ist das natürlich kniffliger, aber es geht trotzdem. Habe schon einen UART-Sensor hinbekommen.

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

Re: EV3-Basic: Tipps und Tricks

Beitragvon HaWe » 13. Apr 2015 08:30

schade. Das ist eine Sache, die für mich eindeutig den NXT transparenter und flexibler macht, aber naja.
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E


Zurück zu „textbasierte Programmiersoftware“

Wer ist online?

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

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss