#include <stdlib.h> #include "Wire.h" #include "WiiChuck.h" WiiChuck wii = WiiChuck(); int sensorAccelX,sensorAccelY,sensorAccelZ; int sensorAccelWiiX,sensorAccelWiiY,sensorAccelWiiZ; int sensorJoyX,sensorJoyY; int buttonC,buttonZ; void setup() { wii.init(); //初始化Wii手柄 Serial.begin(57600); } void loop() { //获取加速度传感器的模拟量值 sensorAccelX = analogRead(A0); sensorAccelY = analogRead(A1); sensorAccelZ = analogRead(A2); //获取Wii手柄的各个参数 if (true == wii.read()) { sensorAccelWiiX = wii.getAccelAxisX(); sensorAccelWiiY = wii.getAccelAxisY(); sensorAccelWiiZ = wii.getAccelAxisZ(); sensorJoyX = wii.getJoyAxisX(); sensorJoyY = wii.getJoyAxisY(); buttonZ = wii.getButtonZ(); buttonC = wii.getButtonC(); } //通过各个参数值推断当前两手的姿态,进而控制机器人 //在未按下Z和C键时通过摇杆控制机器人移动 if((buttonZ == 1) && (buttonC == 1)) { if(sensorJoyY > 200) { Serial.write(1);//向机器人发送1,机器人将做出前进的动作 } else if((sensorJoyY < 76) && (sensorJoyY > 40)) { Serial.write(2); //向机器人发送2,机器人将做出后退的动作 } if((sensorJoyX < 76) && (sensorJoyX > 40)) { Serial.write(15); //向机器人发送15,机器人将做出左转的动作 } else if(sensorJoyX > 200) { Serial.write(14); //向机器人发送14,机器人将做出右转的动作 } } //按下Z键时控制机器人的左右平移和蹲下起身 if(buttonZ == 0) { if(sensorJoyY > 200) { Serial.write(13); //向机器人发送13,机器人将做出起身的动作 } else if((sensorJoyY < 76) && (sensorJoyY > 40)) { Serial.write(12); //向机器人发送12,机器人将做出蹲下的动作 } if((sensorJoyX < 76) && (sensorJoyX > 40)) { Serial.write(8); //向机器人发送8,机器人将做出左移的动作 } else if(sensorJoyX > 200) { Serial.write(7); //向机器人发送7,机器人将做出右移的动作 } } //按下C键时控制机器人在跌倒的情况下爬起来 if((buttonZ == 1) && (buttonC == 0)) { if(sensorJoyY > 200) { Serial.write(9); //向机器人发送9,机器人将从前爬起 } else if((sensorJoyY < 76) && (sensorJoyY > 40)) { Serial.write(16); //向机器人发送16,机器人将从后爬起 } } //通过加速度传感器控制机器人左臂的动作 if(sensorAccelX > 500) { Serial.write(4); //向机器人发送4,机器人将做出左摆的动作 } if(sensorAccelZ > 450) { Serial.write(6); //向机器人发送6,机器人将做出左拳的动作 } //通过Wii手柄控制机器人右臂的动作 if(sensorAccelWiiY < 154) { Serial.write(3); //向机器人发送3,机器人将做出右摆的动作 } if(sensorAccelWiiX < 115) { Serial.write(5); //向机器人发送5,机器人将做出右拳的动作 } delay(200); }