代码之家  ›  专栏  ›  技术社区  ›  Daniel Pravdik

如何在VSCode中将<string>和<iostream>与PlatformIO一起使用:

  •  -2
  • Daniel Pravdik  · 技术社区  · 2 年前

    我一直在尝试使用和PlatformIO作为我的“简单oled GUI”。我遇到了麻烦,包括那些没有任何错误的库。请注意,我是VScode和PlatformIO的初学者。提前感谢您的任何建议:) 这是我的代码(尚未完成的问题bcs):

    #include <Arduino.h>
    #include <Adafruit_SSD1306.h>
    #include <Adafruit_GFX.h>
    #include <Wire.h>
    #include <SPI.h>
    
    #define outputA 2
    #define outputB 3
    
    #define SCREEN_WIDTH 128
    #define SCREEN_HEIGHT 64
    #define OLED_RESET -1
    #define SCREEN_ADRESS 0x3D
    Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
    
    const int numpages = 3; //number of pages
    int thispage = 0;
    int counter = 0;
    int aState = 0;
    int aLastState = 0;
    
    int textX0= 9;
    int textY0 = 34;
    int textX1 = 9; //default 
    int textY1 = 34; //default
    int textY2 = 34;
    int txtsize = 1;
    
    
    void setup() {
    pinMode (outputA,INPUT);
    pinMode (outputB,INPUT);
     
    Serial.begin (9600);
    aLastState = digitalRead(outputA);
    
    display.drawRect(4,22,121,19,WHITE); //Select rectangle
    display.drawLine(7,42,1,1,848484); //Outline
    }
     
    void loop() {
    aState = digitalRead(outputA); //Rotary encoder, saved into the "counter" variable 
    if (aState != aLastState){
    if (digitalRead(outputB) != aState) {
    counter ++;
    } else {
    counter --;
    }
    Serial.print("Position: "); 
    Serial.println(counter);
    thispage = counter/2;
    }
    if(thispage < 0) {
        thispage = numpages;
    }else if (thispage > numpages){
        thispage = 0;
    }
    
    textX0 = textX1;
    textY2 = textY1;
    textY2 = textY1;
    
    if(thispage == 0){
        textX0 = 6;
        textY0 = 18;
        textX1 = 9; 
        textY1 = 34;
        textY2 = 56;
        txtsize = 2;
    }else{
        textX0 = 9;
        textY0 = 18;
        textX1 = 9;
        textY1 = 34;
        textY2 = 56;
        txtsize = 1;
    }
    
        display.setTextSize(txtsize);
        display.setCursor(textX0,textY0);
        display.setTextColor(WHITE);
        display.print("menu1");
        display.setTextSize(1);
        display.setCursor(textX1,textY1);   
        display.write("menu2");
        display.setCursor(textX1,textY2);
        display.write("menu3");
    
    
    display.print(thispage);
    aLastState = aState; 
    display.clearDisplay();
    
    }
    
    

    这是我的c_cpp_properties.json文件:

    {
        "configurations": [
            {
                "name": "PlatformIO",
                "includePath": [
                    "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/include",
                    "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/src",
                    "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit SSD1306",
                    "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit-TFT-LCD",
                    "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit GFX Library",
                    "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit BusIO",
                    "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/Wire/src",
                    "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/GFX Library for Arduino/src",
                    "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/SPI/src",
                    "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit TouchScreen",
                    "C:/Users/danie/.platformio/packages/framework-arduino-avr/cores/arduino",
                    "C:/Users/danie/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs",
                    "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src",
                    "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/HID/src",
                    "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/SoftwareSerial/src",
                    ""
                ],
                "browse": {
                    "limitSymbolsToIncludedHeaders": true,
                    "path": [
                        "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/include",
                        "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/src",
                        "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit SSD1306",
                        "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit-TFT-LCD",
                        "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit GFX Library",
                        "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit BusIO",
                        "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/Wire/src",
                        "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/GFX Library for Arduino/src",
                        "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/SPI/src",
                        "c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/.pio/libdeps/nano/Adafruit TouchScreen",
                        "C:/Users/danie/.platformio/packages/framework-arduino-avr/cores/arduino",
                        "C:/Users/danie/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs",
                        "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src",
                        "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/HID/src",
                        "C:/Users/danie/.platformio/packages/framework-arduino-avr/libraries/SoftwareSerial/src",
                        ""
                    ]
                },
                "defines": [
                    "PLATFORMIO=60109",
                    "ARDUINO_AVR_NANO",
                    "F_CPU=16000000L",
                    "ARDUINO_ARCH_AVR",
                    "ARDUINO=10808",
                    "__AVR_ATmega328P__",
                    ""
                ],
                "cStandard": "gnu11",
                "cppStandard": "gnu++11",
                "compilerPath": "C:/Users/danie/.platformio/packages/toolchain-atmelavr/bin/avr-gcc.exe",
                "compilerArgs": [
                    "-mmcu=atmega328p",
                    ""
                ]
            }
        ],
        "version": 4
    }
    
    

    我从未向ChatGpt咨询过这些错误。我什么都做了 this tutorial 说,所以我有g++,我可以在哪里做一个新项目并工作,但我不能将它与PlatformIO一起使用。我确实编辑了c_cpp_properties.json,但仅此而已。

    以下是我一直在谈论的错误:

    [{
        "resource": "/c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/src/olednano.cpp",
        "owner": "C/C++: IntelliSense",
        "code": "1696",
        "severity": 8,
        "message": "#include errors detected. Please update your includePath. Squiggles are disabled for this translation unit (C:\\Users\\danie\\Documents\\Arduino\\Touchscreen UI\\UI_test_touch\\src\\olednano.cpp).",
        "source": "C/C++",
        "startLineNumber": 6,
        "startColumn": 1,
        "endLineNumber": 6,
        "endColumn": 20
    }]
    

    [{
        "resource": "/c:/Users/danie/Documents/Arduino/Touchscreen UI/UI_test_touch/src/olednano.cpp",
        "owner": "C/C++: IntelliSense",
        "code": "1696",
        "severity": 8,
        "message": "cannot open source file \"iostream\". Please run the 'Select IntelliSense Configuration...' command to locate your system headers.",
        "source": "C/C++",
        "startLineNumber": 6,
        "startColumn": 1,
        "endLineNumber": 6,
        "endColumn": 20
    }]
    
    1 回复  |  直到 2 年前
        1
  •  3
  •   Codo    2 年前

    看起来你正在使用Arduino Uno或类似的设备。这些设备没有足够的内存来实现标准C++字符串和IO类。因此,阿杜伊诺人创造了适合记忆的替代品。

    因此 std::string 使用 String 而不是 std::ostream 使用 Stream ( Serial 流动 实例)。