When using TCS3200 interrupt, noise is generated .TCS3200 output gives incorrect result.
It works fine if i don’t use a timer.
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include “SystemFont5x7.h”
#include “Arial_black_16.h”
#include “Arial_Black_16_ISO_8859_1.h”
#include “Arduino.h”
#include “SoftwareSerial.h”
#include “DFRobotDFPlayerMini.h”
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);#define s0 A2 //Bağladığımız pinlere göre tanımlamalarımızı yapıyoruz
#define s1 A0
#define s2 A1
#define s3 A3
#define sensorOut A5#define maviLed1 17
const int led = LED_BUILTIN; // the pin with a LED
int K, Y, M = 0; //3 ana renk için değişken tanımlıyoruz
const int SonSkor = 5;
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;unsigned long timerscore;
unsigned long start_score_time;
unsigned long score_time;
void ScanDMD()
{dmd.scanDisplayBySPI();
}
void Screen_Clear() {dmd.clearScreen(true);
}
void ShowCountNumbers( unsigned int sayac1, byte bColonOn)
{dmd.selectFont(Arial_Black_16);
dmd.drawChar( 1, 1, ‘0’ + ((sayac1 % 100) / 10), GRAPHICS_NORMAL ); // thousands
dmd.drawChar( 10, 1, ‘0’ + ((sayac1 % 10) ), GRAPHICS_NORMAL ); // hundreds}
void setup()
{
pinMode(s0, OUTPUT);//S0, S1, S2 ve S3 pinlerini OUTPUT olarak tanımlıyoruz
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);pinMode(sensorOut, INPUT_PULLUP);//OUT pinini INPUT olarak tanımlıyoruz
digitalWrite(s1, LOW); //Frekans ölçeğimizi %20 olarak tanımlıyoruz
digitalWrite(s0, HIGH);
Serial.begin(9600);
Timer1.initialize(1000);
Timer1.attachInterrupt(ScanDMD);}
void loop() {
ShowCountNumbers(3, true);
digitalWrite(s2, LOW); //Kırmızıyı filtrelemek için
digitalWrite(s3, LOW);
K = pulseIn(sensorOut, LOW);//OUT pini üzerindeki LOW süresini okur
Serial.print("red= “);
Serial.print(K); //Kırmızı için aldığımız değeri serial monitöre yazdır
Serial.print(” ");digitalWrite(s2, HIGH); //Yeşili filtrelemek için
digitalWrite(s3, HIGH);
Y = pulseIn(sensorOut, LOW); //OUT pini üzerindeki LOW süresini okur
Serial.print("green= “);
Serial.print(Y); //Yeşil için aldığımız değeri serial monitöre yazdır
Serial.print(” ");digitalWrite(s2, LOW); //Maviyi filtrelemek için
digitalWrite(s3, HIGH);
M = pulseIn(sensorOut, LOW);//OUT pini üzerindeki LOW süresini okur
Serial.print("blue= ");
Serial.print(M);//Mavi için aldığımız değeri serial monitöre yazdır
Serial.println();if (K < 60)
{Serial.println(“sadsadsadsadasdasdasdasdsadsad”);
}
if (M < 60)
{Serial.println(“sadsadsadsadasdasdasdasdsadsad”);
}
if (Y < 60)
{Serial.println(“sadsadsadsadasdasdasdasdsadsad”);
}}
OUTPUT
red= 82 green= 125 blue= 197
red= 111 green= 228 blue= 178
red= 195 green= 121 blue= 191
red= 101 green= 241 blue= 194
red= 173 green= 227 blue= 182
red= 200 green= 112 blue= 198
red= 88 green= 220 blue= 184
red= 196 green= 234 blue= 92
red= 193 green= 182 blue= 194