Just colorSensor and show red,green,purple

来源:互联网 发布:儿童恐龙玩具淘宝 编辑:程序博客网 时间:2024/06/16 22:05
#include "TimerOne.h"#define S0 6#define S1 5#define S2 4#define S3 3#define OUT 2//GND & LED – GND ,  OE – GND,  VCC – VCC,//S0 – D6,  S1 – D5,  S2 – D4,  S3 – D3,  OUT – D2 int   g_count = 0;    // count the frequecyint   g_array[3];     // store the RGB valueint   g_flag = 0;     // filter of RGB queuefloat g_SF[3];        // save the RGB Scale factor// Init TSC230 and setting Frequency.void TSC_Init(){  pinMode(S0, OUTPUT);  pinMode(S1, OUTPUT);  pinMode(S2, OUTPUT);  pinMode(S3, OUTPUT);  pinMode(OUT, INPUT);  digitalWrite(S0, LOW);  // OUTPUT FREQUENCY SCALING 2%  digitalWrite(S1, HIGH);}void TSC_FilterColor(int Level01, int Level02){  if(Level01 != 0)    Level01 = HIGH;  if(Level02 != 0)    Level02 = HIGH;  digitalWrite(S2, Level01);  digitalWrite(S3, Level02);}void TSC_Count(){  g_count ++ ;}void TSC_Callback(){  switch(g_flag)  {    case 0:         Serial.println("->WB Start");         TSC_WB(LOW, LOW);              //Filter without Red         break;    case 1:         Serial.print("->Frequency R=");         Serial.println(g_count);         g_array[0] = g_count;         TSC_WB(HIGH, HIGH);            //Filter without Green         break;    case 2:         Serial.print("->Frequency G=");         Serial.println(g_count);         g_array[1] = g_count;         TSC_WB(LOW, HIGH);             //Filter without Blue         break;    case 3:         Serial.print("->Frequency B=");         Serial.println(g_count);         Serial.println("->WB End");         g_array[2] = g_count;         TSC_WB(HIGH, LOW);             //Clear(no filter)            if((g_array[1]>g_array[2])&&(g_array[1]>g_array[0]))        Serial.println("Green");      else if((g_array[2]>g_array[1])&&(g_array[2]>g_array[0]))        Serial.println("Purple");      else if((g_array[0]>g_array[2])&&(g_array[0]>g_array[1]))        Serial.println("Red");      Serial.println("\n");            break;   default:          g_count = 0;         break;  }    }void TSC_WB(int Level0, int Level1)      //White Balance{  g_count = 0;  g_flag ++;  TSC_FilterColor(Level0, Level1);  Timer1.setPeriod(1000000);             // set 1s period}void setup(){  TSC_Init();  Serial.begin(9600);  Timer1.initialize();             // defaulte is 1s  Timer1.attachInterrupt(TSC_Callback);  attachInterrupt(0, TSC_Count, RISING);  delay(4000);  for(int i=0; i<3; i++)    Serial.println(g_array[i]);  g_SF[0] = 255.0/ g_array[0];     //R Scale factor  g_SF[1] = 255.0/ g_array[1] ;    //G Scale factor  g_SF[2] = 255.0/ g_array[2] ;    //B Scale factor  Serial.println(g_SF[0]);  Serial.println(g_SF[1]);  Serial.println(g_SF[2]);}void loop(){   g_flag = 0;   for(int i=0; i<3; i++)    Serial.println(int(g_array[i] * g_SF[i]));   delay(4000);}

TimerOne.h

