当我尝试使用此代码时,我遇到了问题:
int ledStart = 30;
boolean commonHigh = true;
void setup() {
Serial.begin(115200);
SetTimer(0, 0, 10); // 10 seconds
StartTimer();
for (int i =0;i<9;++i) {
pinMode (i, OUTPUT);
}
pinMode(9, INPUT);
}
int counter = 0;
bool go_by_switch = true;
int last_input_value = LOW;
void loop() {
// put your main code here, to run repeatedly:
number++;
delay(1000);
if(number>9)
number=0; // If number is bigger than 9, then number is 0
}
// 0 6
// pins A B C D E F G
int ledpins[] = {12, 10, 7, 4, 2, 13, 8};
int pincnt = 7;
int number = 0;
int sevenseg[10][7] = {
// A, B, C, D, E, F, G
{1, 1, 1, 1, 1, 1, 0}, // A-F shall light. G shall not light.
{0, 1, 1, 0, 0, 0, 0}, // A shall not light. B and C shall light.
/*0*/
/*1*/
/*2*/
/*3*/
/*4*/
/*5*/
/*6*/
/*7*/
/*8*/
{1, 1, 1, 1, 1, 1, 1, 1}
if(go_by_switch) {
int switch_input_value = digitalRead(9);
if(last_input_value == LOW && switch_input_value == HIGH) {
counter = (counter + 1) % 10;
}
last_input_value = switch_input_value;
}
else {
delay(500);
counter = (counter + 1) % 10;
}
writeNumber(counter);
}
for (int p=0; p<pincnt; p++) {
pinMode (ledpins[P], OUTPUT);
//It will count from 0 to smaller than 7. {12, 10, 7, 4, 2, 13, 8}; It will count from 0 to smaller than 7.
// 0 1 2 3 4 5 6
digitalWrite(ledpins[P], LOW);
}
for (int x=0; x<pincnt; x++); { //x is smaller than 7. The point is to bring out one of the patterns that will show on the display
if (sevenseg[number][x]) // sevenseg = 7-segment display
digitalWrite (ledpins[x], HIGH); // If it is 1, then there will be light.
else
digitalWrite (ledpins[x], LOW); // If it is 0, then there will not be light.
// A
//F B
// G
//E C
// D
我收到的错误消息是:
_28.10.2015.ino:在函数'void setup()'中:
_28.10.2015.ino:7:20:错误:未在此范围内宣布'SetTimer'
_28.10.2015.ino:8:14:错误:未在此范围内声明'StartTimer'
_28.10.2015.ino:在函数'void loop()'中:
_28.10.2015.ino:22:1:错误:此范围内未声明“数字”
_28.10.2015.ino:在全球范围内:
_28.10.2015.ino:52:1:错误:在'if'之前预期'}'
_28.10.2015.ino:52:1:错误:'int [7]'的初始化程序太多
_28.10.2015.ino:52:1:错误:预期','或';'在'if'之前
Feil ved kompilering。
(Feil ved kompilering =编译错误(挪威语)
答案 0 :(得分:1)
问题在于,您没有声明这些功能导致错误,而且#34;数字&#34;变量。 您需要声明它们,例如:
int number;
void StartTimer( )
{
// function code;
}
或包括&#34; .h&#34;包含这些功能,如@Neil Locketz说。
答案 1 :(得分:1)
此代码存在很多问题。
loop()
关闭}
函数,然后继续编写更多不属于任何函数的代码。 sevenseg[][]
,但是你没有用分号结束语句。for()
循环缺少其右括号}
。for()
循环在左大括号之前有一个分号。它不应该存在。number
函数中使用变量loop()
,但在使用后定义了number
。您必须在使用之前定义变量。SetTimer()
函数中调用StartTimer()
和setup()
,但未定义这些函数。那是因为1,你没有包含定义这些函数的库,或者2,你没有自己定义这些函数。如果您的问题是1,那么我假设您打算使用#include <SimpleTimer.h>
。请注意,您还必须安装该库。有关如何下载并将其添加到Arduino库的说明是here。最后,你必须创建一个这样的计时器对象:SimpleTimer timer;
然后你可以调用这个函数,timer.SetTimer(your-parameters-here);
。我可能还有其他一些错过的东西,但这应该会给你一个起点。看起来你已经创建了很多代码而没有进行测试,看它是否有效。我建议一步一步......编码一个逻辑块,看看它是否有效之前你继续编写你的下一个想法。看起来它可能需要更多时间,但最终通常是一种更快的编程方式。
我要做的另一个建议是在你使用它们的函数中定义变量。像所做的那样使所有变量“全局”并不是编写代码的好方法。例如:
void loop()
{
static int number = 0;
number++;
delay(1000);
if (number > 9)
{
number = 0;
}
}
请注意关键字static
的使用。这将确保存储在number
中的值在函数结束时不会消失。换句话说,下次调用loop()
函数时,该值仍将存在。
最后,如果我不得不猜测你想要完成什么,我认为你的代码应该看起来更像这样。看起来好像你正在尝试不同的东西,所以我从原始代码中留下了许多代码片段,这些代码片段实际上没有做任何事情:
void setup() {
Serial.begin(115200);
for (int i = 0; i < 9; ++i)
{
pinMode (i, OUTPUT);
}
pinMode(9, INPUT);
}
void loop() {
static int counter = 0;
static int last_input_value = LOW;
static bool go_by_switch = true;
if(go_by_switch)
{
int switch_input_value = digitalRead(9);
if(last_input_value == LOW && switch_input_value == HIGH)
{
counter = (counter + 1) % 10;
}
last_input_value = switch_input_value;
}
else
{
delay(500);
counter = (counter + 1) % 10;
}
writeNumber(counter);
}
void writeNumber (int count)
{
#define PIN_COUNT 7
#define NUM_OF_SEGMENTS 7
#define NUM_OF_NUMBERS 10
// 0 6
// pins A B C D E F G
static const int ledpins[PIN_COUNT] = {12, 10, 7, 4, 2, 13, 8};
static const int sevenseg[NUM_OF_NUMBERS][NUM_OF_SEGMENTS] =
{
// A B C D E F G
{1, 1, 1, 1, 1, 1, 0}, //0
{0, 1, 1, 0, 0, 0, 0}, //1
{1, 1, 0, 1, 1, 0, 1}, //2
{1, 1, 1, 1, 0, 0, 1}, //3
{0, 1, 1, 0, 0, 1, 1}, //4
{1, 0, 1, 1, 0, 1, 1}, //5
{1, 0, 1, 1, 1, 1, 1}, //6
{1, 1, 1, 0, 0, 0, 0}, //7
{1, 1, 1, 1, 1, 1, 1}, //8
{1, 1, 1, 1, 0, 1, 1}, //9
};
static int number = 0;
int i;
number++;
delay(1000);
if(number >= NUM_OF_NUMBERS)
{
number = 0;
}
/* Clear all segments of the 7-segment display. */
for (i = 0; i < PIN_COUNT; i++)
{
pinMode (ledpins[i], OUTPUT);
digitalWrite(ledpins[i], LOW);
}
/* Set the 7-segment display with the current number. */
for (i = 0; i < PIN_COUNT; i++)
{
if (sevenseg[number][i]) // sevenseg = 7-segment display
digitalWrite (ledpins[i], HIGH); // If it is 1, then there will be light.
else
digitalWrite (ledpins[i], LOW); // If it is 0, then there will not be light.
}
}