这个非常棒的手动PWM调速云台,预留了Y轴控制,可实现2D平面实时移动。
#include <Arduino.h>
int latchPin = 8;//RS
int dataPin = 9;//RW
int clockPin =10;//EN
unsigned char tabe[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//查表法//0-9数字
int xpotPin = 0; //设置模拟口0为X的信号输入端口A0
int ypotPin = 1; //设置模拟口1为Y的信号输入端口A1
int xval=0; //设置变量
int yval=0;
int dirpin=11;//定义数字接口信号线 CW+
int stepperpin=12;//定义数字接口信号线 CLK+
int enpin=13;//定义数字接口信号线 FN+
int r;//速度
void setup()
{
pinMode(latchPin, OUTPUT); //设置引脚为输出
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(xpotPin,INPUT);//
pinMode(ypotPin,INPUT);//
pinMode(dirpin,OUTPUT); //设定舵机接口为输出接口
pinMode(stepperpin,OUTPUT); //设定舵机接口为输出接口
Lcdint( );//lcd
}
////////////////////////////写SPI时序,具体参考shiftout 命令使用/////////////////////////////
void WriteByte(int dat)
{
digitalWrite(latchPin, HIGH);
shiftOut(dataPin, clockPin, MSBFIRST, dat);
digitalWrite(latchPin, LOW);
}
///////////////////写命令/////////////////////////////////////
void LcdCommandWrite(int value) {
int H_data,L_data;
H_data = value;
H_data &= 0xf0; //屏蔽低4位的数据
L_data = value; //xxxx0000格式
L_data &= 0x0f; //屏蔽高4位的数据
L_data <<= 4; //xxxx0000格式
WriteByte(0xf8); //RS=0,写入的是指令;
WriteByte(H_data);
WriteByte(L_data);
}
//////////////////////写数据/////////////////////////////////////
void LcdDataWrite(int value) {
int H_data,L_data;
H_data = value;
H_data &= 0xf0; //屏蔽低4位的数据
L_data = value; //xxxx0000格式
L_data &= 0x0f; //屏蔽高4位的数据
L_data <<= 4; //xxxx0000格式
WriteByte(0xfa); //RS=1,写入的是数据
WriteByte(H_data);
WriteByte(L_data);
}
////////////////////// /////////////////////////////////////
void Lcdint(void)
{
LcdCommandWrite(0x30); // 设定为基本指令
delay(5);
LcdCommandWrite(0x03); // //允许输入卷动位址
delay(5);
LcdCommandWrite(0x0c); // //脱离随眠状态,显示打开,关光标,反白关.
delay(5);
LcdCommandWrite(0x01); // 清屏指令.
delay(5);
LcdCommandWrite(0x06); // AC自动加一,光标右移,整体显示不移动
delay(5);
}
void LCD_zfc(char *p)//定义一个带指针的函数?(字符串)
{
while(*p!=0)//不能用";"
LcdDataWrite(*p++);
}
/************************显示1 *********************************/
void display1(void)
{
int dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;
long temp ; //存放温度值的10倍=12345678;
xval = analogRead(xpotPin); //xval变量为从0信号口读取到的数值
temp=xval;;//MAX6675温度
//temp=12345678;
dt1 = temp%10;//1位
dt2 = temp%100/10;//2位
dt3 = temp%1000/100;//3位
dt4 = temp%10000/1000;//4位
dt5 = temp%100000/10000;//5位
dt6 = temp%1000000/100000;//6位
dt7 = temp%10000000/1000000;//7位
dt8 = temp/10000000;//8位 最高位
LcdCommandWrite(0x88);//LCD12864_W ((0或1),****) 0写指令 1写数据
// 0xCE,0xC2,0xB6,0xC8
LCD_zfc("X ");
LcdDataWrite(0xd6 );
LcdDataWrite(0xe1 );
LcdDataWrite(0x3a);// .
|