/* *  Interrupt and PWM utilities for 16 bit Timer1 on ATmega168/328 *  Original code by Jesse Tane for http://labs.ideo.com August 2008 *  Modified March 2009 by Jérôme Despatis and Jesse Tane for ATmega328 support *  Modified June 2009 by Michael Polli and Jesse Tane to fix a bug in setPeriod() which caused the timer to stop *  Modified April 2012 by Paul Stoffregen - portable to other AVR chips, use inline functions *  Modified again, June 2014 by Paul Stoffregen - support Teensy 3.x & even more AVR chips *  Modified July 2017 by Stoyko Dimitrov - added support for ATTiny85 except for the PWM functionality *   * *  This is free software. You can redistribute it and/or modify it under *  the terms of Creative Commons Attribution 3.0 United States License.  *  To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/us/  *  or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. * */#ifndef TimerOne_h_#define TimerOne_h_#if defined(ARDUINO) && ARDUINO >= 100#include "Arduino.h"#else#include "WProgram.h"#endif#include "known_16bit_timers.h"#if defined (__AVR_ATtiny85__)#define TIMER1_RESOLUTION 256UL  // Timer1 is 8 bit#elif defined(__AVR__)#define TIMER1_RESOLUTION 65536UL  // Timer1 is 16 bit#else#define TIMER1_RESOLUTION 65536UL  // assume 16 bits for non-AVR chips#endif// Placing nearly all the code in this .h file allows the functions to be// inlined by the compiler.  In the very common case with constant values// the compiler will perform all calculations and simply write constants// to the hardware registers (for example, setPeriod).class TimerOne{#if defined (__AVR_ATtiny85__)  public:    //****************************    //  Configuration    //****************************    void initialize(unsigned long microseconds=1000000) __attribute__((always_inline)) {TCCR1 = _BV(CTC1);              //clear timer1 when it matches the value in OCR1CTIMSK |= _BV(OCIE1A);           //enable interrupt when OCR1A matches the timer valuesetPeriod(microseconds);    }    void setPeriod(unsigned long microseconds) __attribute__((always_inline)) {const unsigned long cycles = microseconds * ratio;if (cycles < TIMER1_RESOLUTION) {clockSelectBits = _BV(CS10);pwmPeriod = cycles;} elseif (cycles < TIMER1_RESOLUTION * 2UL) {clockSelectBits = _BV(CS11);pwmPeriod = cycles / 2;} elseif (cycles < TIMER1_RESOLUTION * 4UL) {clockSelectBits = _BV(CS11) | _BV(CS10);pwmPeriod = cycles / 4;} elseif (cycles < TIMER1_RESOLUTION * 8UL) {clockSelectBits = _BV(CS12);pwmPeriod = cycles / 8;} elseif (cycles < TIMER1_RESOLUTION * 16UL) {clockSelectBits = _BV(CS12) | _BV(CS10);pwmPeriod = cycles / 16;} elseif (cycles < TIMER1_RESOLUTION * 32UL) {clockSelectBits = _BV(CS12) | _BV(CS11);pwmPeriod = cycles / 32;} elseif (cycles < TIMER1_RESOLUTION * 64UL) {clockSelectBits = _BV(CS12) | _BV(CS11) | _BV(CS10);pwmPeriod = cycles / 64UL;} elseif (cycles < TIMER1_RESOLUTION * 128UL) {clockSelectBits = _BV(CS13);pwmPeriod = cycles / 128;} elseif (cycles < TIMER1_RESOLUTION * 256UL) {clockSelectBits = _BV(CS13) | _BV(CS10);pwmPeriod = cycles / 256;} elseif (cycles < TIMER1_RESOLUTION * 512UL) {clockSelectBits = _BV(CS13) | _BV(CS11);pwmPeriod = cycles / 512;} elseif (cycles < TIMER1_RESOLUTION * 1024UL) {clockSelectBits = _BV(CS13) | _BV(CS11) | _BV(CS10);pwmPeriod = cycles / 1024;} elseif (cycles < TIMER1_RESOLUTION * 2048UL) {clockSelectBits = _BV(CS13) | _BV(CS12);pwmPeriod = cycles / 2048;} elseif (cycles < TIMER1_RESOLUTION * 4096UL) {clockSelectBits = _BV(CS13) | _BV(CS12) | _BV(CS10);pwmPeriod = cycles / 4096;} elseif (cycles < TIMER1_RESOLUTION * 8192UL) {clockSelectBits = _BV(CS13) | _BV(CS12) | _BV(CS11);pwmPeriod = cycles / 8192;} elseif (cycles < TIMER1_RESOLUTION * 16384UL) {clockSelectBits = _BV(CS13) | _BV(CS12) | _BV(CS11)  | _BV(CS10);pwmPeriod = cycles / 16384;} else {clockSelectBits = _BV(CS13) | _BV(CS12) | _BV(CS11)  | _BV(CS10);pwmPeriod = TIMER1_RESOLUTION - 1;}OCR1A = pwmPeriod;OCR1C = pwmPeriod;TCCR1 = _BV(CTC1) | clockSelectBits;    }    //****************************    //  Run Control    //****************************    void start() __attribute__((always_inline)) {TCCR1 = 0;TCNT1 = 0;resume();    }    void stop() __attribute__((always_inline)) {TCCR1 = _BV(CTC1);    }    void restart() __attribute__((always_inline)) {start();    }    void resume() __attribute__((always_inline)) {TCCR1 = _BV(CTC1) | clockSelectBits;    }    //****************************    //  PWM outputs    //****************************//Not implemented yet for ATTiny85//TO DO    //****************************    //  Interrupt Function    //****************************    void attachInterrupt(void (*isr)()) __attribute__((always_inline)) {isrCallback = isr;TIMSK |= _BV(OCIE1A);    }    void attachInterrupt(void (*isr)(), unsigned long microseconds) __attribute__((always_inline)) {if(microseconds > 0) setPeriod(microseconds);attachInterrupt(isr);    }    void detachInterrupt() __attribute__((always_inline)) {//TIMSK = 0; // Timer 0 and Timer 1 both use TIMSK register so setting it to 0 will override settings for Timer1 as wellTIMSK &= ~_BV(OCIE1A);    }    static void (*isrCallback)();    static void isrDefaultUnused();  private:    static unsigned short pwmPeriod;    static unsigned char clockSelectBits;    static const byte ratio = (F_CPU)/ ( 1000000 );#elif defined(__AVR__)  public:    //****************************    //  Configuration    //****************************    void initialize(unsigned long microseconds=1000000) __attribute__((always_inline)) {TCCR1B = _BV(WGM13);        // set mode as phase and frequency correct pwm, stop the timerTCCR1A = 0;                 // clear control register A setPeriod(microseconds);    }    void setPeriod(unsigned long microseconds) __attribute__((always_inline)) {const unsigned long cycles = (F_CPU / 2000000) * microseconds;if (cycles < TIMER1_RESOLUTION) {clockSelectBits = _BV(CS10);pwmPeriod = cycles;} elseif (cycles < TIMER1_RESOLUTION * 8) {clockSelectBits = _BV(CS11);pwmPeriod = cycles / 8;} elseif (cycles < TIMER1_RESOLUTION * 64) {clockSelectBits = _BV(CS11) | _BV(CS10);pwmPeriod = cycles / 64;} elseif (cycles < TIMER1_RESOLUTION * 256) {clockSelectBits = _BV(CS12);pwmPeriod = cycles / 256;} elseif (cycles < TIMER1_RESOLUTION * 1024) {clockSelectBits = _BV(CS12) | _BV(CS10);pwmPeriod = cycles / 1024;} else {clockSelectBits = _BV(CS12) | _BV(CS10);pwmPeriod = TIMER1_RESOLUTION - 1;}ICR1 = pwmPeriod;TCCR1B = _BV(WGM13) | clockSelectBits;    }    //****************************    //  Run Control    //****************************    void start() __attribute__((always_inline)) {TCCR1B = 0;TCNT1 = 0;// TODO: does this cause an undesired interrupt?resume();    }    void stop() __attribute__((always_inline)) {TCCR1B = _BV(WGM13);    }    void restart() __attribute__((always_inline)) {start();    }    void resume() __attribute__((always_inline)) {TCCR1B = _BV(WGM13) | clockSelectBits;    }    //****************************    //  PWM outputs    //****************************    void setPwmDuty(char pin, unsigned int duty) __attribute__((always_inline)) {unsigned long dutyCycle = pwmPeriod;dutyCycle *= duty;dutyCycle >>= 10;if (pin == TIMER1_A_PIN) OCR1A = dutyCycle;#ifdef TIMER1_B_PINelse if (pin == TIMER1_B_PIN) OCR1B = dutyCycle;#endif#ifdef TIMER1_C_PINelse if (pin == TIMER1_C_PIN) OCR1C = dutyCycle;#endif    }    void pwm(char pin, unsigned int duty) __attribute__((always_inline)) {if (pin == TIMER1_A_PIN) { pinMode(TIMER1_A_PIN, OUTPUT); TCCR1A |= _BV(COM1A1); }#ifdef TIMER1_B_PINelse if (pin == TIMER1_B_PIN) { pinMode(TIMER1_B_PIN, OUTPUT); TCCR1A |= _BV(COM1B1); }#endif#ifdef TIMER1_C_PINelse if (pin == TIMER1_C_PIN) { pinMode(TIMER1_C_PIN, OUTPUT); TCCR1A |= _BV(COM1C1); }#endifsetPwmDuty(pin, duty);TCCR1B = _BV(WGM13) | clockSelectBits;    }    void pwm(char pin, unsigned int duty, unsigned long microseconds) __attribute__((always_inline)) {if (microseconds > 0) setPeriod(microseconds);pwm(pin, duty);    }    void disablePwm(char pin) __attribute__((always_inline)) {if (pin == TIMER1_A_PIN) TCCR1A &= ~_BV(COM1A1);#ifdef TIMER1_B_PINelse if (pin == TIMER1_B_PIN) TCCR1A &= ~_BV(COM1B1);#endif#ifdef TIMER1_C_PINelse if (pin == TIMER1_C_PIN) TCCR1A &= ~_BV(COM1C1);#endif    }    //****************************    //  Interrupt Function    //****************************    void attachInterrupt(void (*isr)()) __attribute__((always_inline)) {isrCallback = isr;TIMSK1 = _BV(TOIE1);    }    void attachInterrupt(void (*isr)(), unsigned long microseconds) __attribute__((always_inline)) {if(microseconds > 0) setPeriod(microseconds);attachInterrupt(isr);    }    void detachInterrupt() __attribute__((always_inline)) {TIMSK1 = 0;    }    static void (*isrCallback)();    static void isrDefaultUnused();  private:    // properties    static unsigned short pwmPeriod;    static unsigned char clockSelectBits;#elif defined(__arm__) && defined(CORE_TEENSY)#if defined(KINETISK)#define F_TIMER F_BUS#elif defined(KINETISL)#define F_TIMER (F_PLL/2)#endif  public:    //****************************    //  Configuration    //****************************    void initialize(unsigned long microseconds=1000000) __attribute__((always_inline)) {setPeriod(microseconds);    }    void setPeriod(unsigned long microseconds) __attribute__((always_inline)) {const unsigned long cycles = (F_TIMER / 2000000) * microseconds;  // A much faster if-else  // This is like a binary serch tree and no more than 3 conditions are evaluated.  // I haven't checked if this becomes significantly longer ASM than the simple ladder.  // It looks very similar to the ladder tho: same # of if's and else's   /*  // This code does not work properly in all cases :(  // https://github.com/PaulStoffregen/TimerOne/issues/17   if (cycles < TIMER1_RESOLUTION * 16) {    if (cycles < TIMER1_RESOLUTION * 4) {      if (cycles < TIMER1_RESOLUTION) {        clockSelectBits = 0;        pwmPeriod = cycles;      }else{        clockSelectBits = 1;        pwmPeriod = cycles >> 1;      }    }else{      if (cycles < TIMER1_RESOLUTION * 8) {        clockSelectBits = 3;        pwmPeriod = cycles >> 3;      }else{        clockSelectBits = 4;        pwmPeriod = cycles >> 4;      }    }  }else{    if (cycles > TIMER1_RESOLUTION * 64) {      if (cycles > TIMER1_RESOLUTION * 128) {        clockSelectBits = 7;        pwmPeriod = TIMER1_RESOLUTION - 1;      }else{        clockSelectBits = 7;        pwmPeriod = cycles >> 7;      }    }    else{      if (cycles > TIMER1_RESOLUTION * 32) {        clockSelectBits = 6;        pwmPeriod = cycles >> 6;      }else{        clockSelectBits = 5;        pwmPeriod = cycles >> 5;      }    }  }  */if (cycles < TIMER1_RESOLUTION) {clockSelectBits = 0;pwmPeriod = cycles;} elseif (cycles < TIMER1_RESOLUTION * 2) {clockSelectBits = 1;pwmPeriod = cycles >> 1;} elseif (cycles < TIMER1_RESOLUTION * 4) {clockSelectBits = 2;pwmPeriod = cycles >> 2;} elseif (cycles < TIMER1_RESOLUTION * 8) {clockSelectBits = 3;pwmPeriod = cycles >> 3;} elseif (cycles < TIMER1_RESOLUTION * 16) {clockSelectBits = 4;pwmPeriod = cycles >> 4;} elseif (cycles < TIMER1_RESOLUTION * 32) {clockSelectBits = 5;pwmPeriod = cycles >> 5;} elseif (cycles < TIMER1_RESOLUTION * 64) {clockSelectBits = 6;pwmPeriod = cycles >> 6;} elseif (cycles < TIMER1_RESOLUTION * 128) {clockSelectBits = 7;pwmPeriod = cycles >> 7;} else {clockSelectBits = 7;pwmPeriod = TIMER1_RESOLUTION - 1;}uint32_t sc = FTM1_SC;FTM1_SC = 0;FTM1_MOD = pwmPeriod;FTM1_SC = FTM_SC_CLKS(1) | FTM_SC_CPWMS | clockSelectBits | (sc & FTM_SC_TOIE);    }    //****************************    //  Run Control    //****************************    void start() __attribute__((always_inline)) {stop();FTM1_CNT = 0;resume();    }    void stop() __attribute__((always_inline)) {FTM1_SC = FTM1_SC & (FTM_SC_TOIE | FTM_SC_CPWMS | FTM_SC_PS(7));    }    void restart() __attribute__((always_inline)) {start();    }    void resume() __attribute__((always_inline)) {FTM1_SC = (FTM1_SC & (FTM_SC_TOIE | FTM_SC_PS(7))) | FTM_SC_CPWMS | FTM_SC_CLKS(1);    }    //****************************    //  PWM outputs    //****************************    void setPwmDuty(char pin, unsigned int duty) __attribute__((always_inline)) {unsigned long dutyCycle = pwmPeriod;dutyCycle *= duty;dutyCycle >>= 10;if (pin == TIMER1_A_PIN) {FTM1_C0V = dutyCycle;} else if (pin == TIMER1_B_PIN) {FTM1_C1V = dutyCycle;}    }    void pwm(char pin, unsigned int duty) __attribute__((always_inline)) {setPwmDuty(pin, duty);if (pin == TIMER1_A_PIN) {*portConfigRegister(TIMER1_A_PIN) = PORT_PCR_MUX(3) | PORT_PCR_DSE | PORT_PCR_SRE;} else if (pin == TIMER1_B_PIN) {*portConfigRegister(TIMER1_B_PIN) = PORT_PCR_MUX(3) | PORT_PCR_DSE | PORT_PCR_SRE;}    }    void pwm(char pin, unsigned int duty, unsigned long microseconds) __attribute__((always_inline)) {if (microseconds > 0) setPeriod(microseconds);pwm(pin, duty);    }    void disablePwm(char pin) __attribute__((always_inline)) {if (pin == TIMER1_A_PIN) {*portConfigRegister(TIMER1_A_PIN) = 0;} else if (pin == TIMER1_B_PIN) {*portConfigRegister(TIMER1_B_PIN) = 0;}    }    //****************************    //  Interrupt Function    //****************************    void attachInterrupt(void (*isr)()) __attribute__((always_inline)) {isrCallback = isr;FTM1_SC |= FTM_SC_TOIE;NVIC_ENABLE_IRQ(IRQ_FTM1);    }    void attachInterrupt(void (*isr)(), unsigned long microseconds) __attribute__((always_inline)) {if(microseconds > 0) setPeriod(microseconds);attachInterrupt(isr);    }    void detachInterrupt() __attribute__((always_inline)) {FTM1_SC &= ~FTM_SC_TOIE;NVIC_DISABLE_IRQ(IRQ_FTM1);    }    static void (*isrCallback)();    static void isrDefaultUnused();  private:    // properties    static unsigned short pwmPeriod;    static unsigned char clockSelectBits;#undef F_TIMER#endif};extern TimerOne Timer1;#endif

