EV3-Basic - Kurzanleitung

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

Moderator: Moderatoren

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

EV3-Basic - Kurzanleitung

Beitragvon c0pperdragon » 9. Feb 2015 18:59

Hallo Leute!

Nach allgemeiner Meinung gibt es ja bis jetzt keine Möglichkeit den EV3 mit einer Programmiersprache zu programmieren für die man keine mehrjährige Erfahrung im IT-Bereich braucht. Was extrem schade ist, weil die Hauptzielgruppe für Lego ja gerade Kinder sind, die damit einen perfekten Einstieg in die Programmierung finden könnten.

Weil ich das einfach nicht so lassen kann, habe ich EV3Basic entwickelt. Dieses System hat zwei unabhängige Komponenten:

1. Eine EV3-Extension für Microsoft Small Basic (das ist eine IDE und Programmiersprache von Microsoft, die für Anfänger (Kinder) entwickelt wurde). Mit dieser kann man den EV3 mit einem Basic-Programm, das auf dem PC läuft, steuern.
2. Einen Compiler, der das Small Basic - Programm zu Bytecode für den EV3 compiliert (ähnlich wie NXC, nur halt mit Basic). Wenn man beim Programmieren nicht gerade die etwas seltsameren Features von Small Basic verwendet, geht das eigentlich problemlos.

Der normale Weg, das zu benutzen, wäre, mit der Small Basic IDE zu entwickeln, und dann den EV3Explorer (mit integrierten Compiler) zu verwenden um die Sachen als autonomes Programm auf den EV3 zu bringen.

Derzeit wird nur USB als Verbindung vom PC unterstützt, und es gibt überhaupt noch viel zu tun, aber wenigstens die Sensoren kann man schon ansprechen ;-)

Wer das mal anschauen will, findet die aktuelle Version auf: https:/github.com/c0pperdragon/EV3Basic
Installationsanleitung gibt's dort direkt auf der Hauptseite.

Würde mich sehr freuen, wenn das jemand ausprobieren mag und mir Feedback schickt.

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

EV3-Basic - Kurzanleitung

Beitragvon c0pperdragon » 19. Mär 2015 12:26

EV3-Basic - Kurzanleitung

Prinzipiell habe ich mich bemüht, alles so einfach wie nur irgendmöglich zu halten, aber trotzdem braucht man wahrscheinlich ein bisschen Hilfe für den ersten Einstieg.

Also, Schritt für Schritt:

0. Zuallererst die EV3-Original-Software installieren, damit alle EV3-Treiber und Tools installiert sind. (- edited: HaWe - )

1. Microsoft Small Basic runterladen und installieren. Gibt es gratis auf: http://smallbasic.com/
Das benötigt außerdem ein Windows mit mindestens .NET 3.5 und 4.0 (ist auf nicht gerade uralten Windows-en schon dabei)
Für Windows VIsta oder Windows 7 wird auch .NET Framework 4.5 benötigt https://www.microsoft.com/en-us/downloa ... x?id=30653 (ggf. zuerst installieren!).

2. Aktuelle Version von EV3-Basic runterladen. Die gibt es auf https://github.com/c0pperdragon/EV3Basic/releases und besteht
aus ev3extension.zip, ev3explorer.zip und optional samples_and_doc.zip

3. Die ev3extension muss man ins Installations-Verzeichnis von Small Basic (wahrscheinlich C:/Programme (x86)/Microsoft/Small Basic) entpacken. Dadurch müsste in diesem Verzeichnis jetzt ein "lib" - Unterverzeichnis mit zwei .dll und einer .xml - Datei enstehen.

Jetzt müsste es schon möglich sein, Small Basic mit der EV3-Erweiterung zu benutzen um am PC Basic-Programme zu schreiben mit denen sich der Brick fernsteuern lässts. Beim Start von Small Basic ist man gleich in einer recht einfachen IDE drinnen wo man Beispielprogramme laden und ausführen kann.
Damit die Befehle für den Brick das Gerät auch finden, muss es über USB am PC angeschlossen werden. (Bluetooth oder WLAN habe ich noch nicht gemacht).

Wenn das mal geklappt hat, dann gibt es natürlich die Möglichkeit, das Basic-Programm direkt auf den Brick zu kompilieren.
Dazu musst du:

4. das ev3explorer.zip von https://github.com/c0pperdragon/EV3Basic entpacken (an einen Ort deiner Wahl) und das darin befindliche EV3Explorer.exe starten.
Neu: Installer auf https://github.com/c0pperdragon/EV3Basic/releases.
Manuelle Explorer-Installation: siehe https://github.com/c0pperdragon/EV3Basi ... -142739192

Da bekommst du dann ein Fenster in dem du das Dateisystem vom EV3 anschauen und Dateien vom PC zum EV3 und zurück übertragen kannst. Ist von der Bedienung so ähnlich wie der Explorer vom Brixcc, allerdings ohne Drag-und-Drop sondern alles geht nur mit Buttons.

5. Mit dem EV3-Explorer die Datei im PC suchen, die das Basic-Programm enthält (endet normalerweise auf .sb) und mit dem Button "Compile and Run" zu einem .rbf compilieren (das ist das Dateiformat für die Bytecode-Programme), auf den Brick transportieren und sofort ausführen.

Wenn du das Programm mit dem Menu am Brick starten willst, musst du am Brick ein passendes Unterverzeichnis von ..../prjs/ anlegen (z.B. Samples) in das du dein .rbf reincompilierst. Nur dann scheint das auch im Menü auf.

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

Re: EV3-Basic - Kurzanleitung

Beitragvon HaWe » 22. Sep 2015 10:54

EV3Basic: EV3 Brick Grundfunktionen
s.a.:
http://www.legoengineering.com/introducing-ev3-basic/
https://sites.google.com/site/ev3basic/

EV3Basic Handbuch:
https://github.com/c0pperdragon/EV3Basic/releases/download/v1.0.9/ev3basic_handbuch.html
https://github.com/c0pperdragon/EV3Basic/releases/download/v1.0.9/ev3basic_manual.html
Beispiele aus Github https://github.com/c0pperdragon/EV3Basic/tree/master/Examples :

erster Test (aus ev3basic_manual_de) im Programm-Ordner:

Erstes Programm: "Hello EV3" auf dem EV3 Schirm ausgeben.
Dazu diese 3 Zeilen in das Programm-Fenster tippen (oder kopieren):

Code: Alles auswählen

LCD.Clear()
LCD.Write(40,40, "Hello EV3")
Program.Delay(10000)
Sobald der EV3-Brick über ein USB-Kabel mit dem PC verbunden und eingeschaltet ist, kann man das Programm mit dem großen blauen "Ausführen" - Knopf von Small Basic starten.


Battery Level in Prozent: Battery.sb (aus Github Examples):

Code: Alles auswählen

While "True"
  LCD.StopUpdate()
  LCD.Clear()
  LCD.Text(1, 0,30, 1, "Battery Level Percent")
  LCD.Text(1, 50,50, 2, EV3.BatteryLevel)
  LCD.Update()
  Program.Delay(1000)
endwhile


Melodie-Ausgabe: Melody.sb (aus Github Examples):

Code: Alles auswählen

V = 30
T = 380

Speaker.Tone(V, 262, T)
Speaker.Wait()
Speaker.Note(V, "C4", T)
While Speaker.IsBusy()
  Program.Delay(2)
endwhile
Speaker.Note(V, "E4", T)
Speaker.Wait()
Speaker.Note(V, "G4", T)
Speaker.Wait()
Speaker.Note(V, "G4", T)
Speaker.Wait()
Program.Delay(T)
Speaker.Note(V, "G4", T)
Speaker.Wait()
Speaker.Note(V, "G4", T)
Speaker.Wait()
Program.Delay(T)
Speaker.Note(V, "E4", T)
Speaker.Wait()
Speaker.Note(V, "E4", T)
Speaker.Wait()



Wave Sound und Bitmaps wiedergeben: GraphicsAndSounds.sb (Github)
Grafik und Sound sind hier zu finden: https://github.com/c0pperdragon/EV3Basic/tree/master/Examples/GraphicsAndSounds

Code: Alles auswählen

' This example uses graphics and sound resources that must be already
' present on the EV3 in order to access them from the program.
' In this chase, a bitmap file (yamyam.rgf) and a sound file (emerald.rsf)
' are expected to exist in a sub-folder "GraphicsAndSounds'  inside the
'  "prjs" folder (you can create such a folder and transfer the files from the examples
' to the  EV3 with the EV3Explorer. Contrary to the Small Basic convention,
' filenames for the EV3 are case-sensitive (because it is a Linux file system).
'
' As long as the EV3 explorer does not support file format conversion, you
' will probably still need the standard lego software to create you own sounds
' and bitmaps.


LCD.Clear()
LCD.BmpFile(1, 40,10, "GraphicsAndSounds/yamyam")

Speaker.Play(100, "GraphicsAndSounds/emerald")

Program.Delay(1000000)




Türme von Hanoi:
TowersOfHanoi.sb (Demo für rekursive Funktionen, aus Github Examples):

Code: Alles auswählen

' small demonstration for recursive programming
' solve and visualize the old "towers of hanoi" problem.

tower[0] = "JIHGFEDCBA"
tower[1] = ""
tower[2] = ""
draw()

a = 0
b = 2
n = 10
move()
Program.Delay(1000000)

' moves n pieces from tower[a] to tower[b]
Sub move
  If n=1 Then
    move1()
  Elseif n>1 Then
    n = n-1       ' move n-1 pieces to temporary tower
    b = 3-a-b
    move()
    b = 3-a-b     ' restore b
    move1()       ' move the nth piece to destination   
    a = 3-a-b   
    move()        ' move n-1 pieces from temporary tower to destination   
    a = 3-a-b     ' restore a
    n=n+1         ' restore n   
  EndIf 
EndSub

' move top piece from tower[a] to tower[b]
Sub move1
  Program.Delay(1000)
  l = Text.GetLength(tower[a])
  newb = tower[b] + Text.GetSubText(tower[a],l,1)
  tower[b] = newb
  tower[a] = Text.GetSubText(tower[a], 1,l-1)
  draw()
EndSub
 
' draw the current state of the towers
Sub draw
  LCD.StopUpdate()
  LCD.Clear()
  For i=0 To 7
    For j=1 To Text.GetLength(tower[i])
      w = 10+4*(Text.GetCharacterCode(Text.GetSubText(tower[i],j,1))-64)
      LCD.FillRect(1, i*60+30-w/2, 126-j*11, w,10)
    EndFor
  EndFor 
  LCD.Update()
EndSub



Mit Buttons eine Grafik (Kreis) auf dem Display bewegen: MovingCircle.sb (Github):

Code: Alles auswählen

X = 80
Y = 64

While "True"
 
  k = Buttons.Current
  If Text.IsSubText("L",K) then
    X = X-1
  ElseIf Text.IsSubText("R",K) then
    X = X+1
  ElseIf Text.IsSubText("U",K) then
    Y= Y-1
  ElseIf Text.IsSubText("D",K) then
    Y= Y+1
  ElseIf Text.IsSubText("E",K) then
    Program.End()
  endif 
 
  LCD.StopUpdate()
  LCD.Clear()
  LCD.Text(1, 0,0, 1, "Use directional buttons ...")
  LCD.FillCircle(1, X,Y, 20)
  LCD.Update()
 
  Program.Delay(10)
 
EndWhile



Zeit / Timer auslesen: TimeMeasurement.sb (Github):

