调用void函数arduino后出现循环问题
我制作了一个简单的程序,点亮RGB二极管,并通过i2c从键盘接收信息 我有一个奇怪的问题,调用void函数后i2c不能正常工作。当我用常规循环切换函数时,同样的情况也会发生 首先,我认为它与analog4和analog5端口相连,但在更改功能后,很明显,这两者之间没有关系 在评论电位计(i)的环路方法后,键盘是一种魅力 我把代码放在下面调用void函数arduino后出现循环问题,arduino,Arduino,我制作了一个简单的程序,点亮RGB二极管,并通过i2c从键盘接收信息 我有一个奇怪的问题,调用void函数后i2c不能正常工作。当我用常规循环切换函数时,同样的情况也会发生 首先,我认为它与analog4和analog5端口相连,但在更改功能后,很明显,这两者之间没有关系 在评论电位计(i)的环路方法后,键盘是一种魅力 我把代码放在下面 #include <Wire.h> #include "Adafruit_MPR121.h" Adafruit_MPR121 cap =
#include <Wire.h>
#include "Adafruit_MPR121.h"
Adafruit_MPR121 cap = Adafruit_MPR121();
uint16_t lasttouched = 0;
uint16_t currtouched = 0;
int RGB1[] = { 22, 23, 24 };
int RGB2[] = { 25, 26, 27 };
int RGB3[] = { 28, 29, 30 };
int RGB4[] = { 31, 32, 33 };
void setup()
{
for (int i = 0; i < 3; i++){
pinMode(RGB1[i], OUTPUT);
digitalWrite(RGB1[i], HIGH);
pinMode(RGB2[i], OUTPUT);
digitalWrite(RGB2[i], HIGH);
pinMode(RGB3[i], OUTPUT);
digitalWrite(RGB3[i], HIGH);
pinMode(RGB4[i], OUTPUT);
digitalWrite(RGB4[i], HIGH);
}
Serial.begin(9600);
Serial.println("Adafruit MPR121 Capacitive Touch sensor test");
if (!cap.begin(0x5A)) {
Serial.println("MPR121 not found, check wiring?");
while (1);
}
Serial.println("MPR121 found!");
}
void loop()
{
currtouched = cap.touched();
for (uint8_t i=0; i<12; i++) {
// it if *is* touched and *wasnt* touched before, alert!
if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
Serial.print(i); Serial.println(" touched");
}
// if it *was* touched and now *isnt*, alert!
if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) {
Serial.print(i); Serial.println(" released");
}
}
// reset our state
lasttouched = currtouched;
Potentiometer(0);
Potentiometer(1);
Potentiometer(2);
Potentiometer(3);
// comment out this line for detailed data from the sensor!
return;
// debugging info, what
Serial.print("\t\t\t\t\t\t\t\t\t\t\t\t\t 0x"); Serial.println(cap.touched(), HEX);
Serial.print("Filt: ");
for (uint8_t i=0; i<12; i++) {
Serial.print(cap.filteredData(i)); Serial.print("\t");
}
Serial.println();
Serial.print("Base: ");
for (uint8_t i=0; i<12; i++) {
Serial.print(cap.baselineData(i)); Serial.print("\t");
}
Serial.println();
delay(100);
}
void Potentiometer(int i){
int j = analogRead(i);
switch (i+1){
case 1:
detectColor(RGB1, j);
break;
case 2:
detectColor(RGB2, j);
break;
case 3:
detectColor(RGB3, j);
break;
case 4:
detectColor(RGB4, j);
break;
}
}
void detectColor(int i[], int j){
if (j < 25)
RGB_color(i, 0);
if (j > 25 && j < 195)
RGB_color(i, 1);
if (j > 195 && j < 365)
RGB_color(i, 2);
if (j > 365 && j < 535)
RGB_color(i, 3);
if (j > 535 && j < 705)
RGB_color(i, 4);
if (j > 705 && j < 875)
RGB_color(i, 5);
if (j > 875 && j < 1010)
RGB_color(i, 6);
if (j > 1010)
RGB_color(i, 7);
}
void RGB_color(int dioda[], int color)
{
switch (color){
case 0:
digitalWrite(dioda[0], HIGH);
digitalWrite(dioda[1], HIGH);
digitalWrite(dioda[2], HIGH);
break;
case 1:
digitalWrite(dioda[0], LOW);
digitalWrite(dioda[1], HIGH);
digitalWrite(dioda[2], HIGH);
break;
case 2:
digitalWrite(dioda[0], HIGH);
digitalWrite(dioda[1], LOW);
digitalWrite(dioda[2], HIGH);
break;
case 3:
digitalWrite(dioda[0], HIGH);
digitalWrite(dioda[1], HIGH);
digitalWrite(dioda[2], LOW);
break;
case 4:
digitalWrite(dioda[0], LOW);
digitalWrite(dioda[1], LOW);
digitalWrite(dioda[2], HIGH);
break;
case 5:
digitalWrite(dioda[0], LOW);
digitalWrite(dioda[1], HIGH);
digitalWrite(dioda[2], LOW);
break;
case 6:
digitalWrite(dioda[0], HIGH);
digitalWrite(dioda[1], LOW);
digitalWrite(dioda[2], LOW);
break;
case 7:
digitalWrite(dioda[0], LOW);
digitalWrite(dioda[1], LOW);
digitalWrite(dioda[2], LOW);
break;
}
}
#包括
#包括“Adafruit_MPR121.h”
Adafruit_MPR121帽=Adafruit_MPR121();
uint16_t lasttouched=0;
uint16\u t=0;
int RGB1[]={22,23,24};
int RGB2[]={25,26,27};
int RGB3[]={28,29,30};
int RGB4[]={31,32,33};
无效设置()
{
对于(int i=0;i<3;i++){
pinMode(RGB1[i],输出);
数字写入(RGB1[i],高);
pinMode(RGB2[i],输出);
数字写入(RGB2[i],高);
pinMode(RGB3[i],输出);
数字写入(RGB3[i],高);
pinMode(RGB4[i],输出);
数字写入(RGB4[i],高);
}
Serial.begin(9600);
Serial.println(“Adafruit MPR121电容式触摸传感器测试”);
如果(!cap.begin(0x5A)){
Serial.println(“找不到MPR121,检查接线?”);
而(1),;
}
Serial.println(“找到MPR121!”);
}
void循环()
{
currtouched=cap.toucted();
对于(uint8_t i=0;i 365&&j<535)
RGB_颜色(i,3);
如果(j>535&&j<705)
RGB_颜色(i,4);
如果(j>705&&j<875)
RGB_颜色(i,5);
如果(j>875&&j<1010)
RGB_颜色(i,6);
如果(j>1010)
RGB_颜色(i,7);
}
无效RGB_颜色(int-dioda[],int-color)
{
开关(彩色){
案例0:
数字写入(二极管[0],高);
数字写入(二极管[1],高);
数字写入(二极管[2],高);
打破
案例1:
数字写入(二极管[0],低);
数字写入(二极管[1],高);
数字写入(二极管[2],高);
打破
案例2:
数字写入(二极管[0],高);
数字写入(二极管[1],低);
数字写入(二极管[2],高);
打破
案例3:
数字写入(二极管[0],高);
数字写入(二极管[1],高);
数字写入(二极管[2],低);
打破
案例4:
数字写入(二极管[0],低);
数字写入(二极管[1],低);
数字写入(二极管[2],高);
打破
案例5:
数字写入(二极管[0],低);
数字写入(二极管[1],高);
数字写入(二极管[2],低);
打破
案例6:
数字写入(二极管[0],高);
数字写入(二极管[1],低);
数字写入(二极管[2],低);
打破
案例7:
数字写入(二极管[0],低);
数字写入(二极管[1],低);
数字写入(二极管[2],低);
打破
}
}
@Olaf谢谢。现在我将轻松地修补我的软件:)尝试在file@dubafek这也没用,只是想确定一下。你是这样宣布的吗<代码>无效检测颜色(int[],int)代码>无效电位计(int)代码>或者你只是把他们都调高了?很抱歉回答晚了。我想这不是代码的错误,因为我有类似的isues,但当使用3个i2c模块时。程序在void setup()Serial.println(“某物”)的第一行之后停止;我将尝试调试它,看看Serial是否阻塞了软件(?)。事实并非如此。我的电路板也是正确的,因为相同的问题出现在不同的电路板上。所以这要么是我的软件故障(毫无疑问,因为硬件提供商都检查过它),要么是库故障(更令人怀疑的是)所以剩下的只有魔法了。@Olaf谢谢。现在我将轻松地修补我的软件:)尝试在file@dubafek这也没什么帮助:/只是为了确定一下。你是这样声明的吗?void-detectColor(int[],int);
void-potential(int)
或者你只是把它们全部上移了?很抱歉回答得太晚。我想这不是代码的错,因为我有类似的代码,但是当使用3个i2c模块时。程序在void setup()Serial.println(“某物”)的第一行之后停止;我将尝试调试它,看看串行是否阻塞了软件(?)。但事实并非如此。我的董事会也是正确的,因为相同的问题在不同的董事会上。所以这要么是我的软件故障(毫无疑问,因为连硬件供应商都检查过了),要么是库故障(更有疑问),所以剩下的只有魔法。