TimerOne

/* *  Interrupt and PWM utilities for 16 bit Timer1 on ATmega168/328 *  Original code by Jesse Tane for http://labs.ideo.com August 2008 *  Modified March 2009 by Jérôme Despatis and Jesse Tane for ATmega328 support *  Modified June 2009 by Michael Polli and Jesse Tane to fix a bug in setPeriod() which caused the timer to stop *  Modified Oct 2009 by Dan Clemens to work with timer1 of the ATMega1280 or Arduino Mega *  Modified April 2012 by Paul Stoffregen *  Modified again, June 2014 by Paul Stoffregen *  Modified July 2017 by Stoyko Dimitrov - added support for ATTiny85 except for the PWM functionality * *  This is free software. You can redistribute it and/or modify it under *  the terms of Creative Commons Attribution 3.0 United States License.  *  To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/us/  *  or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. * */#include "TimerOne.h"TimerOne Timer1;              // preinstatiateunsigned short TimerOne::pwmPeriod = 0;unsigned char TimerOne::clockSelectBits = 0;void (*TimerOne::isrCallback)() = TimerOne::isrDefaultUnused;// interrupt service routine that wraps a user defined function supplied by attachInterrupt#if defined (__AVR_ATtiny85__)ISR(TIMER1_COMPA_vect){  Timer1.isrCallback();}#elif defined(__AVR__)ISR(TIMER1_OVF_vect){  Timer1.isrCallback();}#elif defined(__arm__) && defined(CORE_TEENSY)void ftm1_isr(void){  uint32_t sc = FTM1_SC;  #ifdef KINETISL  if (sc & 0x80) FTM1_SC = sc;  #else  if (sc & 0x80) FTM1_SC = sc & 0x7F;  #endif  Timer1.isrCallback();}#endifvoid TimerOne::isrDefaultUnused(){}

