arduino uno3 的小白编程问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arduino uno3 的小白编程问题相关的知识,希望对你有一定的参考价值。

各位好心人啊><是这样的~我想做的东西很简单 一个红外感应器感应时输入信号(我觉得输入的电压是连在A0上的...也不知道对不对囧),控制4、5引脚的输出。不过感应次数在奇数次和偶数次时进行的操作不一样....

const int switchleft=4 ;
const int switchright=5;
const int sensor=AO;

void setup()
pinMode(switchleft,OUTPUT);
pinMode(switchright,OUTPUT);
pinMode(sensor,INPUT);
int i=0;


void loop()
if(sensor == HIGH)
i=i+1;
if(i%2 == 0)
digitalWrite(switchleft,HIGH);
digitalWrite(switchright,LOW);
delay(500);

else
digitalWrite(switchleft,LOW);
digitalWrite(switchright,HIGH);
delay(500);



else
digitalWrite(switchleft,HIGH);
digitalWrite(switchright,HIGH);



但是校验的时候告诉我说
sketch_may26a:2: error: 'AO' was not declared in this scope
sketch_may26a.cpp: In function 'void loop()':
sketch_may26a:13: error: 'i' was not declared in this scope
于是我就傻眼了囧....有的错误是什么都没看懂...好伤心啊><、、求解救啊...
很奇怪,改了一改,校验的时候都说正确了,但是执行的时候不知道是不能解读输入信号还是怎么样,输出信号一直输出没有变化囧....

int i=0;这句写在setup里是变成局部变量了,只有setup函数里才能使用,应该放到外面去。
AO是什么应该是A0(零)吧?
还有,如果判断的是数字信号的话还是不要使用模拟输入口了。
参考技术A 我先解释一下错误
AO那个地方应该写A0
然后 i的初始化要写成 int i

然后你这个代码逻辑有问题,如果传感器快速变化,就会导致你的程序无法反应

Arduino Uno 压电扬声器循环而不是播放一次(编程新手)

【中文标题】Arduino Uno 压电扬声器循环而不是播放一次(编程新手)【英文标题】:Arduino Uno Piezo Speaker loops instead of playing once (New to programming) 【发布时间】:2017-06-11 05:08:14 【问题描述】:

我有一个项目要在一天内完成,我不希望这个问题得到回答,尽管它是一个非常简单的问题。我有一个从以下站点使用的代码: http://dominikzeman.blogspot.co.nz/2016/12/we-are-number-one-but-its-arduino.html 这是一个简单的代码,它通过压电扬声器播放歌曲“We are number one”,但是它循环播放我需要的歌曲而没有循环。我尝试了各种策略(请记住,这对我来说是新的)来停止循环,但每次都会出错。

代码如下:

const int fn = 400;
const int hn = 200;
const int qn = 100;
const int f5 = 698;
const int c6 = 1047;
const int b5 = 988;
const int gh5 = 831;
const int ch6 = 1109;
const int dh6 = 1245;

int song[] = 
f5,fn + hn,
c6,hn,
b5,qn,
c6,qn,
b5,qn,
c6,qn,
b5,hn,
c6,hn,
gh5,fn,
f5,fn + hn,
f5,hn,
gh5,hn,
c6,hn,
ch6,fn,
gh5,fn,
ch6,fn,
dh6,fn,
c6,hn,
ch6,hn,
c6,hn,
ch6,hn,
c6,fn
;

void setup() 
Serial.begin(9600);


void loop() 

for (int i = 0; i < (sizeof(song)/sizeof(int)); i = i + 2)
tone(8, song[i]);
delay(song[i + 1]);


noTone(8);
delay(1000);


我确实知道问题是如果我想让它停止,那么在 void 循环中不应该有任何代码,但是如果没有不断令人沮丧的错误,我就无法修复它。

任何快速的帮助都是救命稻草。

【问题讨论】:

【参考方案1】:

首先,最好将播放歌曲的代码隔离在一个单独的函数中:

void PlaySong()

    for (int i = 0; i < (sizeof(song)/sizeof(int)); i = i + 2)
        tone(8, song[i]);
        delay(song[i + 1]);
    

要在启动时只播放一次歌曲,请从setup() 调用它:

void setup() 
    Serial.begin(9600); // not sure if you need this
    PlaySong();

要在按下按钮或输入更改时播放歌曲,您可以在loop() 中进行测试,如果按下则从那里调用一次函数。

【讨论】:

以上是关于arduino uno3 的小白编程问题的主要内容,如果未能解决你的问题,请参考以下文章

arduino 开发用啥编程语言

使用 UART 从 Raspberry Pi 编程 Arduino

arduino编程用的是啥软件

基于Arduino IDE的ESP8266 ESP8266编程问题

Arduino案例实操 -- 智能巡防小车Arduino IDE巡线小车编程

Arduino Uno 压电扬声器循环而不是播放一次(编程新手)