/* TPS多模式切换
通过控制改变TPS输出 by min
*/
#include <Servo.h>
#define button 12
#define outputPin 6
#define std 7 //led灯
#define turbo 8 //led灯
Servo gearbox;// 创建一个名为 gearbox 的伺服电机实例
int MAPValue = 0;
int outputValue = 0; //保存LED灯占空比
int ADJinValue = 0; //声明调整旋钮输入变量
int ADJoutValue = 0; //声明调整旋钮输出变量
int MODE = 0;//保持按钮按下的变量
int old = 0;//保持按钮状态的变量
int buttonPoll=0;
int angle;
//--------------------------------------------------------------------
void setup()
{ Serial.begin(115200);//初始化串口
gearbox.attach(9);//舵机连接到9
pinMode(button,INPUT_PULLUP);//设置按钮为输入
pinMode(outputPin, OUTPUT); //数字口要选择带~号的具有pwm功能的输出口
pinMode(std, OUTPUT);
pinMode(turbo, OUTPUT);
}
//--------------------------------------------------------------------
void loop(){
buttonPoll =digitalRead(button);
if(buttonPoll==1){delay(50);
buttonPoll =digitalRead(button);
if(buttonPoll==0){
MODE=old+1;}}
else{delay(100);
}
switch (MODE) {
case 1:
//angle =constrain(angle, 0, 160);
MAPValue = analogRead(A0);
ADJinValue = analogRead(A1); // 调整旋钮数值
ADJoutValue = map(ADJinValue, 0, 1023, 600, 800); // 等比映射调整旋钮范围
angle = map(MAPValue,150,ADJoutValue,0,179);
gearbox.write(angle);
outputValue = map(MAPValue, 0, ADJoutValue, 0,255); //映射TPS信号到输出电压 范围0到1024 TO 0到255
outputValue =constrain(outputValue, 0, 240);//限制输出范围为0-5V
analogWrite(outputPin, outputValue); //PWM最大取值255
digitalWrite(turbo,HIGH);
digitalWrite(std,LOW);
old =MODE;
Serial.print("TURBO");
Serial.print(" ");
Serial.println("MAPvalue=");
Serial.println(MAPValue);
delay(15);
break;
default:
MAPValue = analogRead(A0);
ADJinValue = analogRead(A1); // 调整旋钮数值
ADJoutValue = map(ADJinValue, 0, 1023, 600, 900); // 等比映射调整旋钮范围
angle = map(MAPValue,150,ADJoutValue,0,179);
gearbox.write(angle);
outputValue = map(MAPValue, 200, ADJoutValue, 0,255); //映射map信号到输出电压 范围0到1024 TO 0到255
outputValue =constrain(outputValue,20, 235);//限制输出范围为0-5V
analogWrite(outputPin, outputValue); //PWM最大取值255
digitalWrite(turbo,LOW);
digitalWrite(std,HIGH);
Serial.print("standerd");
Serial.print(" ");
Serial.println("MAPvalue=");
Serial.println(MAPValue);
delay(15);
// Serial.println(outputValue* (5.0 / 255.0));
old =0;
break;
}
}