Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用void函数arduino后出现循环问题_Arduino - Fatal编程技术网

调用void函数arduino后出现循环问题

调用void函数arduino后出现循环问题,arduino,Arduino,我制作了一个简单的程序,点亮RGB二极管,并通过i2c从键盘接收信息 我有一个奇怪的问题,调用void函数后i2c不能正常工作。当我用常规循环切换函数时,同样的情况也会发生 首先,我认为它与analog4和analog5端口相连,但在更改功能后,很明显,这两者之间没有关系 在评论电位计(i)的环路方法后,键盘是一种魅力 我把代码放在下面 #include <Wire.h> #include "Adafruit_MPR121.h" Adafruit_MPR121 cap =

我制作了一个简单的程序,点亮RGB二极管,并通过i2c从键盘接收信息

我有一个奇怪的问题,调用void函数后i2c不能正常工作。当我用常规循环切换函数时,同样的情况也会发生

首先,我认为它与analog4和analog5端口相连,但在更改功能后,很明显,这两者之间没有关系

在评论电位计(i)的环路方法后,键盘是一种魅力

我把代码放在下面

    #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(“某物”)的第一行之后停止;我将尝试调试它,看看串行是否阻塞了软件(?)。但事实并非如此。我的董事会也是正确的,因为相同的问题在不同的董事会上。所以这要么是我的软件故障(毫无疑问,因为连硬件供应商都检查过了),要么是库故障(更有疑问),所以剩下的只有魔法。