Ошибка переопределения класса Arduino

В моей Arduino IDE я установил программу, которая запускает восемь светодиодов через сдвиговый регистр, и сейчас пытаюсь создать класс для управления сдвиговым регистром. До сих пор я создал файл и создал конструктор с несколькими функциями для класса, но когда я пытаюсь проверить код, 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);
}

Спасибо за помощь!

2

Решение

Согласно сообщению об ошибке вы включаете shiftreg.h на линии 97 Lab9_step3.cpp, Что на 96 строк выше? Ошибка, вероятно, лежит где-то там.

Если бы мне пришлось угадывать, я бы сказал, что вы, прямо или косвенно, в том числе shiftreg.h дважды (или больше) в Lab9_step3.cppи ошибка возникает из-за того, что вы не включили охрану в свой заголовочный файл.

Попробуйте добавить следующее в shiftreg.h

#ifndef SHIFTREG_H
#define SHIFTREG_H

class shiftreg
{
// ...
};

#endif
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]