known_16bit_timers.h
#ifndef known_16bit_timers_header_#define known_16bit_timers_header_// Wiring-S//#if defined(__AVR_ATmega644P__) && defined(WIRING)  #define TIMER1_A_PIN   5  #define TIMER1_B_PIN   4  #define TIMER1_ICP_PIN 6// Teensy 2.0//#elif defined(__AVR_ATmega32U4__) && defined(CORE_TEENSY)  #define TIMER1_A_PIN   14  #define TIMER1_B_PIN   15  #define TIMER1_C_PIN   4  #define TIMER1_ICP_PIN 22  #define TIMER1_CLK_PIN 11  #define TIMER3_A_PIN   9  #define TIMER3_ICP_PIN 10// Teensy++ 2.0#elif defined(__AVR_AT90USB1286__) && defined(CORE_TEENSY)  #define TIMER1_A_PIN   25  #define TIMER1_B_PIN   26  #define TIMER1_C_PIN   27  #define TIMER1_ICP_PIN 4  #define TIMER1_CLK_PIN 6  #define TIMER3_A_PIN   16  #define TIMER3_B_PIN   15  #define TIMER3_C_PIN   14  #define TIMER3_ICP_PIN 17  #define TIMER3_CLK_PIN 13// Teensy 3.0//#elif defined(__MK20DX128__)  #define TIMER1_A_PIN   3  #define TIMER1_B_PIN   4  #define TIMER1_ICP_PIN 4// Teensy 3.1 / Teensy 3.2//#elif defined(__MK20DX256__)  #define TIMER1_A_PIN   3  #define TIMER1_B_PIN   4  #define TIMER1_ICP_PIN 4  #define TIMER3_A_PIN   32  #define TIMER3_B_PIN   25  #define TIMER3_ICP_PIN 32  // Teensy 3.5 / Teensy 3.6//#elif defined(__MK64FX512__) || defined(__MK66FX1M0__)  #define TIMER1_A_PIN   3  #define TIMER1_B_PIN   4  #define TIMER1_ICP_PIN 4  #define TIMER3_A_PIN   29  #define TIMER3_B_PIN   30  #define TIMER3_ICP_PIN 29  // Teensy-LC//#elif defined(__MKL26Z64__)  #define TIMER1_A_PIN   16  #define TIMER1_B_PIN   17  #define TIMER1_ICP_PIN 17  #define TIMER3_A_PIN   3  #define TIMER3_B_PIN   4  #define TIMER3_ICP_PIN 4// Arduino Mega//#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)  #define TIMER1_A_PIN   11  #define TIMER1_B_PIN   12  #define TIMER1_C_PIN   13  #define TIMER3_A_PIN   5  #define TIMER3_B_PIN   2  #define TIMER3_C_PIN   3  #define TIMER4_A_PIN   6  #define TIMER4_B_PIN   7  #define TIMER4_C_PIN   8  #define TIMER4_ICP_PIN 49  #define TIMER5_A_PIN   46  #define TIMER5_B_PIN   45  #define TIMER5_C_PIN   44  #define TIMER3_ICP_PIN 48  #define TIMER3_CLK_PIN 47// Arduino Leonardo, Yun, etc//#elif defined(__AVR_ATmega32U4__)  #define TIMER1_A_PIN   9  #define TIMER1_B_PIN   10  #define TIMER1_C_PIN   11  #define TIMER1_ICP_PIN 4  #define TIMER1_CLK_PIN 12  #define TIMER3_A_PIN   5  #define TIMER3_ICP_PIN 13//  Uno, Duemilanove, LilyPad, etc//#elif defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__)  #define TIMER1_A_PIN   9  #define TIMER1_B_PIN   10  #define TIMER1_ICP_PIN 8  #define TIMER1_CLK_PIN 5// Sanguino//#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)  #define TIMER1_A_PIN   13  #define TIMER1_B_PIN   12  #define TIMER1_ICP_PIN 14#ifndef known_16bit_timers_header_#define known_16bit_timers_header_// Wiring-S//#if defined(__AVR_ATmega644P__) && defined(WIRING)  #define TIMER1_A_PIN   5  #define TIMER1_B_PIN   4  #define TIMER1_ICP_PIN 6// Teensy 2.0//#elif defined(__AVR_ATmega32U4__) && defined(CORE_TEENSY)  #define TIMER1_A_PIN   14  #define TIMER1_B_PIN   15  #define TIMER1_C_PIN   4  #define TIMER1_ICP_PIN 22  #define TIMER1_CLK_PIN 11  #define TIMER3_A_PIN   9  #define TIMER3_ICP_PIN 10// Teensy++ 2.0#elif defined(__AVR_AT90USB1286__) && defined(CORE_TEENSY)  #define TIMER1_A_PIN   25  #define TIMER1_B_PIN   26  #define TIMER1_C_PIN   27  #define TIMER1_ICP_PIN 4  #define TIMER1_CLK_PIN 6  #define TIMER3_A_PIN   16  #define TIMER3_B_PIN   15  #define TIMER3_C_PIN   14  #define TIMER3_ICP_PIN 17  #define TIMER3_CLK_PIN 13// Teensy 3.0//#elif defined(__MK20DX128__)  #define TIMER1_A_PIN   3  #define TIMER1_B_PIN   4  #define TIMER1_ICP_PIN 4// Teensy 3.1 / Teensy 3.2//#elif defined(__MK20DX256__)  #define TIMER1_A_PIN   3  #define TIMER1_B_PIN   4  #define TIMER1_ICP_PIN 4  #define TIMER3_A_PIN   32  #define TIMER3_B_PIN   25  #define TIMER3_ICP_PIN 32  // Teensy 3.5 / Teensy 3.6//#elif defined(__MK64FX512__) || defined(__MK66FX1M0__)  #define TIMER1_A_PIN   3  #define TIMER1_B_PIN   4  #define TIMER1_ICP_PIN 4  #define TIMER3_A_PIN   29  #define TIMER3_B_PIN   30  #define TIMER3_ICP_PIN 29  // Teensy-LC//#elif defined(__MKL26Z64__)  #define TIMER1_A_PIN   16  #define TIMER1_B_PIN   17  #define TIMER1_ICP_PIN 17  #define TIMER3_A_PIN   3  #define TIMER3_B_PIN   4  #define TIMER3_ICP_PIN 4// Arduino Mega//#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)  #define TIMER1_A_PIN   11  #define TIMER1_B_PIN   12  #define TIMER1_C_PIN   13  #define TIMER3_A_PIN   5  #define TIMER3_B_PIN   2  #define TIMER3_C_PIN   3  #define TIMER4_A_PIN   6  #define TIMER4_B_PIN   7  #define TIMER4_C_PIN   8  #define TIMER4_ICP_PIN 49  #define TIMER5_A_PIN   46  #define TIMER5_B_PIN   45  #define TIMER5_C_PIN   44  #define TIMER3_ICP_PIN 48  #define TIMER3_CLK_PIN 47// Arduino Leonardo, Yun, etc//#elif defined(__AVR_ATmega32U4__)  #define TIMER1_A_PIN   9  #define TIMER1_B_PIN   10  #define TIMER1_C_PIN   11  #define TIMER1_ICP_PIN 4  #define TIMER1_CLK_PIN 12  #define TIMER3_A_PIN   5  #define TIMER3_ICP_PIN 13//  Uno, Duemilanove, LilyPad, etc//#elif defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__)  #define TIMER1_A_PIN   9  #define TIMER1_B_PIN   10  #define TIMER1_ICP_PIN 8  #define TIMER1_CLK_PIN 5// Sanguino//#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)  #define TIMER1_A_PIN   13  #define TIMER1_B_PIN   12  #define TIMER1_ICP_PIN 14  #define TIMER1_CLK_PIN 1// Wildfire - Wicked Devices//#elif defined(__AVR_ATmega1284P__) && defined(WILDFIRE_VERSION) && WILDFIRE_VERSION >= 3  #define TIMER1_A_PIN   5   // PD5  #define TIMER1_B_PIN   8   // PD4  #define TIMER1_ICP_PIN 6   // PD6  #define TIMER1_CLK_PIN 23  // PB1  #define TIMER3_A_PIN   12  // PB6  #define TIMER3_B_PIN   13  // PB7  #define TIMER3_ICP_PIN 9   // PB5  #define TIMER3_CLK_PIN 0   // PD0#elif defined(__AVR_ATmega1284P__) && defined(WILDFIRE_VERSION) && WILDFIRE_VERSION < 3  #define TIMER1_A_PIN   5   // PD5  #define TIMER1_B_PIN   4   // PD4  #define TIMER1_ICP_PIN 6   // PD6  #define TIMER1_CLK_PIN 15  // PB1  #define TIMER3_A_PIN   12  // PB6  #define TIMER3_B_PIN   13  // PB7  #define TIMER3_ICP_PIN 11  // PB5  #define TIMER3_CLK_PIN 0   // PD0// Mighty-1284 - Maniacbug//#elif defined(__AVR_ATmega1284P__)  #define TIMER1_A_PIN   12  // PD5  #define TIMER1_B_PIN   13  // PD4  #define TIMER1_ICP_PIN 14  // PD6  #define TIMER1_CLK_PIN 1   // PB1  #define TIMER3_A_PIN   6   // PB6  #define TIMER3_B_PIN   7   // PB7  #define TIMER3_ICP_PIN 5   // PB5  #define TIMER3_CLK_PIN 8   // PD0#endif#endif  #define TIMER1_CLK_PIN 1// Wildfire - Wicked Devices//#elif defined(__AVR_ATmega1284P__) && defined(WILDFIRE_VERSION) && WILDFIRE_VERSION >= 3  #define TIMER1_A_PIN   5   // PD5  #define TIMER1_B_PIN   8   // PD4  #define TIMER1_ICP_PIN 6   // PD6  #define TIMER1_CLK_PIN 23  // PB1  #define TIMER3_A_PIN   12  // PB6  #define TIMER3_B_PIN   13  // PB7  #define TIMER3_ICP_PIN 9   // PB5  #define TIMER3_CLK_PIN 0   // PD0#elif defined(__AVR_ATmega1284P__) && defined(WILDFIRE_VERSION) && WILDFIRE_VERSION < 3  #define TIMER1_A_PIN   5   // PD5  #define TIMER1_B_PIN   4   // PD4  #define TIMER1_ICP_PIN 6   // PD6  #define TIMER1_CLK_PIN 15  // PB1  #define TIMER3_A_PIN   12  // PB6  #define TIMER3_B_PIN   13  // PB7  #define TIMER3_ICP_PIN 11  // PB5  #define TIMER3_CLK_PIN 0   // PD0// Mighty-1284 - Maniacbug//#elif defined(__AVR_ATmega1284P__)  #define TIMER1_A_PIN   12  // PD5  #define TIMER1_B_PIN   13  // PD4  #define TIMER1_ICP_PIN 14  // PD6  #define TIMER1_CLK_PIN 1   // PB1  #define TIMER3_A_PIN   6   // PB6  #define TIMER3_B_PIN   7   // PB7  #define TIMER3_ICP_PIN 5   // PB5  #define TIMER3_CLK_PIN 8   // PD0#endif#endif


原创粉丝点击