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

时间:2016-03-08 21:26:15

标签: arduino

我制作了简单的程序,用于连接RGB diod,并通过i2c从键盘接收信息。

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

首先我认为它与analog4和analog5端口连接,但在更改功能之后,显然这与此无关。

评论Potentiometer(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;
   }
 }

0 个答案:

没有答案