Code: Alles auswählen

For i=1 To 100000
  LCD.StopUpdate()
  LCD.Clear()
  LCD.Text(1, 20,20, 1, "Time since start")
  LCD.Text(1, 20,40, 1, EV3.Time+" ms")
  LCD.Update() 
  Program.Delay(100)
EndFor



einfache Multitasking-Demo: Threads.sb (Github):

Code: Alles auswählen

LCD.Clear()
Thread.Run = BLINKER

Sub BLINKER
  While "true"
    EV3.SetLEDColor("ORANGE","NORMAL")
    Program.Delay(500)
    EV3.SetLEDColor("OFF","NORMAL")
    Program.Delay(500)
  EndWhile
EndSub

For y=0 to 120 Step 10
  LCD.Text(1,0,y,1,"Tick")
  Program.Delay(400)
endfor




Mathematik: Vektor- und Matrix Operationen: VectorDemo.sb (Github):

Code: Alles auswählen

' ------------ VECTOR OPERATIONS -----------------
' ---------- proceed calc: press btn! ------------

LCD.Clear()
LCD.Text(1, 0,0, 1,"Vector operations")

A = Vector.Init(5, 0)    ' create vector with 5 elements 0
A[0] = 13                ' add some data
A[1] = -8                ' add some data
A[4] = 4                 ' add some data
LCD.Text(1, 0,24,0,  "A: ")
For i=0 To 4
  LCD.Text(1, 30+20*i,24, 1, A[i])
EndFor

' add 7 to every element of V and store in X
B = Vector.Init(5, 7)       ' create a vector with all 7s
LCD.Text(1, 0,36, 1," + ")
For i=0 To 4
  LCD.Text(1, 30+20*i,36, 1, B[i])
EndFor

' add these two vectors number-wise
X = Vector.Add(5, A,B) 
LCD.Text(1, 0,48,  1,"X: ")
For i=0 To 4
  LCD.Text(1, 30+20*i,48, 1, X[i])
EndFor

' compute the scalar product of A and X and store in vector Y
' (it is allowed to use same array as source and destination of operations)
Y = A
Y = Vector.Multiply(1,1,5, Y,X) 

LCD.Text(1, 10,72,  1,"scalar A*X: "+Y[0])

Buttons.Flush()
Buttons.Wait()

' ---------- MATRIX MULTIPLICATION  ----------

LCD.Clear()
LCD.Text(1,0,0,  1,"Multiply")
LCD.Text(1,0,10, 1,"matrizes")

N = 4
M = 3
K = 2

' Define a 4 row, 2 column matrix.
A = Vector.Init(4*2,0)
A[2*0+0] = 2
A[2*0+1] = -1
A[2*1+0] = 1
A[2*1+1] = 3
A[2*2+0] = 1
A[2*2+1] = 2
A[2*3+0] = -3
A[2*3+1] = 1
For I=0 To N-1
  For H=0 To K-1
    LCD.Text(1, 10+30*H,60+12*I, 1, A[K*I+H]) 
  EndFor
EndFor

' Define a 2 rows, 3 column matrix.
B = Vector.Init(2*3,0)
B[3*0+0] = 3
B[3*0+1] = -1
B[3*0+2] = 4
B[3*1+0] = 3
B[3*1+1] = 2
B[3*1+2] = -2
For H=0 To K-1
  For J=0 To M-1
    LCD.Text(1, 80+30*J,20+12*H, 1, B[M*H+J]) 
  EndFor
EndFor

' The resulting matrix will have 4 rows, 3 columns.
C = Vector.Multiply(N,M,K, A,B)

For I=0 To N-1
  For J=0 To M-1
    LCD.Text(1, 80+30*J,60+12*I, 1, C[M*I+J]) 
  EndFor
EndFor

Buttons.Flush()
Buttons.Wait()

' ----------------- SORT VECTOR -------------

