【急求!!!】 一个arduino控制频率发生器的问题。
因为要弄个比较特殊的频率发生器,而且要求实时显示输出状态, 第一时间就想到了arduino。 和朋友讨论后,朋友说很简单,然后写了一段程序,程序如下。float ontime =100;
float bps =50;
float offtime =(1000000.0/bps)-ontime;
int time=0;
unsigned long currentMicros;
long previousMicros = 0;
int i=1;
void setup(){
pinMode(3,OUTPUT);//out put
pinMode(9,INPUT);// input +ontime
pinMode(8,INPUT);// input -ontime
pinMode(10,INPUT);// input +bps
pinMode(11,INPUT);// input -bps
}
void loop()
{
if(digitalRead(9)==LOW)
{
if(ontime<750)
{
ontime=ontime+0.1;
offtime =(1000000.0/bps)-ontime;
}
}
if(digitalRead(8)==LOW)
{
if(ontime>10)
{
ontime=ontime-0.1;
offtime =(1000000.0/bps)-ontime;
}
}
if(digitalRead(10)==LOW)
{
if(bps<1000)
{
bps=bps+0.05;
offtime =(1000000.0/bps)-ontime;
}
}
if(digitalRead(11)==LOW)
{
if(bps>10)
{
bps=bps-0.05;
offtime =(1000000.0/bps)-ontime;
}
}
currentMicros = micros();//read present time
time = currentMicros - previousMicros;
if(i==1)
{
if(time>ontime)
{
previousMicros = currentMicros;//clean time difference
time=0;
turnoff();
i=0;
}
}
if(i==0)
{
if(time>offtime)
{
previousMicros = currentMicros;//clean time difference
time=0;
turnon();
i=1;
}
}
}
void turnon()
{
digitalWrite(3,HIGH);
}
void turnoff()
{
digitalWrite(3,LOW);
}
烧上去,的确能用了。 输出达到要求。
但是还差显示呢。。。
我自己弄了U8G的库 , 然后写好开机画面, 显示的内容。
然后,程序变成了这样。
#include <U8glib.h>
U8GLIB_ST7920_128X64_4X u8g(A0, 13, 12);
int hold=0;
float ontime =100;
float bps =10;
float offtime =(1000000.0/bps)-ontime;
float duty =ontime/(1000000.0/bps)*100;
int time=0;
unsigned long currentMicros;
long previousMicros = 0;
int i=1;
int output=3;
int key_oadd=9;
int key_osub=8;
int key_badd=10;
int key_bsub=11;
const uint8_t L[] PROGMEM = {
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xF4,0x71,0x74,0x22,0x18,0x83,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x45,0xEF,0x75,0xF6,0xD3,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x44,0x4F,0x75,0xF6,0x99,0xEF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x45,0xCF,0x04,0x76,0x3C,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x45,0xEF,0x75,0xF6,0x9E,0x6F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x44,0x71,0x75,0xE2,0xD8,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x40,0x12,0x00,0x87,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
0x44,0x00,0x02,0x00,0x82,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x97,0xB8,0x82,0x59,0xE6,0x2A,0xA2,0x59,0xC6,0x28,0x00,0x00,0x00,0x00,0x42,0x48,0x92,0x04,0x82,0x64,0x89,0x33,0x22,0x64,0x89,0x30,0x00,0x00,0x00,0x00,0x42,0x48,0x92,0x1C,0x82,0x44,0x8F,0x22,0x22,0x44,0x8F,0x20,0x00,0x00,0x00,0x00,
0x42,0x48,0x92,0x24,0x82,0x44,0x88,0x22,0x22,0x44,0x88,0x20,0x00,0x00,0x00,0x00,0x44,0x49,0x92,0x24,0x82,0x44,0x88,0x22,0x26,0x44,0x88,0x20,0x00,0x00,0x00,0x00,0x78,0x46,0x91,0x9C,0x87,0x44,0x67,0x22,0x1A,0x78,0x67,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
void draw( )
{
u8g.drawStr(0,12,"Digital interrupter");
u8g.drawLine(0,20,76,20); u8g.drawLine(0,21,76,21);
u8g.drawLine(77,19,101,7); u8g.drawLine(77,20,101,8);
u8g.drawLine(102,7,127,7); u8g.drawLine(102,8,127,8);
u8g.drawStr(6,30,"bps:");
u8g.setPrintPos( 85, 30);
u8g.print(bps);
u8g.drawStr(6,45,"ontime:");
u8g.drawStr(118,45,"us");
u8g.setPrintPos( 85, 45);
u8g.print(ontime);
u8g.drawStr(6,60,"duty");
u8g.drawStr(28,60,"cycle:");
u8g.drawStr(118,60,"%");
u8g.setPrintPos( 85, 60);
u8g.print(duty);
}
void turnon()
{
digitalWrite(output,HIGH);
}
void turnoff()
{
digitalWrite(output,LOW);
}
void setup(){
pinMode(output,OUTPUT);//out put
pinMode(key_oadd,INPUT);// input +ontime
pinMode(key_osub,INPUT);// input -ontime
pinMode(key_badd,INPUT);// input +bps
pinMode(key_bsub,INPUT);// input -bps
u8g.setFont(u8g_font_5x7);
u8g.firstPage();
do {
u8g.drawBitmapP( 0, 0, 16, 64, L);
}
while( u8g.nextPage() );
delay(5000);
}
void loop()
{
if(digitalRead(key_oadd)==LOW)
{
if(ontime<750)
{ontime=ontime+0.05;
offtime =(1000000.0/bps)-ontime;
duty =ontime/(1000000.0/bps)*100;//refresh
}
}
if(digitalRead(key_osub)==LOW)
{
if(ontime>10)
{ontime=ontime-0.05;
offtime =(1000000.0/bps)-ontime;
duty =ontime/(1000000.0/bps)*100;//refresh
}
}
if(digitalRead(key_badd)==LOW)
{
if(bps<1000)
{bps=bps+0.05;
offtime =(1000000.0/bps)-ontime;
duty =ontime/(1000000.0/bps)*100;//refresh
}
}
if(digitalRead(key_bsub)==LOW)
{
if(bps>10)
{bps=bps-0.05;
offtime =(1000000.0/bps)-ontime;
duty =ontime/(1000000.0/bps)*100;//refresh
}
}
currentMicros = micros();//read present time
time = currentMicros - previousMicros;
if(i==1)
{
if(time>ontime)
{
previousMicros = currentMicros;//clean time difference
time=0;
turnoff();
i=0;
}
}
if(i==0)
{
if(time>offtime)
{
previousMicros = currentMicros;//clean time difference
time=0;
turnon();
i=1;
}
}
if(hold==0)
{
u8g.firstPage( );
do
{
draw( );
}
while( u8g.nextPage( ));
}
}
然后,做出来效果是这样,
虽然显示是正常了,可是输出完全不是这么一回事(无输出? 或者各种奇怪的输出。。。)。。。
朋友说是要加上中断了,不然12864的刷新会影响输出。。。
大神求救\("▔□▔)/!!! u8g,俺心中的痛啊,这库加默认sd库是可以显示了,也能存储了,可是
~~~~
模拟口读取的值就走样了~~~~
看楼主没用SD库,难道也是模拟口取值有问题~~~
页:
[1]