45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
#define BTN0 A3
|
|
#define BTN1 A4
|
|
#define BTN2 A5
|
|
#define LED_Y 11
|
|
#define LED_R 17
|
|
|
|
void setup (){
|
|
Serial1.begin(19200);
|
|
|
|
pinMode(LED_Y,OUTPUT);
|
|
pinMode(LED_R,OUTPUT);
|
|
pinMode(BTN0,INPUT);
|
|
pinMode(BTN1,INPUT);
|
|
pinMode(BTN2,INPUT);
|
|
}
|
|
|
|
byte b, oldB = 0;
|
|
|
|
void loop () {
|
|
//We have three config. buttons, making a packet out of a single byte with a start header, so teensy can use it as it wants
|
|
//The header is signed by the two most important bits put high, so 128+64 in OR with other bits shifted by the needed ammount
|
|
//This approach only admits 5 configuration buttons, it should be enough
|
|
b = 0b11000000;
|
|
b |= digitalRead(BTN0);
|
|
b |= digitalRead(BTN1) << 1;
|
|
b |= digitalRead(BTN2) << 2;
|
|
if(oldB != b) Serial1.write(b);
|
|
oldB = b;
|
|
|
|
while(Serial1.available() > 0){
|
|
int a = Serial1.read();
|
|
if((a & 0b11000000) == 0b11000000){
|
|
digitalWrite(LED_Y, !(a & 0b00000001));
|
|
digitalWrite(LED_R, !(a & 0b00000010));
|
|
}
|
|
}
|
|
int angle = (int) (atan2(3,2) * 180 / 3.14);
|
|
angle = angle / 2 + angle % 2;
|
|
int dist = 256;
|
|
Serial1.write((char) 105); //Start packet
|
|
Serial1.write((char) angle); //Start packet
|
|
Serial1.write((char) dist); //Start packet
|
|
Serial1.write((char) 115); //Start packet
|
|
}
|