這個非常棒的手動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);// .
|