Infraröd kämpar Tank (4 / 5 steg)
Steg 4: programmering
Hämta Makeblock bibliotek och lägga den under Arduino bibliotek. Arduino källkoden för IR kämpar tank är följande:
#include "MeOrion.h"
#include < SoftwareSerial.h >
#include "MeIR.h"
MeIR irsend;
MeDCMotor MotorL(M1);
MeDCMotor MotorR(M2);
MeRGBLed ledBottom(PORT_3);
Me7SegmentDisplay disp(PORT_4);
MeInfraredReceiver infraredReceiverDecode(PORT_5);
MeUSBHost joypad(PORT_6);
Motsvarande buffert data av nycklar på joysticken
Default:128-127-128-127-15-0-0-128
L1:128-127-128-127-15-1-0-128
R1:128-127-128-127-15-2-0-128
L2:128-127-128-127-15-4-0-128
R2:128-127-128-127-15-8-0-128
Triangeln key:128-127-128-127-31-0-0-128 (0001 1111)
Fyrkantiga key:128-127-128-127-143-0-0-128 (1000 1111)
X key:128-127-128-127-79-0-0-128 (0100 1111)
Circle key:128-127-128-127-47-0-0-128 (0010 1111)
Up:128-127-128-127-0-0-0-128 (0000 0000)
Down:128-127-128-127-4-0-0-128 (0000 0100)
Left:128-127-128-127-6-0-0-128 (0000 0110)
Right:128-127-128-127-2-0-0-128 (0000 0010)
SELECT:128-127-128-127-15-16-0-128
Start:128-127-128-127-15-32-0-128
Joystick: rätt X-höger Y-vänster X vänster Y-15-0-0-128
MeRGBLed ledTop (PORT_7, SLOT2, 15);
int moveSpeed = 200.
uint8_t ReceiverCode;
int bulletNumber = 16.
int khz = 38. 38kHz bärvågsfrekvens för NEC-protokollet
flyta lifeValue = 8;
booleska gotShootIndex = 1;
void setup()
{
infraredReceiverDecode.begin();
Serial.println ("InfraredReceiverDecode Start!");
Serial.BEGIN(9600);
joypad.init(USB1_0);
Disp.display(bulletNumber);
displayLifeValue();
int fördröjningstid = 360;
för (uint8_t t = 0; t < 16; t ++) / / blink led
{
ledBottom.setColor(200,0,0); LED på
ledBottom.show();
Delay(delayTime);
ledBottom.setColor(0,0,0); ledde bort
ledBottom.show();
Delay(delayTime);
Fördröjningstid-= 20;
}
}
void shoot() {/ / skjuta, punkt nummer -1
bulletNumber-= 1;
om (bulletNumber > = 0) {
unsigned int irSignal [] = {9000, 4500, 560 560 560, 560, 560, 1690, 560 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1690, 560, 1690, 560, 560, 560, 1690, 560, 1690, 560, 1690, 560, 1690, 560, 1690, 560 560, 560, 560, 560, 560, 560, 1690, 560 560, 560, 560, 560, 560, 560, 560, 560, 1690, 560, 1690, 560, 1690, 560, 560 560, 1690, 560, 1690, 560, 1690, 560, 1690, 560, 39416, 9000, 2210, 560}; AnalysIR Batch Export (IRremote) - RAW
irsend.sendRaw (irSignal, sizeof(irSignal)/sizeof(irSignal[0]), khz); Skicka IR-signalen
ledBottom.setColor(0,0,200);
ledBottom.show();
Backward();
buzzerOn();
Delay(100);
Stop();
Forward();
Delay(80);
ledBottom.setColor(0,0,0);
ledBottom.show();
Stop();
buzzerOff();
} annat {
bulletNumber = 0;
}
Disp.display(bulletNumber);
}
void gotShoot() {
Serial.println(ReceiverCode);
IF(ReceiverCode == 0x08) {
Serial.println fick ("skjuta");
lifeValue-= 0,5;
IF(lifeValue<0) {
lifeValue = 0;
}
ledTop.setColorAt (lifeValue, 0, 0, 0);
ledTop.show();
IF(gotShootIndex) {
ledBottom.setColor(200,0,0); bakåt och flash röd led
ledBottom.show();
Backward();
Delay(100);
ledBottom.setColor(0,0,0);
ledBottom.show();
Stop();
}
gotShootIndex =! gotShootIndex;
}
}
void displayLifeValue() {
lifeValue = 8;
för (int8_t t = 0; t < lifeValue; t ++) {/ / led-ljus
ledTop.setColorAt t, 200,0,0,
ledTop.show();
Delay(150);
}
}
void loop()
{
IF(infraredReceiverDecode.available()) {
ReceiverCode = infraredReceiverDecode.read();
gotShoot();
}
IF(!joypad.device_online) {
joypad.probeDevice();
Delay(1000);
} annat {
int längd = joypad.host_recv();
parseJoystick (joypad. RECV_BUFFER);
Delay(5);
}
}
void parseJoystick (unsigned char * buf) //Analytic funktion, skriv ut 8 byte från USB-värd
{
utskriftsbufferten data att felsöka
int jag = 0;
för (jag = 0; jag < 7; i ++)
// {
Serial.Print(BUF[i]);
Serial.Print('-');
// }
Serial.println(BUF[7]);
Delay(10);
Switch (buf[5])
{
fall 1: / / L1 reset liv värde
displayLifeValue();
bryta;
fall 2: / / R1 reset punkt nummer
bulletNumber = 16.
Disp.display(bulletNumber);
bryta;
fall 4: / / L2
bryta;
mål 8: / / R2
bryta;
standard:
bryta;
}
om ((128! = buf[0]) || (127! = buf[1]) || (128! = buf[2]) || (127! = buf[3]))
{
BUF [0]-buf [3] motsvarande vänster och höger styrspak
}
annat
{
Switch (buf[4])
{
mål 79: / / X
Stop();
bryta;
fall 0: / / upp
Forward();
bryta;
fall 4: / / ner
Backward();
bryta;
mål 6: / / vänster
TurnLeft();
bryta;
fall 2: / / höger
TurnRight();
bryta;
fall 143: / / fyrkantiga nyckel
bryta;
fall 31: / / triangel nyckel
Shoot();
bryta;
fall 47: / / cirkel nyckel
bryta;
standard:
Stop();
bryta;
}
}
}
void Forward()
{
MotorL.run(-moveSpeed);
MotorR.run(moveSpeed);
}
void Backward()
{
MotorL.run(moveSpeed);
MotorR.run(-moveSpeed);
}
void TurnLeft()
{
MotorL.run(moveSpeed);
MotorR.run(moveSpeed);
}
void TurnRight()
{
MotorL.run(-moveSpeed);
MotorR.run(-moveSpeed);
}
void Stop()
{
MotorL.run(0);
MotorR.run(0);
}