LCD.Clear()
LCD.Text(1,0,0,1, "Sort 60 numbers")

X = Vector.Init(57,0) 
For I=0 To 57-1
  X[i] = Math.GetRandomNumber(1099)-99   ' -99  -  999
EndFor

' Sort 60 elements. Since there are too few numbers in X, 0-values will be inserted.
Y = Vector.Sort(60,X)

For I=0 To 12-1
  For j=0 To 5-1
    LCD.Text(1, 36*j, 9+10*i, 1, Y[i*5+j])
  endfor
EndFor

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

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

Re: EV3-Basic - Kurzanleitung

Beitragvon HaWe » 22. Sep 2015 13:56

EV3Basic Sensorsteuerung
EV3 User Guide: http://www.nr.edu/csc200/labs-ev3/ev3-user-guide-EN.pdf
EV3Basic Handbuch:
https://github.com/c0pperdragon/EV3Basic/releases/download/v1.0.9/ev3basic_handbuch.html
https://github.com/c0pperdragon/EV3Basic/releases/download/v1.0.9/ev3basic_manual.html
Beispiele aus Github https://github.com/c0pperdragon/EV3Basic/tree/master/Examples :



Touch-Sensor:
TouchSensorTest.sb (Github)

Code: Alles auswählen

While "True"
  LCD.StopUpdate()
  LCD.Clear()
  LCD.Text(1, 0,0,  1, "Plug touch sensors to")
  LCD.Text(1, 0,12, 1, "various ports and ")
  LCD.Text(1, 0,24, 1, "press them...")
 
  For s=1 To 4
    P = Sensor.ReadPercent(s)
    x = s*40 - 30
    y = 60
    If P=100 Then
       LCD.FillRect(1,x,y, 30,30)
       LCD.Text(1,x+2,y+10, 1, P)
    else
       LCD.Rect(1,x,y,30,30)   
       LCD.Text(1,x+10,y+10, 1, P)
     Endif
  endfor
  LCD.Update()
 
  Program.Delay(100)
EndWhile



Sensor-Info (Autodetect): SensorInfo.sb (Github, verändert)

Code: Alles auswählen

'// show Sensor values
'// select Sensor mode by btn press

selectmode = 0
Sensor.SetMode(1, selectmode)

While "True"
  LCD.StopUpdate()
  LCD.Clear()
  For i=1 To 4
      name = Sensor.GetName(i)
      type = Sensor.GetType(i)
      mode = Sensor.GetMode(i)
      busy = Sensor.IsBusy(i)       
      val = Sensor.ReadPercent(i)
      LCD.Text(1,  0, 32*i-30, 1, name+" "+type+":"+mode)
      LCD.Text(1, 20, 32*i-16, 1, val) 
      LCD.Text(1, 60, 32*i-16, 1, busy)
  endfor
  LCD.Update()
  Program.Delay(200)

  click = Buttons.GetClicks()
  If Text.IsSubText(click, "U") then
    selectmode = selectmode+1
    Sensor.SetMode(1, selectmode)
  ElseIf Text.IsSubText(click,"D") then
    selectmode = selectmode-1
    Sensor.SetMode(1, selectmode)
  ElseIf Text.IsSubText(click,"E") then
    Sensor.SetMode(1, selectmode)
  endif
EndWhile



Sensorwerte auslesen je nach Sensor Modus:
SensorReading.sb (Github)

Code: Alles auswählen

'// Sensor values Port 1 acc. to Mode
selectmode = 0
Sensor.SetMode(1, selectmode)

