
M5Stack Code
from m5stack import *
from m5ui import *
from uiflow import *
import unit
setScreenColor(0xccbebe)
pbhub0 = unit.get(unit.PBHUB, (21,22))
laufl1 = None
zehntel = None
start = None
laufl2 = None
lauf = None
bahn1 = None
hell = None
bahn2 = None
sekunde = None
gms = M5Title(title="www.kreativekiste.de", x=80, fgcolor=0xf7f3f3, bgcolor=0x000000)
Bahn1 = M5TextBox(7, 36, "Zeit Bahn1", lcd.FONT_DejaVu24, 0x000000, rotate=0)
Bahn2 = M5TextBox(7, 120, "Zeit Bahn2", lcd.FONT_DejaVu24, 0x000000, rotate=0)
label0 = M5TextBox(90, 80, "0", lcd.FONT_DejaVu24, 0x000000, rotate=0)
label1 = M5TextBox(40, 80, "0", lcd.FONT_DejaVu24, 0x000000, rotate=0)
label2 = M5TextBox(90, 160, "0", lcd.FONT_DejaVu24, 0x000000, rotate=0)
label7 = M5TextBox(60, 80, ",", lcd.FONT_DejaVu24, 0x000000, rotate=0)
label3 = M5TextBox(40, 160, "0", lcd.FONT_DejaVu24, 0x000000, rotate=0)
label8 = M5TextBox(69, 160, ",", lcd.FONT_DejaVu24, 0x000000, rotate=0)
label4 = M5TextBox(228, 219, "reset", lcd.FONT_DejaVu18, 0x0321ff, rotate=0)
label9 = M5TextBox(138, 85, "Sekunden", lcd.FONT_Default, 0x000000, rotate=0)
label5 = M5TextBox(48, 224, "dimmer", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label10 = M5TextBox(138, 165, "Sekunden", lcd.FONT_Default, 0x000000, rotate=0)
label6 = M5TextBox(121, 224, "1-bis-211", lcd.FONT_Default, 0xFFFFFF, rotate=0)
from numbers import Number
def buttonA_wasPressed():
 global laufl1, zehntel, start, laufl2, lauf, bahn1, hell, bahn2, sekunde
 label5.show()
 label6.show()
 if hell >= 10:
 hell = (hell if isinstance(hell, Number) else 0) + -10
 label5.setText(str(hell))
 pbhub0.setBrightness(0, hell)
 pass
btnA.wasPressed(buttonA_wasPressed)
def buttonB_wasPressed():
 global laufl1, zehntel, start, laufl2, lauf, bahn1, hell, bahn2, sekunde
 label5.show()
 label6.show()
 if hell <= 204:
 hell = (hell if isinstance(hell, Number) else 0) + 10
 label5.setText(str(hell))
 pbhub0.setBrightness(0, hell)
 pass
btnB.wasPressed(buttonB_wasPressed)
def buttonC_wasPressed():
 global laufl1, zehntel, start, laufl2, lauf, bahn1, hell, bahn2, sekunde
 timerSch.stop('timer2')
 timerSch.run('timer1', 200, 0x00)
 pbhub0.setColor(0, 0, 30, 0xcc0000)
 start = 0
 lauf = 0
 bahn1 = 0
 bahn2 = 0
 laufl1 = 1
 laufl2 = 1
 zehntel = 0
 sekunde = 0
 label5.hide()
 label6.hide()
 label0.setText(str(zehntel))
 label1.setText(str(sekunde))
 label2.setText(str(zehntel))
 label3.setText(str(sekunde))
 pass
btnC.wasPressed(buttonC_wasPressed)
@timerSch.event('timer1')
def ttimer1():
 global laufl1, zehntel, start, laufl2, lauf, bahn1, hell, bahn2, sekunde
 laufl1 = (laufl1 if isinstance(laufl1, Number) else 0) + 1
 laufl2 = (laufl2 if isinstance(laufl2, Number) else 0) + 1
 pass
@timerSch.event('timer2')
def ttimer2():
 global laufl1, zehntel, start, laufl2, lauf, bahn1, hell, bahn2, sekunde
 zehntel = (zehntel if isinstance(zehntel, Number) else 0) + 2
 pass
start = 0
lauf = 0
bahn1 = 0
bahn2 = 0
laufl1 = 1
laufl2 = 1
zehntel = 0
sekunde = 0
hell = 41
label5.hide()
label6.hide()
pbhub0.setRgbNum(0, 30)
pbhub0.setColor(0, 0, 30, 0xcc0000)
timerSch.run('timer1', 150, 0x00)
while True:
 if not (pbhub0.digitalRead(1, 0)):
 timerSch.stop('timer1')
 start = 1
 timerSch.run('timer2', 10, 0x00)
 pbhub0.setColor(0, 0, 30, 0x000099)
 if start == 1:
 if zehntel >= 99:
 zehntel = 0
 sekunde = (sekunde if isinstance(sekunde, Number) else 0) + 1
 if bahn1 == 0:
 label0.setText(str(zehntel))
 label1.setText(str(sekunde))
 if bahn2 == 0:
 label2.setText(str(zehntel))
 label3.setText(str(sekunde))
 if not (pbhub0.digitalRead(4, 0)):
 bahn1 = 1
 if bahn1 == 1 and bahn2 == 0:
 pbhub0.setColor(0, 0, 15, 0x009900)
 pbhub0.setColor(0, 15, 30, 0xcc0000)
 if not (pbhub0.digitalRead(5, 0)):
 bahn2 = 1
 if bahn1 == 0 and bahn2 == 1:
 pbhub0.setColor(0, 0, 15, 0xff0000)
 pbhub0.setColor(0, 15, 30, 0x009900)
 else:
 if lauf == 0:
 pbhub0.setColor(0, 0, laufl1, 0x009900)
 pbhub0.setColor(0, 15, laufl2, 0x009900)
 else:
 pbhub0.setColor(0, 0, laufl1, 0xcc0000)
 pbhub0.setColor(0, 15, laufl2, 0xcc0000)
 if laufl1 == 16 and lauf == 0:
 laufl1 = 1
 laufl2 = 1
 lauf = 1
 if laufl1 == 16 and lauf == 1:
 laufl1 = 1
 laufl2 = 1
 lauf = 0
 wait_ms(2)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Arduino Code:
#include <Servo.h>
#include <codeCache.h>
#include <Duinoedu_Time.h>
boolean __ardublockDigitalRead(int pinNumber)
{
 pinMode(pinNumber, INPUT);
 return digitalRead(pinNumber);
}
int a1;
Servo servo_pin_7;
char Char = ' ' ;
bool spieler1= false ;
bool spieler2= false ;
Duinoedu_Time monTemps;
float zeit1 = 0.0 ;
float zeit2 = 0.0 ;
void start();
#include <Wire.h>;
#include <LiquidCrystal_I2C.h>;
LiquidCrystal_I2C lcd(0x27,20,4);
;
void setup()
{
 pinMode( 11 , OUTPUT);
 pinMode( 6 , OUTPUT);
 pinMode( 8 , OUTPUT);
 pinMode( 9 , OUTPUT);
 pinMode( 10 , OUTPUT);
 servo_pin_7.attach(7);
 lcd.init();
 ;
lcd.backlight();
 ;
start();
}
void loop()
{
 if (!( __ardublockDigitalRead(D4) ))
 {
 digitalWrite(8 , LOW);
 digitalWrite(10 , LOW);
 for ( a1=1; a1<= ( 3 ); ++a1 )
 {
 delay( 500 );
 digitalWrite(8 , HIGH);
 digitalWrite(10 , HIGH);
 delay( 500 );
 digitalWrite(8 , LOW);
 digitalWrite(10 , LOW);
 }
 digitalWrite(9 , HIGH);
 digitalWrite(11 , HIGH);
 servo_pin_7.write( 120 );
 digitalWrite(6 , HIGH);
 Char = 'A';
 lcd.clear();
 spieler1 = LOW ;
 spieler2 = LOW ;
 monTemps.resetDeltat(); 
 lcd.setCursor(0,0);
 ;
 lcd.print("CAR right");
 ;
 lcd.setCursor(0,1);
 ;
 lcd.print("CAR left");
 ;
 while ( ( ( String(Char) ) == ( String("A") ) ) )
 {
 lcd.setCursor(11,0);
 ;
 lcd.print(zeit1);
 ;
 lcd.setCursor(11,1);
 ;
 lcd.print(zeit2);
 ;
 if (!( __ardublockDigitalRead(D2) ))
 {
 if (( ( ( spieler1 ) == ( LOW ) ) && !( ( ( spieler2 ) == ( HIGH ) ) ) ))
 {
 lcd.setCursor(0,2);
 ;
 lcd.print("WINNER right");
 ;
 lcd.setCursor(0,3);
 ;
 lcd.print("LOSER left");
 ;
 digitalWrite(8 , HIGH);
 digitalWrite(9 , LOW);
 digitalWrite(10 , LOW);
 digitalWrite(11 , HIGH);
 digitalWrite(6 , LOW);
 }
 spieler1 = HIGH ;
 }
 if (!( __ardublockDigitalRead(D3) ))
 {
 if (( ( ( spieler2 ) == ( LOW ) ) && !( ( ( spieler1 ) == ( HIGH ) ) ) ))
 {
 lcd.setCursor(0,2);
 ;
 lcd.print("WINNER left");
 ;
 lcd.setCursor(0,3);
 ;
 lcd.print("LOSER right");
 ;
 digitalWrite(8 , LOW);
 digitalWrite(9 , HIGH);
 digitalWrite(10 , HIGH);
 digitalWrite(11 , LOW);
 digitalWrite(6 , LOW);
 }
 spieler2 = HIGH ;
 }
 if (( ( spieler1 ) == ( LOW ) ))
 {
 zeit1 = ( monTemps.Deltat() * 0.001 ) ;
 }
 if (( ( spieler2 ) == ( LOW ) ))
 {
 zeit2 = ( monTemps.Deltat() * 0.001 ) ;
 }
 if (( ( ( spieler1 ) == ( HIGH ) ) && ( ( spieler2 ) == ( HIGH ) ) ))
 {
 Char = 'B';
 }
 }
}
 while ( ( ( String(Char) ) == ( String("B") ) ) )
 {
 if (!( __ardublockDigitalRead(D4) ))
 {
 lcd.clear();
 Char = 'A';
 start();
 }
 }
}
void start()
{
 lcd.setCursor(0,0);
 ;
 lcd.print("CAR right");
 ;
 lcd.setCursor(0,1);
 ;
 lcd.print("CAR left");
 ;
 digitalWrite(6 , LOW);
 digitalWrite(8 , HIGH);
 digitalWrite(10 , HIGH);
 digitalWrite(9 , LOW);
 digitalWrite(11 , LOW);
 Char = 'A';
 servo_pin_7.write( 0 );
 monTemps.resetDeltat();
 zeit1 = 0.0 ;
 zeit2 = 0.0 ;
 lcd.setCursor(11,0);
 ;
 lcd.print(zeit1);
 ;
 lcd.setCursor(11,1);
 ;
 lcd.print(zeit2);
 ;
 delay( 700 );
}

