3

在我的 Arduino IDE 中,我设置了一个通过移位寄存器运行八个 LED 的程序,现在我正在尝试创建一个类来控制移位寄存器。到目前为止,我已经创建了文件并为该类创建了一个带有一些函数的构造函数,但是当我尝试验证代码时,IDE 说我正在重新定义类 shiftreg,这是错误消息:

In file included from Lab9_step3.cpp:97:
shiftreg.h:2: error: redefinition of 'class shiftreg'
shiftreg.h:3: error: previous definition of 'class shiftreg'

我的lab_9代码是:

 /*     ---------------------------------------------------------
 *     |  Arduino Experimentation Kit Example Code             |
 *     |  CIRC-05 .: 8 More LEDs :. (74HC595 Shift Register)   |
 *     ---------------------------------------------------------
 * 
 * We have already controlled 8 LEDs however this does it in a slightly
 * different manner. Rather than using 8 pins we will use just three
 * and an additional chip.
 *
 *
 */
#include "shiftreg.h"

//Pin Definitions
//Pin Definitions
//The 74HC595 uses a serial communication 
//link which has three pins
shiftreg a(2, 3, 4);

int sensorPin = 0;    // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor




/*
 * setup() - this function runs once when you turn your Arduino on
 * We set the three control pins to outputs
 */
void setup()
{
  a.pinmode();
}

/*
 * loop() - this function will start after setup finishes and then repeat
 * we set which LEDs we want on then call a routine which sends the states to the 74HC595
 */
void loop()                     // run over and over again
{ 
   for(int i = 0; i < 256; i++){
   a.update(i);

    // read the value from the sensor:
    sensorValue = analogRead(sensorPin); 

   delay(sensorValue); 
  }
}



    /******************************

    /*
     * updateLEDsLong() - sends the LED states set in ledStates to the 74HC595
     * sequence. Same as updateLEDs except the shifting out is done in software
     * so you can see what is happening.
     */ 
//    void updateLEDsLong(int value){
//      digitalWrite(latch, LOW);    //Pulls the chips latch low
//      for(int i = 0; i < 8; i++){  //Will repeat 8 times (once for each bit)
//      int bit = value & B10000000; //We use a "bitmask" to select only the eighth 
//                                   //bit in our number (the one we are addressing this time thro
//                        //ugh
//      value = value << 1;          //we move our number up one bit value so next time bit 7 will
//                        // be
//                                   //bit 8 and we will do our math on it
//      if(bit == 128){digitalWrite(data, HIGH);} //if bit 8 is set then set our data pin high
//      else{digitalWrite(data, LOW);}            //if bit 8 is unset then set the data pin low
//      digitalWrite(clock, HIGH);                //the next three lines pulse the clock pin
//      delay(1);
//      digitalWrite(clock, LOW);
//      }
//      digitalWrite(latch, HIGH);  //pulls the latch high shifting our data into being displayed
//    }
//    
//    
//    //These are used in the bitwise math that we use to change individual LEDs
//    //For more details http://en.wikipedia.org/wiki/Bitwise_operation
//    int bits[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};
//    int masks[] = {B11111110, B11111101, B11111011, B11110111, B11101111, B11011111, B10111111, B01111111};
//    /*
//     * changeLED(int led, int state) - changes an individual LED 
//     * LEDs are 0 to 7 and state is either 0 - OFF or 1 - ON
//     */
//     void changeLED(int led, int state){
//       ledState = ledState & masks[led];  //clears ledState of the bit we are addressing
//       if(state == ON){ledState = ledState | bits[led];} //if the bit is on we will add it to le
//                        //dState
//       updateLEDs(ledState);              //send the new LED state to the shift register
//     }
//     **********************************/

我的 shiftreg.h 代码是:

/*Shift Register
*/               (Error occurs here)
class shiftreg   (and here)
{
  private:
    //Pin Definitions
    //Pin Definitions
    //The 74HC595 uses a serial communication 
    //link which has three pins
    int data; 
    int clock;
    int latch;

  public:
  shiftreg (int _data, int _clock, int _latch);
  void update(int value);
  void pinmode();
};

我的 shiftreg.cpp 代码是:

#include "shiftreg.h"

/*shiftreg constructor:
*/
shiftreg::shiftreg (int _data, int _clock, int _latch)
{
    data = _data; 
    clock = _clock;
    latch = _latch;

    //Used for single LED manipulation
    int ledState = 0;
    const int ON = HIGH;
    const int OFF = LOW;
}

/*
 * updateLEDs() - sends the LED states set in ledStates to the 74HC595
 * sequence
 */
void shiftreg::update(int value)
{
  digitalWrite(latch, LOW);     //Pulls the chips latch low
  shiftOut(data, clock, MSBFIRST, value); //Shifts out the 8 bits to the shift register
  digitalWrite(latch, HIGH);   //Pulls the latch high displaying the data
}

/*
*/
void shiftreg::pinmode()
{
    pinMode(data, OUTPUT);
    pinMode(clock, OUTPUT);
    pinMode(latch, OUTPUT);
}

谢谢您的帮助!

4

1 回答 1

6

根据您shiftreg.h在第 97 行包含的错误消息Lab9_step3.cpp。上面的 96 行是什么?错误可能就在其中的某个地方。

如果我不得不猜测,我会说您直接或间接地包含shiftreg.h两次(或更多) in Lab9_step3.cpp,并且发生错误是因为您的头文件中没有包含保护。

尝试将以下内容添加到shiftreg.h

#ifndef SHIFTREG_H
#define SHIFTREG_H

class shiftreg
{
  // ...
};

#endif
于 2012-10-25T02:49:54.480 回答