While "True"
  LCD.StopUpdate()
  LCD.Clear()     
  LCD.Write(0,0, Sensor.GetName(1))
  LCD.Write(0,16, "MODE: "+Sensor.GetType(1)+":"+Sensor.GetMode(1)+" ("+selectmode+")")
  LCD.Write(0,32, "PERCENT: "+ Sensor.ReadPercent(1))
  raw = Sensor.ReadRaw(1,8)
  For i=0 To 3
    LCD.Write(0,64+i*16, "RAW"+i+":"+raw[i])
  endfor
  For i=4 To 7
    LCD.Write(80,64+(i-4)*16, "RAW"+i+":"+raw[i])
  endfor
  LCD.Update()
 
  Program.Delay(200)
 
  click = Buttons.GetClicks()
  If Text.IsSubText(click, "U") then
    selectmode = selectmode+1
    Sensor.SetMode(1, selectmode)
  ElseIf Text.IsSubText(click,"D") then
    selectmode = selectmode-1
    Sensor.SetMode(1, selectmode)
  ElseIf Text.IsSubText(click,"E") then
    Sensor.SetMode(1, selectmode)
  endif
   
 
EndWhile
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

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

Re: EV3-Basic - Kurzanleitung

Beitragvon HaWe » 9. Okt 2015 22:17

EV3Basic Motor-Control

EV3Basic Handbuch:
https://github.com/c0pperdragon/EV3Basic/releases/download/v1.0.9/ev3basic_handbuch.html
https://github.com/c0pperdragon/EV3Basic/releases/download/v1.0.9/ev3basic_manual.html
Beispiele aus Github https://github.com/c0pperdragon/EV3Basic/tree/master/Examples :

Motor starten und dabei Motor Position auslesen
motorcount.sb (Github)

Code: Alles auswählen

' Example: Read motor position while motor is moving

m = "A"
samples = 178
positions = Vector.Init(samples,0)    ' list of positions
times = Vector.Init(samples,0)        ' time-stamps of samples

' start motor
Motor.ResetCount(m)
Motor.SchedulePower(m, 100, 0,110,0, "True")

' take samples fast
start = EV3.Time
For i=0 To samples-1
  ' wait for the correct sample time
  now = EV3.Time - start
  While now < i
    now = EV3.Time - start
  EndWhile
  ' take a motor position sample
  positions[i] = Motor.GetCount(m) 
  times[i] = now
Endfor

' show collected data
LCD.Clear()
For i=0 To samples-1
  LCD.Pixel(1,i,positions[i])
  LCD.Pixel(1,i,128-times[i])
endfor

Program.Delay(100000)



Motoren synchronisieren
MotorSynchronize.sb (Github)

Code: Alles auswählen

Motor.ScheduleSync("AB",-100,70,500,"false")
Program.Delay(1000)
Motor.StartSync("AB",100,-50)
Program.Delay(1000)
Motor.SchedulePower("A", 100, 0,500,0, "true")
Program.Delay(1000)
Motor.StartPower("AB", -100)
Program.Delay(1000)
Motor.Schedule("B", -100, 0,500,0, "false")
Program.Delay(1000)
Motor.MoveSync("AB", 70, 50, 500, "true")
Program.Delay(1000)




2 Motoren abhängig voneinander drehen
TwoMotorMovement.sb (Github)

Code: Alles auswählen

Y_PREV = 0          ' memorize position of motor C

For X=1 To 360      ' move steps of single degrees
  Y = 50*Math.Sin(X/180*Math.PI)     ' calculate Y dependent of X
  Y = Math.Round(Y)      ' rounding (motor can only go to integer values)

  Y_INC = Y - Y_PREV    ' calculate the distance from current to new position
  Y_PREV = Y            ' memorize the new position for next iteration

  Motor.SchedulePower("A",30,0,1,0,"true")  ' move A by one degree
 
  If Y_INC>0 Then              ' move motor C either forward
    Motor.SchedulePower("C",30,0,Y_INC,0,"true")
  Else                         ' or backwards
    Motor.SchedulePower("C",-30,0,Y_INC,0,"true")
  EndIf

  Motor.Wait("AC")  ' wait until both motors have reached the position
EndFor
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 - Kurzanleitung

Beitragvon c0pperdragon » 10. Sep 2016 11:48

Mindsensors EV3 Sensor Multiplexer

