|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
I2C with Arduino
I'm having some trouble communicating with the Arduino over I2C.
We're planning to use it for LED strips, since almost all our PWM slots are taken. But most examples I find online use Java, not Python. Is there any way to easily write a string over I2C? For example, writing something like "rgb,10,0,255" would turn on the RGB strip. |
|
#2
|
||||
|
||||
|
Re: I2C with Arduino
Quote:
|
|
#3
|
||||
|
||||
|
Re: I2C with Arduino
Here.
Quote:
|
|
#4
|
||||
|
||||
|
Re: I2C with Arduino
First part, should be pretty straightforward.
Code:
wire = wpilib.I2C(wpilib.I2C.Port.kOnBoard, 4) Code:
wire.transaction(b'go', 0) It's weird that the java code isn't trying to receive any data (maybe writeBulk is more appropriate?). |
|
#5
|
||||
|
||||
|
Re: I2C with Arduino
Thanks, works great! In case anyone else stumbles across this, here's the code I used:
Code:
import wpilib
class MyRobot(wpilib.IterativeRobot):
def robotInit(self):
self.stick = wpilib.Joystick(0)
self.arduino = wpilib.I2C(wpilib.I2C.Port.kOnboard, 4)
def teleopPeriodic(self):
if (self.stick.getTrigger()):
try:
data = self.arduino.transaction(b'go', 0)
except:
pass
else:
try:
data = self.arduino.transaction(b'stop', 0)
except:
pass
if __name__ == "__main__":
wpilib.run(MyRobot)
Code:
#include <Wire.h>
void setup()
{
Wire.begin(4); // join i2c bus with address #4
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600);
Serial.print("Hello");
}
void loop()
{
delay(100);
}
void receiveEvent(int howMany)
{
String rxString = "";
while ( Wire.available() > 0 )
{
char n=(char)Wire.read();
if(((int)n)>((int)(' ')))
rxString += n;
}
Serial.print(rxString);
}
|
|
#6
|
||||
|
||||
|
Re: I2C with Arduino
Awesome, I like how much shorter it is than the Java version:
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|