aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RetoolingForOpenSprints/NewClock/NewClock/NewClock.ino85
-rw-r--r--RetoolingForOpenSprints/RaceInABox2/RaceInABox2/RaceInABox2.ino61
-rw-r--r--RetoolingForOpenSprints/basic_msg/basic_msg/basic_msg.ino229
-rw-r--r--RetoolingForOpenSprints/raceinabox/netsuck.py77
-rwxr-xr-xRetoolingForOpenSprints/raceinabox/raceInABox.py186
5 files changed, 638 insertions, 0 deletions
diff --git a/RetoolingForOpenSprints/NewClock/NewClock/NewClock.ino b/RetoolingForOpenSprints/NewClock/NewClock/NewClock.ino
new file mode 100644
index 0000000..bb44efe
--- /dev/null
+++ b/RetoolingForOpenSprints/NewClock/NewClock/NewClock.ino
@@ -0,0 +1,85 @@
+
+/*
+ * ##### requires modified
+ *
+ * 5.9222222 steps per degree.
+ * too much error.
+ *
+ */
+
+#include <Stepper.h>
+#define MIN_MILLIS_PER_STEP 3
+#define STEPPER_STEPS 200
+#define STEPS_PER_REVOLUTION 2132 // for your motor
+#define INBUFFERLENGTH 100
+char inbuffer[INBUFFERLENGTH];
+int bufferIndex;
+int yellowGoal=0;
+int blueGoal=0;
+int yellowPosition=0;
+int bluePosition=0;
+int stepCount = 0; // number of steps the motor has taken
+long int lastStepMillis;
+
+Stepper blue(STEPPER_STEPS, 8,9,10,11,1);
+Stepper yellow(STEPPER_STEPS, 2,3,4,5,1);
+
+void setup() {
+ // initialize the serial port:
+ Serial.begin(115200);
+}
+
+void loop() {
+ int target;
+ while (Serial.available()) {
+ // get the new byte:
+ char inChar = (char)Serial.read();
+ // add it to the inputString:
+ if (bufferIndex<INBUFFERLENGTH)
+ inbuffer[bufferIndex++]=inChar;
+ if (inChar == '\n') {
+ inbuffer[bufferIndex]=0;
+ if ((inbuffer[0]=='d') && bufferIndex>3) {
+ target=atoi(inbuffer+3);
+ if (target>STEPS_PER_REVOLUTION)target=STEPS_PER_REVOLUTION;
+ if (inbuffer[1]=='1') {
+ blueGoal=target;//analogWrite(MOTOR1PWM,bike1speed);
+ Serial.println(inbuffer+3);
+ Serial.print("blueGoal="); Serial.println(blueGoal);
+ Serial.print("bluePosition="); Serial.println(bluePosition);
+ } else {
+ yellowGoal=target;//analogWrite(MOTOR2PWM,bike1speed);
+ }
+ } else if (inbuffer[0]=='v') {
+ Serial.println("RaceClock 0.1");
+ Serial.flush();
+ } else if (inbuffer[0]=='s') {
+ blueGoal=yellowGoal=STEPS_PER_REVOLUTION;
+ }
+
+ bufferIndex=0; //reset input
+
+ }
+ }
+ if ((millis()-lastStepMillis)>MIN_MILLIS_PER_STEP){
+ if ((blueGoal>bluePosition) && (bluePosition<=STEPS_PER_REVOLUTION)){
+ blue.step(-1);
+ bluePosition++;
+ }
+
+ if ((yellowGoal>yellowPosition) && (yellowPosition<=STEPS_PER_REVOLUTION)) {
+ yellow.step(-1);
+ yellowPosition++;
+ }
+ lastStepMillis=millis();
+ }
+ if ((bluePosition==STEPS_PER_REVOLUTION)&&(blueGoal==bluePosition)){
+ blueGoal=bluePosition=0;
+ }
+ if ((yellowPosition==STEPS_PER_REVOLUTION)&&(yellowGoal==yellowPosition)){
+ yellowGoal=yellowPosition=0;
+ }
+
+}
+
+
diff --git a/RetoolingForOpenSprints/RaceInABox2/RaceInABox2/RaceInABox2.ino b/RetoolingForOpenSprints/RaceInABox2/RaceInABox2/RaceInABox2.ino
new file mode 100644
index 0000000..06a3251
--- /dev/null
+++ b/RetoolingForOpenSprints/RaceInABox2/RaceInABox2/RaceInABox2.ino
@@ -0,0 +1,61 @@
+/*
+ RaceInABox
+
+ */
+#define MOTOR1DIR 2
+#define MOTOR2DIR 4
+#define MOTOR1PWM 3
+#define MOTOR2PWM 5
+#define MOTOR1CLOCKWISE digitalWrite(MOTOR1DIR, HIGH);
+#define MOTOR1COUNTERCLOCKWISE digitalWrite(MOTOR1DIR, LOW);
+#define MOTOR2CLOCKWISE digitalWrite(MOTOR2DIR, HIGH);
+#define MOTOR2COUNTERCLOCKWISE digitalWrite(MOTOR2DIR, LOW);
+#define INBUFFERLENGTH 32
+char inbuffer[INBUFFERLENGTH];
+
+void setup() {
+ Serial.begin(115200);
+ pinMode(MOTOR1DIR, OUTPUT);
+ pinMode(MOTOR2DIR, OUTPUT);
+ pinMode(MOTOR1PWM, OUTPUT);
+ pinMode(MOTOR2PWM, OUTPUT);
+ analogWrite(MOTOR1PWM, 0);
+ analogWrite(MOTOR2PWM, 0);
+
+ MOTOR1CLOCKWISE;
+ MOTOR2CLOCKWISE;
+}
+bool isClockwise = true;
+uint8_t bufferIndex=0;
+uint8_t bike1speed;
+
+void loop() {
+ while (Serial.available()) {
+ // get the new byte:
+ char inChar = (char)Serial.read();
+ // add it to the inputString:
+ if (bufferIndex<INBUFFERLENGTH)
+ inbuffer[bufferIndex++]=inChar;
+ // if the incoming character is a newline, set a flag
+ // so the main loop can do something about it:
+ if (inChar == '\n') {
+ inbuffer[bufferIndex]=0;
+ if ((inbuffer[0]=='b') && bufferIndex>3) {
+ bike1speed=(uint8_t) atoi(inbuffer+3);
+ if (inbuffer[1]=='1') {
+ analogWrite(MOTOR1PWM,bike1speed);
+ } else {
+ analogWrite(MOTOR2PWM,bike1speed);
+ }
+ } else if (inbuffer[0]=='v') {
+ Serial.println("RaceInABox 0.1");
+ Serial.flush();
+ }
+
+ bufferIndex=0; //reset input
+
+ }
+}
+}
+
+
diff --git a/RetoolingForOpenSprints/basic_msg/basic_msg/basic_msg.ino b/RetoolingForOpenSprints/basic_msg/basic_msg/basic_msg.ino
new file mode 100644
index 0000000..55d52c3
--- /dev/null
+++ b/RetoolingForOpenSprints/basic_msg/basic_msg/basic_msg.ino
@@ -0,0 +1,229 @@
+/*
+ * Arduino wiring:
+ *
+ * Digital pin Connected to
+ * ----------- ------------
+ * 2 Sensor 0
+ * 3 Sensor 1
+ * 4 Sensor 2
+ * 5 Sensor 3
+ *
+ * 9 Racer0 Start LED anode, Stop LED cathode
+ * 10 Racer1 Start LED anode, Stop LED cathode
+ * 11 Racer2 Start LED anode, Stop LED cathode
+ * 12 Racer3 Start LED anode, Stop LED cathode
+ *
+ */
+
+int statusLEDPin = 13;
+long statusBlinkInterval = 250;
+int lastStatusLEDValue = LOW;
+long previousStatusBlinkMillis = 0;
+
+boolean raceStarted = false;
+boolean raceStarting = false;
+boolean mockMode = false;
+unsigned long raceStartMillis;
+unsigned long currentTimeMillis;
+
+int val = 0;
+
+int racer0GoLedPin = 9;
+int racer1GoLedPin = 10;
+int racer2GoLedPin = 11;
+int racer3GoLedPin = 12;
+
+int sensorPins[4] = {2,3,4,5};
+int previoussensorValues[4] = {HIGH,HIGH,HIGH,HIGH};
+int values[4] = {0,0,0,0};
+unsigned long racerTicks[4] = {0,0,0,0};
+unsigned long racerFinishTimeMillis[4];
+
+unsigned long lastCountDownMillis;
+int lastCountDown;
+
+unsigned int charBuff[8];
+unsigned int charBuffLen = 0;
+boolean isReceivingRaceLength = false;
+
+int raceLengthTicks = 20;
+int previousFakeTickMillis = 0;
+
+int updateInterval = 250;
+unsigned long lastUpdateMillis = 0;
+
+void setup() {
+ Serial.begin(115200);
+ pinMode(statusLEDPin, OUTPUT);
+ pinMode(racer0GoLedPin, OUTPUT);
+ pinMode(racer1GoLedPin, OUTPUT);
+ pinMode(racer2GoLedPin, OUTPUT);
+ pinMode(racer3GoLedPin, OUTPUT);
+ digitalWrite(racer0GoLedPin, LOW);
+ digitalWrite(racer1GoLedPin, LOW);
+ digitalWrite(racer2GoLedPin, LOW);
+ digitalWrite(racer3GoLedPin, LOW);
+ for(int i=0; i<=3; i++)
+ {
+ pinMode(sensorPins[i], INPUT);
+ digitalWrite(sensorPins[i], HIGH);
+ }
+
+}
+
+void blinkLED() {
+ if (millis() - previousStatusBlinkMillis > statusBlinkInterval) {
+ previousStatusBlinkMillis = millis();
+
+ lastStatusLEDValue = !lastStatusLEDValue;
+
+ digitalWrite(statusLEDPin, lastStatusLEDValue);
+ }
+
+}
+
+void raceStart() {
+ raceStartMillis = millis();
+}
+
+
+void checkSerial(){
+ if(Serial.available()) {
+ val = Serial.read();
+ if(isReceivingRaceLength) {
+ if(val != '\r') {
+ charBuff[charBuffLen] = val;
+ charBuffLen++;
+ }
+ else if(charBuffLen==2) {
+ // received all the parts of the distance. time to process the value we received.
+ // The maximum for 2 chars would be 65 535 ticks.
+ // For a 0.25m circumference roller, that would be 16384 meters = 10.1805456 miles.
+ raceLengthTicks = charBuff[1] * 256 + charBuff[0];
+ isReceivingRaceLength = false;
+ Serial.print("OK ");
+ Serial.println(raceLengthTicks,DEC);
+ }
+ else {
+ Serial.println("ERROR receiving tick lengths");
+ }
+ }
+ else {
+ if(val == 'l') {
+ charBuffLen = 0;
+ isReceivingRaceLength = true;
+ }
+ if(val == 'v') {
+ Serial.print("basic-1");
+ }
+ if(val == 'g') {
+ for(int i=0; i<=3; i++)
+ {
+ racerTicks[i] = 0;
+ racerFinishTimeMillis[i] = 256*0;
+ }
+
+ raceStarting = true;
+ raceStarted = false;
+ lastCountDown = 4;
+ lastCountDownMillis = millis();
+ }
+
+ else if(val == 'm') {
+ // toggle mock mode
+ mockMode = !mockMode;
+ }
+
+ if(val == 's') {
+ raceStarted = false;
+
+ digitalWrite(racer0GoLedPin,LOW);
+ digitalWrite(racer1GoLedPin,LOW);
+ digitalWrite(racer2GoLedPin,LOW);
+ digitalWrite(racer3GoLedPin,LOW);
+ }
+ }
+ }
+}
+
+void printStatusUpdate() {
+ if(currentTimeMillis - lastUpdateMillis > updateInterval) {
+ lastUpdateMillis = currentTimeMillis;
+ for(int i=0; i<=3; i++)
+ {
+ Serial.print(i);
+ Serial.print(": ");
+ Serial.println(racerTicks[i], DEC);
+ }
+ Serial.print("t: ");
+ Serial.println(currentTimeMillis, DEC);
+ }
+}
+
+void loop() {
+ blinkLED();
+
+ checkSerial();
+
+
+ if (raceStarting) {
+ if((millis() - lastCountDownMillis) > 1000){
+ lastCountDown -= 1;
+ lastCountDownMillis = millis();
+ }
+ if(lastCountDown == 0) {
+ raceStart();
+ raceStarting = false;
+ raceStarted = true;
+
+ digitalWrite(racer0GoLedPin,HIGH);
+ digitalWrite(racer1GoLedPin,HIGH);
+ digitalWrite(racer2GoLedPin,HIGH);
+ digitalWrite(racer3GoLedPin,HIGH);
+ }
+ }
+ if (raceStarted) {
+ currentTimeMillis = millis() - raceStartMillis;
+
+ for(int i=0; i<=3; i++)
+ {
+ if(!mockMode) {
+ values[i] = digitalRead(sensorPins[i]);
+ if(values[i] == HIGH && previoussensorValues[i] == LOW){
+ racerTicks[i]++;
+ if(racerFinishTimeMillis[i] == 0 && racerTicks[i] >= raceLengthTicks) {
+ racerFinishTimeMillis[i] = currentTimeMillis;
+ Serial.print(i);
+ Serial.print("f: ");
+ Serial.println(racerFinishTimeMillis[i], DEC);
+ digitalWrite(racer0GoLedPin+i,LOW);
+ }
+ }
+ previoussensorValues[i] = values[i];
+ }
+ else {
+ if(currentTimeMillis - lastUpdateMillis > updateInterval) {
+ racerTicks[i]+=(i+1);
+ if(racerFinishTimeMillis[i] == 0 && racerTicks[i] >= raceLengthTicks) {
+ racerFinishTimeMillis[i] = currentTimeMillis;
+ Serial.print(i);
+ Serial.print("f: ");
+ Serial.println(racerFinishTimeMillis[i], DEC);
+ digitalWrite(racer0GoLedPin+i,LOW);
+ }
+ }
+ }
+ }
+ }
+
+
+ if(racerFinishTimeMillis[0] != 0 && racerFinishTimeMillis[1] != 0 && racerFinishTimeMillis[2] != 0 && racerFinishTimeMillis[3] != 0){
+ if(raceStarted) {
+ raceStarted = false;
+ printStatusUpdate();
+ }
+ } else {
+ printStatusUpdate();
+ }
+}
+
diff --git a/RetoolingForOpenSprints/raceinabox/netsuck.py b/RetoolingForOpenSprints/raceinabox/netsuck.py
new file mode 100644
index 0000000..98af13b
--- /dev/null
+++ b/RetoolingForOpenSprints/raceinabox/netsuck.py
@@ -0,0 +1,77 @@
+"""-------------------------------------------------------------------------netsuck.py
+ DESCRIPTION: This code intercepts both sides of opensprints/goldsprintsfx
+ "conversation" to control a visual indication of progress using something
+ like a phsical clock or a race tree.
+ This makes it possible to not have a projector that costs more than your rollers.
+ It also makes it possible to do outdoor or mobile events.
+
+ COPYRIGHT: (c) 2013 Donald Delmar Davis, Suspect Devices, All Rights Reserved.
+ This is free software released under modified BSD (details included in source).
+
+ TECHNICAL: This is a basic combination of the client and server software from the
+ python in a nutshell book. It makes a lot of assumtions and should do a better
+ job of recovering when the pile of flash or the serial proxy crashes (which
+ happens).
+ It creates a server on 5331 (the only port gold sprints checks) and expects
+ to listen to serproxy on 5330
+"""
+import socket
+import re
+isocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
+osocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
+isocket.connect(('localhost',5330))
+#isocket.setblocking(0)
+isocket.settimeout(0.2)
+print "Connected to serproxy"
+osocket.bind(('',5331))
+osocket.listen(1)
+
+try:
+ while True:
+ connection,address=osocket.accept()
+ if not connection: break
+ print "Connected From", address
+ #connection.setblocking(0)
+ connection.settimeout(0.2)
+ while True:
+ try:
+ receivedData = connection.recv(8192)
+ except socket.error:
+ receivedData=None
+ if receivedData is not None:
+ #print ">"+re.escape(str(receivedData))+">"+str(len(receivedData))
+ isocket.sendall(receivedData)
+ for chunk in receivedData.split('\x00'):
+ if len(chunk)>0 and chunk[0] == 's':
+ print "(RE)SET RACE !!!"
+ if len(receivedData)==0:
+ print "ISSUE WITH CLIENT"
+
+ try:
+ sentData = isocket.recv(8192)
+ except socket.error:
+ sentData=None
+ if sentData is not None:
+ #print "<"+re.escape(str(sentData))+"<"+str(len(sentData))
+ connection.sendall(sentData)
+ for chunk in sentData.split('\x00'):
+ #if len(chunk.rstrip('\r')):
+ # print "<",re.escape(chunk),len(chunk)
+ if len(chunk) > 4 and chunk[0]=='0' :
+ done1=int((float(chunk[3:])/1566.0) * 100.00)
+ print "Bike # 1 is ", str(done1), "percent done"
+ if len(chunk) > 4 and chunk[0]=='1' :
+ done1=int((float(chunk[3:])/1566.0) * 100.00)
+ print "Bike # 2 is ", str(done1), "percent done"
+ if len(sentData)==0:
+ print "ISSUE WITH SERPROXY"
+ try:
+ isocket.sendall("\rv\r\x00")
+ except socket.error:
+ isocket.close()
+ isocket.connect(('localhost',5330))
+ break
+finally:
+ connection.close()
+ osocket.close()
+ isocket.close()
diff --git a/RetoolingForOpenSprints/raceinabox/raceInABox.py b/RetoolingForOpenSprints/raceinabox/raceInABox.py
new file mode 100755
index 0000000..1c97694
--- /dev/null
+++ b/RetoolingForOpenSprints/raceinabox/raceInABox.py
@@ -0,0 +1,186 @@
+#!/usr/bin/env python
+
+import wx
+import wx.lib.buttons
+
+[wxID_FRAME1, wxID_FRAME1BLAH1, wxID_FRAME1BLAH2, wxID_FRAME1RACER1,
+ wxID_FRAME1RACER1SPEED, wxID_FRAME1RACER1STATUS, wxID_FRAME1RACER1STATUS,
+ wxID_FRAME1RACER2, wxID_FRAME1SLIDER2, wxID_FRAME1STARTBUTTON,
+ wxID_FRAME1STOPBUTTON,
+] = [wx.NewId() for _init_ctrls in range(11)]
+
+class Frame1(wx.Frame):
+
+ #def create(parent):
+ # return Frame1(parent)
+
+
+ def _init_sizers(self):
+ # generated method, don't edit
+ self.boxSizer0 = wx.BoxSizer(orient=wx.VERTICAL)
+ self.boxSizer1 = wx.BoxSizer(orient=wx.HORIZONTAL)
+ self.boxSizer0.AddSizer(self.boxSizer1)
+
+ self.boxSizer2 = wx.BoxSizer(orient=wx.VERTICAL)
+ self.boxSizer1.AddSizer(self.boxSizer2,border=1,flag=wx.EXPAND)
+
+ self.boxSizer2.AddWindow(self.racer1, 0, border=0, flag=0)
+ self.boxSizer2.AddWindow(self.racer1Speed, 0, border=0, flag=0)
+ self.boxSizer2.AddWindow(self.racer1Status, 0, border=0, flag=0)
+ self.boxSizer3 = wx.BoxSizer(orient=wx.VERTICAL)
+ self.boxSizer1.AddSizer(self.boxSizer3)
+ self.boxSizer3.AddWindow(self.racer2, 0, border=0, flag=0)
+ self.boxSizer3.AddWindow(self.racer2Speed, 0, border=0, flag=0)
+ self.boxSizer3.AddWindow(self.racer2Status, 0, border=0, flag=0)
+ self.boxSizer4 = wx.BoxSizer(orient=wx.HORIZONTAL)
+ self.boxSizer0.AddSizer(self.boxSizer4)
+ self.boxSizer4.AddWindow(self.startButton, 0, border=10, flag=wx.EXPAND|wx.ALL)
+ self.boxSizer4.AddWindow(self.stopButton, 0, border=10, flag=wx.EXPAND|wx.ALL)
+ self.SetAutoLayout(True)
+ self.SetSizer(self.boxSizer0)
+ self.Layout()
+ self.Fit()
+
+
+ def _init_ctrls(self, prnt):
+ # generated method, don't edit
+ wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=None,
+ pos=wx.Point(535, 23), size=wx.Size(960, 527),
+ style=wx.DEFAULT_FRAME_STYLE, title='Frame1')
+ self.panel=wx.Panel(self)
+ self.SetClientSize(wx.Size(960, 505))
+
+ self.racer1 = wx.StaticText(id=wxID_FRAME1RACER1, label=u'racer #1',
+ name=u'racer1', parent=self, pos=wx.Point(0, 0), size=wx.Size(57,
+ 17), style=0)
+ self.racer1.SetLabelText(u'racer #1')
+
+ self.racer2 = wx.StaticText(id=wxID_FRAME1RACER2, label=u'racer #2',
+ name=u'racer2', parent=self, pos=wx.Point(0, 17), size=wx.Size(75,
+ 17), style=0)
+
+ self.racer1Speed = wx.Slider(id=wxID_FRAME1RACER1SPEED, maxValue=100,
+ minValue=0, name=u'racer1Speed', parent=self, pos=wx.Point(0, 34),
+ size=wx.Size(21, 150), style=wx.SL_HORIZONTAL, value=0)
+ self.racer1Speed.SetLabel(u'')
+ self.racer1Speed.Bind(wx.EVT_SCROLL_THUMBRELEASE,
+ self.OnRacer1SpeedScrollThumbrelease)
+ self.racer1Speed.Bind(wx.EVT_SCROLL_PAGEDOWN,
+ self.OnRacer1SpeedScrollPagedown)
+ self.racer1Speed.Bind(wx.EVT_SCROLL_PAGEUP,
+ self.OnRacer1SpeedScrollPageup)
+ self.racer1Speed.Bind(wx.EVT_SCROLL_THUMBTRACK,
+ self.OnRacer1SpeedScrollThumbtrack)
+ self.racer1Speed.Bind(wx.EVT_KEY_UP, self.OnRacer1SpeedKeyUp)
+ self.racer1Speed.Bind(wx.EVT_KEY_DOWN, self.OnRacer1SpeedKeyDown)
+
+ self.racer2Speed = wx.Slider(id=wxID_FRAME1SLIDER2, maxValue=100,
+ minValue=0, name='racer2Speed', parent=self, pos=wx.Point(0, 184),
+ size=wx.Size(21, 150), style=wx.SL_HORIZONTAL, value=14)
+ self.racer2Speed.SetLabel(u'')
+ self.racer2Speed.Bind(wx.EVT_SCROLL_THUMBRELEASE,
+ self.OnRacer2speedScrollThumbrelease)
+ self.racer2Speed.Bind(wx.EVT_SCROLL_THUMBTRACK,
+ self.OnRacer2speedScrollThumbtrack)
+ self.racer2Speed.Bind(wx.EVT_SCROLL_PAGEDOWN, self.OnRacer2speedScrollPagedown)
+ self.racer2Speed.Bind(wx.EVT_SCROLL_PAGEUP, self.OnRacer2speedScrollPageup)
+ self.racer2Speed.Bind(wx.EVT_KEY_UP, self.OnRacer2speedKeyUp)
+ self.racer2Speed.Bind(wx.EVT_KEY_DOWN, self.OnRacer2speedKeyDown)
+
+ self.racer1Status = wx.Gauge(id=wxID_FRAME1RACER1STATUS,
+ name=u'racer1Status', parent=self, pos=wx.Point(0, 334),
+ range=100, size=wx.Size(200, 16), style=wx.GA_HORIZONTAL)
+ self.racer1Status.SetInitialSize(wx.Size(200, 16))
+ self.racer1Status.SetToolTipString(u'racer1Status')
+
+ self.racer2Status = wx.Gauge(id=wxID_FRAME1RACER1STATUS,
+ name=u'racer2Status', parent=self, pos=wx.Point(0, 350),
+ range=100, size=wx.Size(200, 16), style=wx.GA_HORIZONTAL)
+ self.racer2Status.SetInitialSize(wx.Size(200, 16))
+ self.racer2Status.SetToolTipString(u'racer2Status')
+
+ self.startButton = wx.lib.buttons.GenButton(id=wxID_FRAME1STARTBUTTON,
+ label=u'start', name=u'startButton', parent=self, pos=wx.Point(0,
+ 366), size=wx.Size(86, 27), style=0)
+ self.startButton.SetToolTipString(u'Start Button')
+
+ self.stopButton = wx.lib.buttons.GenButton(id=wxID_FRAME1STOPBUTTON,
+ label=u'stop', name=u'stopButton', parent=self, pos=wx.Point(0,
+ 393), size=wx.Size(86, 27), style=0)
+ self.stopButton.SetLabelText(u'stopButton')
+ self.stopButton.SetHelpText(u'stop it!')
+ self.stopButton.SetToolTipString(u'Stop Button')
+ self.stopButton.Bind(wx.EVT_BUTTON, self.OnStopButtonButton,
+ id=wxID_FRAME1STOPBUTTON)
+
+ self.blah1 = wx.StaticText(id=wxID_FRAME1BLAH1, label=u'blah',
+ name=u'blah1', parent=self, pos=wx.Point(0, 0), size=wx.Size(57,
+ 17), style=0)
+ self.blah1.SetLabelText(u'racer #1')
+
+ self.blah2 = wx.StaticText(id=wxID_FRAME1BLAH2, label=u'blah',
+ name=u'blah2', parent=self, pos=wx.Point(0, 0), size=wx.Size(57,
+ 17), style=0)
+ self.blah2.SetLabelText(u'racer #1')
+
+ self._init_sizers()
+
+ def __init__(self, parent):
+ self._init_ctrls(parent)
+
+
+ def OnRacer1SpeedScrollThumbrelease(self, event):
+
+ event.Skip()
+
+ def OnRacer1SpeedScrollPagedown(self, event):
+ event.Skip()
+
+ def OnRacer1SpeedScrollPageup(self, event):
+ event.Skip()
+
+ def OnRacer1SpeedScrollThumbtrack(self, event):
+ event.Skip()
+
+ def OnRacer1SpeedKeyUp(self, event):
+ event.Skip()
+
+ def OnRacer1SpeedKeyDown(self, event):
+ event.Skip()
+
+ def OnRacer2speedScrollThumbrelease(self, event):
+ event.Skip()
+
+ def OnRacer2speedScrollThumbtrack(self, event):
+ event.Skip()
+
+ def OnRacer2speedScrollPagedown(self, event):
+ event.Skip()
+
+ def OnRacer2speedScrollPageup(self, event):
+ event.Skip()
+
+ def OnRacer2speedKeyUp(self, event):
+ event.Skip()
+
+ def OnRacer2speedKeyDown(self, event):
+ event.Skip()
+
+ def OnStopButtonButton(self, event):
+ event.Skip()
+
+class MyApp(wx.App):
+ def OnInit(self):
+ self.main = Frame1(parent=self)
+ self.main.Show()
+ self.SetTopWindow(self.main)
+ return True
+
+def main():
+ global application
+ application = MyApp(0)
+ application.MainLoop()
+
+if __name__ == '__main__':
+ main()
+