Weil ich hin und wieder Anfragen kriege, wie man diesen Sensor-Multiplexer
http://www.mindsensors.com/ev3-and-nxt/ ... ev3-or-nxt
von EV3Basic aus ansteuern kann, möchte ich hier einen Beispielcode posten, den ein User erstellt hat:

Code: Alles auswählen

'  ** I2C Test **
'  By David Musgrave
'  http://WinthropDC.com
'  Last Modified: 09-Sep-2016

Finished = "False"
Clicks = ""
Value = 0
 
I2CPort = 4
I2CBus = 80
I2CChannel = 2
I2CAddr = I2CBus + 1 * (I2CChannel - 1)
 
Sensor.SetMode (I2CPort, 0)
LCD.Clear()
LCD.Write( 0*8, 0*10, "I2C Sensor Test")
LCD.Write( 0*8, 2*10, "Port: " + I2CPort)
LCD.Write(10*8, 2*10, "Address: " + I2CAddr)
 
I2CReg = 82 ' 0x52 Sensor Mode
I2CWriteByte = 1 + 1
I2CWriteData = Vector.Init(I2CWriteByte, I2CReg)
I2CWriteData[1] = 0 ' Sensor Mode
I2CReadByte = 1
I2CReadData = Vector.Init(I2CReadByte, 0)
 
I2CReadData = Sensor.CommunicateI2C(I2CPort, I2CAddr, I2CWriteByte, I2CReadByte, I2CWriteData)
 
While Finished = "False"
'  I2CReg = 116 ' 0x74 Ready Flag
'  I2CWriteByte = 1 + 0
'  I2CWriteData = Vector.Init(I2CWriteByte, I2CReg)
'  I2CReadByte = 1
'  I2CReadData = Vector.Init(I2CReadByte, 0)
'  While I2CReadData[0] = 0
'    I2CReadData = Sensor.CommunicateI2C(I2CPort, I2CAddr, I2CWriteByte, I2CReadByte, I2CWriteData)
'  EndWhile
 
  I2CReg = 84 ' 0x54 Sensor Data
  I2CWriteByte = 1 + 0
  I2CWriteData = Vector.Init(I2CWriteByte, I2CReg)
  I2CReadByte = 2
  I2CReadData = Vector.Init(I2CReadByte, 0)
 
  I2CReadData = Sensor.CommunicateI2C(I2CPort, I2CAddr, I2CWriteByte, I2CReadByte, I2CWriteData)
 
  For x = 1 To I2CReadByte
    LCD.Write(0*8, (x+3)*10, Text.GetSubText("  "+(I2CReg+x-1),Text.GetLength((I2CReg+x-1)),3) + ":")
    LCD.Write(6*8, (x+3)*10, Text.GetSubText("  "+I2CReadData[x-1],Text.GetLength(I2CReadData[x-1]),3))
    LCD.Write(12*8, (x+3)*10, Text.GetCharacter(I2CReadData[x-1]))
  EndFor
  Value = (I2CReadData[1]*256 + I2CReadData[0])
  LCD.Write(0*8, (I2CReadByte+5)*10, "Data: "+ Text.GetSubText("    "+(Value),Text.GetLength((Value)),5))
 
  Clicks = Buttons.GetClicks()
  If Text.IsSubText(Clicks, "E") Then
    Finished = "True"
  EndIf
EndWhile


(Note: I could not get the Ready Flag part to work which is why it is commented out.)

moderations-edit: Post dupliziert und zusammengführt - HaWe

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

Re: EV3-Basic - Kurzanleitung

Beitragvon HaWe » 3. Jan 2017 10:34

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

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

Re: EV3-Basic - Kurzanleitung

Beitragvon HaWe » 3. Jan 2017 10:37

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

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

Re: EV3-Basic - Kurzanleitung

Beitragvon HaWe » 3. Jan 2017 10:45

Platzhalter
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 19 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss