initGPIO(pinNr:byte, mode:byte)
Initialisiert das gewählte GPIO (analog pinMode) mit einem der folgenen Modi:
OUTPUT
INPUT
INPUT_PULLUP
INPUT_PULLDOWN
Verfügbare pinNr-Konstanten:
C_PIN_01 (20*)
C_PIN_02 (25*)
C_PIN_03 (26*)
C_PIN_04 (32)
C_PIN_05 (33)
C_PIN_06 (34*)
C_PIN_07 (35*)
C_PIN_MISO (8)
C_PIN_MOSI (5)
C_PIN_SCK (7)
C_PIN_SDA (21*)
C_PIN_SCL (22*)
writeGPIO(pinNr:byte, state:bool)
Setzt den Zustand eines zuvor als OUTPUT initialisierten GPIOs (analog digitalWrite).
initGPIO(32, OUTPUT)
writeGPIO(32, 1) # HIGH
writeGPIO(32, 0) # LOW
readGPIO(pinNr:byte)->bool
Liest den Zustand eines zuvor als INPUT(_PULLUP/DOWN) initialisierten GPIOs (analog digitalRead).
initGPIO(32, INPUT_PULLDOWN)
readGPIO(32) # false (0)
readGPIO(32) # true (1) wenn mit 3.3V verbunden
readADC(pinNr:byte, nSamples:long)->int
Liest den analogen Wert (analog analogRead) von entweder pinNr 32 oder 33 mehrere Male (nSamples) und bildet einen Durchschnittswert.
Die eingestellte Referenzspannung beträgt ~3300mV (11dB Dämpfung).
Der zurückgegebene Wert bewegt sich zwischen 0 und 4095 (12bit).
readADC(32, 100)
readADC(33, 1000)
writeDAC(pinNr:byte, value:byte)
Nur Oxocard-Connect
Gibt auf dem ausgewählten GPIO (C_PIN_02 oder C_PIN_03) ein analoges Spannungssignal zwischen 0 (0) und 3.3V (255) aus.
writeDAC(C_PIN_02, 127)
writePWM(pinNr:byte, dutyCycleValue:long)
Gibt auf dem ausgewählten GPIO ein PWM-Signal mit 500Hz und definiertem dutyCycle-Wert von 0 (0%) bis 4096 (100% bei 12bit) aus.
writePWM(C_PIN_01, 2048) # 50%
setPWMFrequency(freq:long)
Setzt die verwendete PWM-Frequenz: 10… 9765 Hz (13bit) oder 19… 19531 Hz (12bit) oder 38… 39062 Hz (11bit) usw. (Default: 500Hz)
setPWMFrequency(1000)
setPWMDutyCycleResolution(res:byte)
Setzt die verwendete PWM-Auflösung: 0… 20bit (Default: 12bit)
setPWMDutyCycleResolution(12)
checkI2CAddress(slaveAddr:byte)->bool
Gibt true zurück, wenn ein Gerät mit definierter slaveAddr gefunden wurde und sonst false.
writeI2CByte(slaveAddr:byte, byteAddr:int, data:byte)
Schreibt ein Byte eines definierten I2C-Slaves (7bit slaveAddr) und Registers (byteAddr).
writeI2CByte(0x4C, 0x08, 0x13) # accel sample rate = 100Hz
writeI2CInt(slaveAddr:byte, byteAddr:int, data:int)
Schreibt ein Integer (2 Bytes) eines definierten I2C-Slaves (7bit slaveAddr) und Registers (byteAddr).
writeI2CInt(0x2C, 0x05, 0x1337)
writeI2CLong(slaveAddr:byte, byteAddr:int, data:long)
Schreibt ein Long (4 Bytes) eines definierten I2C-Slaves (7bit slaveAddr) und Registers (byteAddr).
writeI2CLong(0x2C, 0x05, 0x42133742)
writeI2C(slaveAddr:byte, byteAddr:int, size:int, data:byte[])
Schreibt eine beliebige Anzahl Bytes (size) eines definierten I2C-Slaves (7bit slaveAddr) und Registers (byteAddr).
data = [0x11, 0x22, 0x33]
writeI2C(0x2C, 0x05, 3, data)
readI2CByte(slaveAddr:byte, byteAddr:int)->byte
Liest ein Byte eines definierten I2C-Slaves (7bit slaveAddr) und Registers (byteAddr).
Wenn byteAddr -1 ist, wird nach der Übertragung der slaveAddr direkt gelesen.
readI2CByte(0x4C, 0x18) # accel ID => 164
readI2CInt(slaveAddr:byte, byteAddr:int)->int
Liest ein Integer (2 Bytes) eines definierten I2C-Slaves (7bit slaveAddr) und Registers (byteAddr).
Wenn byteAddr -1 ist, wird nach der Übertragung der slaveAddr direkt gelesen.
readI2CInt(0x4C, 0x0D) # accel raw X axis (16bit)
readI2CLong(slaveAddr:byte, byteAddr:int)->long
Liest ein Long (4 Bytes) eines definierten I2C-Slaves (7bit slaveAddr) und Registers (byteAddr).
Wenn byteAddr -1 ist, wird nach der Übertragung der slaveAddr direkt gelesen.
ir = readI2CLong(0x52, 0x0A) # IR value (3 bytes + 1 unused)
ir = ir & 0x00FFFFFF # Maskierung der ersten 3 bytes
readI2C(slaveAddr:byte, byteAddr:int, size:int)
Liest eine beliebige Anzahl Bytes (size) eines definierten I2C-Slaves (7bit slaveAddr) und Registers (byteAddr).
Wenn byteAddr -1 ist, wird nach der Übertragung der slaveAddr direkt gelesen.
Mit den getI2C-Funktionen können anschliessend die gelesenen Daten zurückgegeben werden.
readI2C(0x4C, 0x0D, 6) # accel raw X, Y & Z axis
xRaw = getI2CInt()
yRaw = getI2CInt()
zRaw = getI2CInt()
getI2CByte()->byte
Gibt ein zuvor mit readI2C() gelesenes Byte zurück.
Der interne readBufferIndex wird um 1 erhöht.
getI2CInt()->int
Gibt ein zuvor mit readI2C() gelesener Integer zurück.
Der interne readBufferIndex wird um 2 erhöht.
getI2CLong()->long
Gibt ein zuvor mit readI2C() gelesener Long zurück.
Der interne readBufferIndex wird um 4 erhöht.
setI2CReadBufferIndex(index:int)
Setzt den internen readBufferIndex auf den gewünschten Wert.
Dies erlaubt es ein zuvor gelesener Wert noch einmal zu lesen.
readI2C(0x4C, 0x0D, 6) # accel raw X, Y & Z axis
xRaw = getI2CInt()
setI2CReadBufferIndex(0)
xRaw = getI2CInt()
yRaw = getI2CInt()
zRaw = getI2CInt()
setI2CByteAddrSize(size:byte)
Setzt die bei I2C-Funktionen verwendete Datentyp-Grösse der byteAddr. Diese ist meist 1 (0… 255), kann bei bestimmten Geräten aber auch 2 (0… 65535) sein.
getI2CByteAddrSize()->byte
Gibt die im Moment verwendete Datentyp-Grösse der byteAddr zurück.
setI2CBigEndian()
Verwende diese Funktion, um die int oder long I2C-Funktionen auf Big Endian zu setzen.
Ein 16-Bit-Wert 0xAABB wird dem Array [0xAA, 0xBB] entsprechen und umgekehrt
setI2CLittleEndian()
Verwende diese Funktion, um die int oder long I2C-Funktionen auf Little Endian zu setzen.
Ein 16-Bit-Wert 0xAABB wird dem Array [0xBB, 0xAA] entsprechen und umgekehrt
initDigitalLeds(pinNr:byte, ledsCount:byte, ledType:byte)
Initialisiert das ausgewählte pin so, dass eine definierte Anzahl digitale LEDs (z.B. NeoPixels) vom gewünschten Typ gesetzt werden können.
LED types:
C_LED_TYPE_WS2812
C_LED_TYPE_WS2812B
C_LED_TYPE_WS2812B_MINI
C_LED_TYPE_WS2813
C_LED_TYPE_WS2814
C_LED_TYPE_SK6812
C_LED_TYPE_SK6812W (füf RGBW LED)
initDigitalLeds(C_PIN_01, 12, C_LED_TYPE_WS2812B)
setDigitalLedMode(mode:byte)
Mit diesem Parameter kann die Reihenfolge der Farben geändert werden kann. setDigitalLedMode(C_LED_MODE_RGB) setzt den normalen RGB-Modus, setDigitalLedMode(C_LED_MODE_GRB) wird verwendet, wenn die RGB-LEDs rot und grün vertauscht haben.
setDigitalLed(ledNr:byte, r:byte, g:byte, b:byte)
Setzt den Farbwert (RGB) des ausgewählten digitalen LEDs.
setDigitalLed(0, 50, 255, 10)
Stellt den Farbwert (RGBW) der ausgewählten digitalen LED ein.
setDigitalLed2(0, 0, 0, 0, 255)
applyDigitalLeds()
Gibt die zuvor mit setDigitalLed() definierten Farbwerte auf dem mit initDigitalLeds() ausgewähltem Pin aus.
applyDigitalLeds()
deinitDigitalLeds()
Wird verwendet, um die digitale LED-Schnittstelle zu entfernen, wenn sie nicht mehr verwendet wird.
initDigitalLeds(C_PIN_01, 25, C_LED_TYPE_SK6812) # LEDs initialisieren
# LEDs setzen
# ...
deinitDigitalLeds() # Digitale LEDs entfernen
initUART(pinNrTx:byte, pinNrRx:byte, baudrate:long)
Initialisiert die UART-Schnittstelle.
Beispiel:
# UART echo example
initUART(C_PIN_04, C_PIN_05, 115200) # TX, RX, BAUDRATE
#configUART(C_UART_DATA_BITS_8, C_UART_PARITY_DISABLE, C_UART_STOP_BITS_1)
def onDraw():
len = getUARTDataLength()
if len > 0:
data = readLineUART()
#data = readUART(len)
writeLineUART(data) # send the same data back
#writeUART(len, data)
clear()
drawText(10, 10, data)
update()
print(data)
delay(10)
if getButton():
if returnToMenu():
return
Initialisiert die UART-Schnittstelle im Halbduplex-Modus.
Beispiel:
# UART Echo Beispiel
initUARTHalfDuplex(C_PIN_04, C_PIN_05, 115200) # TX, RX, BAUDRATE
#configUART(C_UART_DATA_BITS_8, C_UART_PARITY_DISABLE, C_UART_STOP_BITS_1)
def onDraw():
len = getUARTDataLength()
wenn len > 0:
data = readLineUART()
#data = readUART(len)
writeLineUART(data) # sendet die gleichen Daten zurück
#writeUART(len, data)
clear()
drawText(10, 10, daten)
aktualisieren()
print(daten)
delay(10)
if getButton():
if returnToMenu():
return
configUART(byte dataBits, byte parity, byte stopBits)
Optionale UART-Konfigurationen.
Verfügbare dataBits:
C_UART_DATA_BITS_5
C_UART_DATA_BITS_6
C_UART_DATA_BITS_7
C_UART_DATA_BITS_8 // default
Verfügbare parity-Optionen:
C_UART_PARITY_DISABLE // default
C_UART_PARITY_EVEN
C_UART_PARITY_ODD
Verfügbare stopBits:
C_UART_STOP_BITS_1 // default
C_UART_STOP_BITS_1_5
C_UART_STOP_BITS_2
getUARTDataLength()->int
Gibt die empfangene Datenlänge zurück.
readUART(size:int)->byte[256]
Liest eine definierte Länge in Bytes und gibt diese als Byte-Array zurück.
Beachte:
Es können maximal 256 Bytes pro Aufruf zurückgegeben werden.
readLineUART()->byte[256]
Liest eine ganze Zeile (bis zum ‘\n’) und gibt diese als byte-Array zurück.
Beachte:
Es können maximal 256 Bytes pro Aufruf zurückgegeben werden.
writeUART(size:int, data:byte[])
Schreibt eine beliebige Anzahl Bytes (size).
data = [0x11, 0x22, 0x33]
writeUART(3, data)
writeLineUART(data:byte[])
Schreibt einen String und hängt am Ende ein ‘\n’ an.
initSPI(mode:byte, speed:long)
Initialisiert die SPI-Schnittstelle.
Verfügbare Modes:
C_SPI_MODE_0 // CPOL=0; CPHA=0
C_SPI_MODE_1 // CPOL=0; CPHA=1
C_SPI_MODE_2 // CPOL=1; CPHA=0
C_SPI_MODE_3 // CPOL=1; CPHA=1
Beispiel:
initSPI(C_SPI_MODE_3, 1000000)
initGPIO(C_PIN_01, OUTPUT)
writeGPIO(C_PIN_01, 1) # resetCS
def onDraw():
len = 2
txData = [0x00, 0x00]
writeGPIO(C_PIN_01, 0) # setCS
writeSPI(len, txData)
readSPI(1)
writeGPIO(C_PIN_01, 1) # resetCS
rxData = getSPIByte()
print(rxData)
delay(1000)
if getButton():
if returnToMenu():
return
writeSPI(size:int, data:byte[])
Schreibt eine beliebige Anzahl Bytes (size).
data = [0x11, 0x22, 0x33]
writeSPI(3, data)
readSPI(size:int)
Liest eine beliebige Anzahl Bytes (size) und speichert sie im internen SPI-ReadBuffer.
Mit den getSPI-Funktionen können anschliessend die gelesenen Daten zurückgegeben werden.
readSPI(7)
myByte = getSPIByte()
myInt = getSPIInt()
myLong = getSPILong()
transferSPI(size:int, txData:byte[])
Überträgt und liest eine beliebige Anzahl Bytes (size) und speichert sie im internen SPI-ReadBuffer.
Mit den getSPI-Funktionen können anschliessend die gelesenen Daten zurückgegeben werden.
txData = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
transferSPI(7, txData)
myByte = getSPIByte()
myInt = getSPIInt()
myLong = getSPILong()
getSPIByte()->byte
Gibt ein zuvor mit readSPI() gelesenes Byte zurück.
Der interne readBufferIndex wird um 1 erhöht.
getSPIInt()->int
Gibt ein zuvor mit readSPI() gelesener Integer zurück.
Der interne readBufferIndex wird um 2 erhöht.
getSPILong()->long
Gibt ein zuvor mit readSPI() gelesener Long zurück.
Der interne readBufferIndex wird um 4 erhöht.
setSPIReadBufferIndex(index:int)
Setzt den internen readBufferIndex auf den gewünschten Wert.
Dies erlaubt es ein zuvor gelesener Wert noch einmal zu lesen.
initPulseCounter(pinNr:byte)
Mit dem Pulse Counter können Impulse am angegebenen Pin gezählt werden. Mit der Funktion initPulseCounter kann der Zähler für ein Pin initialisiert und gestartet werden.
initPulseCounter(C_PIN_06)
Mit der Funktion readPulseCounter kann der Wert ausgelesen werden.
const ENCODER_PIN = C_PIN_06 # Pin to use with the counter
initPulseCounter(ENCODER_PIN)
while true:
value = readPulseCounter(ENCODER_PIN)
clear()
drawText(10, 10, "Value " + value)
update()
Der Zähler kann bis 32767 hoch zählen und beginnt danach wieder bei 0.
Muss der Zähler manuell zurück gesetzt werden kann die Funktion resetPulseCounter verwendet werden.
Verwandte Funktionen:
readPulseCounter(pinNr:byte)
Mit der Funktion readPulseCounter kann der aktuelle Wert des Pluse Counters ausgelesen werden.
value = readPulseCounter(C_PIN_06)
Verwandte Funktionen:
resetPulseCounter(pinNr:byte)
Mit der Funktion resetPulseCounter kann der Pulse Counter auf 0 zurückgesetzt werden.
resetPulseCounter(C_PIN_06)
Verwandte Funktionen:
Wir unterstützen das standardmäßige NEC-Kommunikationsprotokoll für Infrarotübertragungen. Die Funktionen können sowohl Daten senden als auch empfangen. Als Hardware können Standard-IR-Breakout-Boards verwendet werden.
Zum Senden stehen die Funktionen initIrNecTx und sendIrNecData zur Verfügung. Das Protokoll erlaubt die Übertragung einer Adresse und eines Datenwertes (je 2 Byte):
initIrNecTx(C_PIN_01)
clear()
drawTextCentered(120, 100, "Taste drücken")
drawTextCentered(120, 140, "zum Senden")
aktualisieren()
while true:
b = getButtons()
if(b.middle):
# NEC-Adressdaten senden
sendIrNecData(0xFC00, 0x7F80)
Sendet Daten mit dem NEC-Protokoll. Mehr lesen über “initIrNecTx”
deinitIerNecTx()
Dient dazu, den NEC-Sender zu entfernen, wenn er nicht mehr verwendet wird
initIrNecTx(C_PIN_01) # NEC-Sender initialisieren
# NEC-Daten senden
# ...
deinitIrNecTx() # Entfernen, wenn nicht mehr verwendet
Wir unterstützen das standardmäßige NEC-Kommunikationsprotokoll für Infrarotübertragungen. Die Funktionen können sowohl Daten senden als auch empfangen. Als Hardware können Standard-IR-Breakout-Boards verwendet werden.
Für den Empfang werden die Funktionen initIrNecRx und readIrNecData benötigt. Die Funktion gibt die empfangenen Daten als Byte-Array zurück.
initIrNecRx(C_PIN_06)
while true:
delay(50)
res = readIrNecData() # liefert [addr H bite, addr L byte, cmd H byte, cmd L byte]
clear()
drawTextCentered(120, 40, "Adresse:")
drawTextCentered(120, 80, "0x" + byteToHex(res[0]) + byteToHex(res[1]))
drawTextCentered(120, 140, "Befehl:")
drawTextCentered(120, 180, "0x" + byteToHex(res[2]) + byteToHex(res[3]))
aktualisieren()
Empfängt Daten mit dem NEC-Protokoll. Mehr lesen über “initIrNecRx”
deinitIrNecRx()
Wird verwendet, um den NEC-Empfänger zu entfernen, wenn er nicht mehr verwendet wird.
initIrNecRx(C_PIN_01) # NEC-Empfänger initialisieren
# Empfang von NEC-Daten
# ...
deinitIrNecRx() # Entfernen, wenn nicht mehr verwendet