Atmega 32U4 (на Leonardo) + TSC3200 (датчик цвета)

Тема в разделе "Arduino & Shields", создана пользователем Gram Jr, 9 июн 2016.

  1. Gram Jr

    Gram Jr Нуб

    Гуру ,обращаюсь к Вам. В интернете есть код для работы с датчиком TSC3200 для микроконтроллеров Arduino mega 328, 1280, 2560, а для Atmega 32U4 нет.
    int s0=3,s1=4,s2=5,s3=6;
    int out=2;
    int flag=0;
    byte counter=0;
    byte countR=0,countG=0,countB=0;
    void setup()
    {
    Serial.begin(115200);
    pinMode(s0,OUTPUT);
    pinMode(s1,OUTPUT);
    pinMode(s2,OUTPUT);
    pinMode(s3,OUTPUT);

    }
    void TCS()
    {
    flag=0;
    digitalWrite(s1,HIGH);
    digitalWrite(s0,HIGH);
    digitalWrite(s2,LOW);
    digitalWrite(s3,LOW);
    attachInterrupt(0, ISR_INTO, CHANGE);
    timer0_init();

    }
    void ISR_INTO()
    {
    counter++;
    }
    void timer0_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)
    {
    countR=counter;
    Serial.print("red=");
    Serial.println(countR,DEC);
    digitalWrite(s2,HIGH);
    digitalWrite(s3,HIGH);
    }
    else if(flag==2)
    {
    countG=counter;
    Serial.print("green=");
    Serial.println(countG,DEC);
    digitalWrite(s2,LOW);
    digitalWrite(s3,HIGH);
    }
    else if(flag==3)
    {
    countB=counter;
    Serial.print("blue=");
    Serial.println(countB,DEC);
    Serial.println("\n");
    digitalWrite(s2,LOW);
    digitalWrite(s3,LOW);

    }
    else if(flag==4)
    {
    flag=0;
    }
    counter=0;
    }
    void loop()
    {
    TCS();
    while(1);
    }

    Проблема в разных таймерах на ножках у микроконтроллеров (поправьте, если что не так сказал). Ткните в решение этой задачи с объяснением. СПАСИБО!!!
     
  2. Peter03

    Peter03 Нуб

    разница в том, что прерывание 0 на уно и на леонардо на разных пинах - 2 и 3 соответственно, т.е. при использовании указанного кода для леонардо нужно изменить на: int out=3; ну и подключать тоже на 3ий пин... а S0 подключить на какой нибудь другой