نمایش نتایج: از 1 به 5 از 5
Like Tree1 لایک
  • 1 Post By magmagmary

موضوع: سنسور تشخیص رنگ

  1. #1
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    94

    سنسور تشخیص رنگ

    سلام در کد سنسور tcs320 یه مشکلی دارم . وقتی که سنسور رنگ قرمز رو تشخیص بده یه جای led قرمز تمام led ها روشن می شن . و برای رنگ سبز و آب هم همین طوره همه ی led ها روشن می شن مشکل از کجاست ؟؟؟؟؟

    #define S0 4
    #define S1 5
    #define S2 6
    #define S3 7
    #define sensorOut 8
    int redLed = 10;
    int greenLed = 11;
    int blueLed = 12;
    int red = 0;
    int green = 0;
    int blue = 0;
    int frequency = 0;

    void setup() {
    pinMode(S0, OUTPUT);
    pinMode(S1, OUTPUT);
    pinMode(S2, OUTPUT);
    pinMode(S3, OUTPUT);
    pinMode(sensorOut, INPUT);
    pinMode(redLed, OUTPUT);
    pinMode(greenLed, OUTPUT);
    pinMode(blueLed, OUTPUT);

    // Setting frequency-scaling to 20%
    digitalWrite(S0,HIGH);
    digitalWrite(S1,LOW);

    Serial.begin(9600);
    }

    void loop() {
    // Setting red filtered photodiodes to be read
    digitalWrite(S2,LOW);
    digitalWrite(S3,LOW);
    // Reading the output frequency
    frequency = pulseIn(sensorOut, LOW);
    //Remaping the value of the frequency to the RGB Model of 0 to 255
    if( frequency = map(frequency, 25,72,255,0));
    // Printing the value on the serial monitor
    Serial.print("RED= ");//printing name
    Serial.print(frequency);//printing RED color frequency
    Serial.print(" ");
    digitalWrite(redLed, HIGH); // Turn RED LED ON
    digitalWrite(greenLed, LOW);
    digitalWrite(blueLed, LOW);
    delay(1000);

    // Setting Green filtered photodiodes to be read
    digitalWrite(S2,HIGH);
    digitalWrite(S3,HIGH);
    // Reading the output frequency
    frequency = pulseIn(sensorOut, LOW);
    //Remaping the value of the frequency to the RGB Model of 0 to 255
    else if (frequency = map(frequency, 30,90,255,0));
    // Printing the value on the serial monitor
    Serial.print("GREEN= ");//printing name
    Serial.print(frequency);//printing RED color frequency
    Serial.print(" ");
    digitalWrite(redLed, LOW);
    digitalWrite(greenLed, HIGH); // Turn GREEN LED ON
    digitalWrite(blueLed, LOW);
    delay(1000);

    // Setting Blue filtered photodiodes to be read
    digitalWrite(S2,LOW);
    digitalWrite(S3,HIGH);
    // Reading the output frequency
    frequency = pulseIn(sensorOut, LOW);
    //Remaping the value of the frequency to the RGB Model of 0 to 255
    else if ( frequency = map(frequency, 25,70,255,0));
    // Printing the value on the serial monitor
    Serial.print("BLUE= ");//printing name
    Serial.print(frequency);//printing RED color frequency
    Serial.println(" ");
    digitalWrite(redLed, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(blueLed, HIGH); // Turn BLUE LED ON


    delay(1000);
    }

    ممنون میشم اگه مشکلم رو حل کنید .....

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,937
    دوست عزیز چند تا مشکل دارید.

    اول اینکه شما سه بار سه جای مختلف داری دیتای سنسور رو میخونی که اصلا نیازی به این کار نیست
    شما یه بار داده سنسور رو بخون
    رو همون یک بار شرطاتو بنویس

    مشکل دوم اینه که کلا به پرانتز برای if هات اعتقاد نداری

    این کد رو تست بگیر:
    کد:
    const int s0 = 8;  
    const int s1 = 9;  
    const int s2 = 12;  
    const int s3 = 11;  
    const int out = 10;   
       
    //Pinos dos leds  
    int pinoledverm = 2;  
    int pinoledverd = 3;  
    int pinoledazul = 4;  
        
    //Variaveis que armazenam o valor das cores  
    int red = 0;  
    int green = 0;  
    int blue = 0;  
        
    void setup()   
    {  
      pinMode(s0, OUTPUT);  
      pinMode(s1, OUTPUT);  
      pinMode(s2, OUTPUT);  
      pinMode(s3, OUTPUT);  
      pinMode(out, INPUT);  
      pinMode(pinoledverm, OUTPUT);  
      pinMode(pinoledverd, OUTPUT);  
      pinMode(pinoledazul, OUTPUT);  
      Serial.begin(9600);  
      digitalWrite(s0, HIGH);  
      digitalWrite(s1, LOW);  
    }  
        
    void loop() 
    {  
      color(); //Chama a rotina que le as cores  
      //Mostra no serial monitor os valores detectados  
      Serial.print("Vermelho :");  
      Serial.print(red, DEC);  
      Serial.print(" Verde : ");  
      Serial.print(green, DEC);  
      Serial.print(" Azul : ");  
      Serial.print(blue, DEC);  
      Serial.println();  
    
    
      //Verifica se a cor vermelha foi detectada  
      if (red < blue && red < green && red < 100)  
      {  
       Serial.println("Vermelho");  
       digitalWrite(pinoledverm, HIGH); //Acende o led vermelho  
       digitalWrite(pinoledverd, LOW);  
       digitalWrite(pinoledazul, LOW);  
      }  
    
    
      //Verifica se a cor azul foi detectada  
      else if (blue < red && blue < green)   
      {  
       Serial.println("Azul");  
       digitalWrite(pinoledverm, LOW);  
       digitalWrite(pinoledverd, LOW);  
       digitalWrite(pinoledazul, HIGH); //Acende o led azul  
      }  
    
    
      //Verifica se a cor verde foi detectada  
      else if (green < red && green < blue)  
      {  
       Serial.println("Verde");  
       digitalWrite(pinoledverm, LOW);  
       digitalWrite(pinoledverd, HIGH); //Acende o led verde  
       digitalWrite(pinoledazul, LOW);  
      }  
      Serial.println();  
    
    
      //Aguarda 2 segundos, apaga os leds e reinicia o processo  
      delay(2000);   
      digitalWrite(pinoledverm, LOW);  
      digitalWrite(pinoledverd, LOW);  
      digitalWrite(pinoledazul, LOW);  
     }  
        
    void color()  
    {  
      //Rotina que le o valor das cores  
      digitalWrite(s2, LOW);  
      digitalWrite(s3, LOW);  
      //count OUT, pRed, RED  
      red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);  
      digitalWrite(s3, HIGH);  
      //count OUT, pBLUE, BLUE  
      blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);  
      digitalWrite(s2, HIGH);  
      //count OUT, pGreen, GREEN  
      green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);  
    }
    لایک کردن

  3. #3
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,937
    کدی که دادم از این لینک برداشتم
    Arduino e Cia: Sensor de reconhecimento de cor TCS230 / TCS3200

  4. #4
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    94
    یه سوال دیگه تو کدی که فرستادم کدوم خط رو باید تو دستور if بزارم ؟؟؟؟

  5. #5
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    94
    تو این کد می خوام led قرمز دو ثانیه یک بار چشمک بزنه و led سبز یک ثانیه یک بار و led ابی سه ثانیه یک بار باید چیکار کنم ؟؟؟
    [QUOTE][/
    int s0=3,s1=4,s2=5,s3=6;
    int flag=0;
    int counter=0;
    int countR=0,countG=0,countB=0;
    int redLed = 10;
    int greenLed = 11;
    int blueLed = 12;
    int red = 0;
    int green = 0;
    int blue = 0;
    void setup()
    {
    Serial.begin(115200);
    pinMode(s0,OUTPUT);
    pinMode(s1,OUTPUT);
    pinMode(s2,OUTPUT);
    pinMode(s3,OUTPUT);
    pinMode(redLed, OUTPUT);
    pinMode(greenLed, OUTPUT);
    pinMode(blueLed, OUTPUT);
    }
    void TCS()
    {
    digitalWrite(s1,HIGH);
    digitalWrite(s0,LOW);
    flag=0;
    attachInterrupt(0, ISR_INTO, CHANGE);
    timer2_init();
    }
    void ISR_INTO()
    {
    counter++;
    }
    void timer2_init(void)
    {
    TCCR2A=0x00;
    TCCR2B=0x07; //the clock frequency source 1024 points
    TCNT2= 100; //10 ms overflow again
    TIMSK2 = 0x01; //allow interrupt
    }
    int i=0;
    ISR(TIMER2_OVF_vect)//the timer 2, 10ms interrupt overflow again. Internal overflow interrupt executive function
    {
    TCNT2=100;
    flag++;
    if(flag==1)
    {
    counter=0;
    }
    else if(flag==2)
    {
    digitalWrite(s2,LOW);
    digitalWrite(s3,LOW);
    countR=counter/1.051;
    Serial.print("red=");
    Serial.println(countR,DEC);
    digitalWrite(s2,HIGH);
    digitalWrite(s3,HIGH);
    }
    else if(flag==3)
    {
    countG=counter/1.0157;
    Serial.print("green=");
    Serial.println(countG,DEC);
    digitalWrite(s2,LOW);
    digitalWrite(s3,HIGH);
    }
    else if(flag==4)
    {
    countB=counter/1.114;
    Serial.print("blue=");
    Serial.println(countB,DEC);
    digitalWrite(s2,LOW);
    digitalWrite(s3,LOW);
    }
    else
    {
    flag=0;
    TIMSK2 = 0x00;
    }
    counter=0;
    delay(2);
    }
    void loop()
    {
    delay(10);
    TCS();
    if((countR>10)||(countG>10)||(countB>10))
    {
    if((countR>countG)&&(countR>countB))
    {
    Serial.print("red");
    Serial.print("\n");
    digitalWrite(redLed, HIGH); // Turn RED LED ON
    digitalWrite(greenLed, LOW);
    digitalWrite(blueLed, LOW);

    delay(1000);
    }
    else if((countG<=countR)&&(countG<countB))
    {
    Serial.print("green");
    Serial.print("\n");
    digitalWrite(redLed, LOW);
    digitalWrite(greenLed, HIGH); // Turn GREEN LED ON
    digitalWrite(blueLed, LOW);

    delay(1000);
    }
    else if((countB>countG)&&(countB>countR))
    {
    Serial.print("blue");
    Serial.print("\n");
    digitalWrite(redLed, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(blueLed, HIGH);

    delay(1000);
    }
    }
    else
    {
    delay(1000);
    }
    }
    QUOTE]

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO