求助大神,expected primary-expression before ')' token错误-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 322|回复: 0

[未解决] 求助大神,expected primary-expression before ')' token错误

[复制链接]
发表于 2022-4-21 22:12 | 显示全部楼层 |阅读模式
本帖最后由 suiyuan7906 于 2022-4-23 10:40 编辑

这是源码

  1. //抖音爆改车间主任开源代码
  2. //4.2寸墨水屏兼容微雪4.2寸三色墨水屏
  3. //文本文档命名为txt.txt存储在TF卡的根目录中,仅支持UTF-8编码,用windows文本编辑器另存为UTF-8编码
  4. //首次打开文档会创建索引文件,可能需要几分钟的时间,从串口监视器中可查看进度
  5. //2分钟无操作自动进入休眠模式,重启电源后恢复使用
  6. //转载保留爆改车间主任署名
  7. //关注“爆改车间”微信公众号获取主任更多开关代码
  8. //关注“爆改车间主任”抖音观看主任最新有趣视频

  9. #include <FS.h>
  10. #include <SD.h>
  11. //#include <time.h>
  12. //#include <ESP8266WiFi.h>
  13. //#include <ESP8266WebServer.h>
  14. #include <EEPROM.h>

  15. String txt[1];
  16. int page, pagemax;
  17. //=========================================
  18. //按键IO配置
  19. const int UP = 4;// D2;
  20. const int DOWN = 0;// D3;

  21. //=========================================
  22. //4.2寸墨水屏驱动配置 墨水屏驱动库GxEPD2在库管理中下载
  23. #include <U8g2_for_Adafruit_GFX.h>
  24. #include <GxEPD2_BW.h>
  25. //#include <GxEPD2_3C.h>
  26. #define GxEPD2_DISPLAY_CLASS GxEPD2_BW
  27. //#define GxEPD2_DISPLAY_CLASS GxEPD2_3C
  28. #define GxEPD2_DRIVER_CLASS GxEPD2_420     // GDEW042T2   400x300, UC8176 (IL0398)
  29. //#define GxEPD2_DRIVER_CLASS GxEPD2_420c
  30. #define MAX_DISPLAY_BUFFER_SIZE (81920ul-34000ul-5000ul) // ~34000 base use, change 5000 to your application use
  31. #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8))

  32. //根据驱动板自行配置墨水屏驱动IO口
  33. //当前使用的是黑白屏的驱动
  34. //三色屏使用黑白屏驱动刷新速度块,需要修改驱动文件GxEPD2_420.cpp中_InitDisplay屏幕初始化设置里writeCommand(0x30)项下面改为writeData(0x3c);
  35. GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, MAX_HEIGHT(GxEPD2_DRIVER_CLASS)> display(GxEPD2_DRIVER_CLASS(/*CS=D8*/ 15, /*DC=D2*/ 4, /*RST=D4*/ 2, /*BUSY=D1*/ 5));


  36. //下面一行是三色屏的驱动
  37. //GxEPD2_3C<GxEPD2_420c, GxEPD2_420c::HEIGHT / 2> display(GxEPD2_420c(/*CS=D8*/ D8, /*DC=D3*/ D2, /*RST=D4*/ D4, /*BUSY=D2*/ D1)); // GDEW042Z15

  38. U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;

  39. File SDCard;
  40. File file, fileSY;
  41. int adc;
  42. int runtime;

  43. void setup() {
  44.   Serial.begin(115200);
  45.   Serial.println();
  46.   Serial.println();
  47.   Serial.println();
  48.   EEPROM.begin(1024);
  49.   page = read_String(1).toInt();
  50.   pagemax = read_String(10).toInt();
  51.   adc = analogRead(A0);
  52.   display.init();

  53.   u8g2_for_adafruit_gfx.begin(display);

  54.   Serial.print("Initializing SD card...");
  55.   if (!SD.begin(D3)) {
  56.     Serial.println("initialization failed!");
  57.     return;
  58.   }
  59.   Serial.println("initialization done.");
  60.   SDCard = SD.open("/");

  61.   listDir(SDCard, 0);

  62.   file = SD.open("txt.txt", "r");
  63.   Serial.print("txt.txt文件大小:");
  64.   Serial.println(file.size());

  65.   if (!file) {
  66.     Serial.println("没有找到txt.txt文件");
  67.   } else {
  68.     Serial.println("打开txt.txt文件");
  69.     fileSY = SD.open("txtSY.txt", "r");
  70.     if (!fileSY) {
  71.       Serial.println("没有找到txt.txt的索引文件");
  72.       Serial.println("开始创建txt.txt的索引文件");
  73.       suoyin_R(File);
  74.     } else {
  75.       Serial.println("打开txt.txt的索引文件");
  76.     }
  77.   }

  78.   gettxt_R(file, page);
  79.   displayTXT_R();
  80. }

  81. void loop() {
  82.   if (digitalRead(UP) == LOW) {
  83.     delay(10);
  84.     if (digitalRead(UP) == LOW) {
  85.       if (page > 0)page--;
  86.       pinMode(DOWN, OUTPUT);
  87.       gettxt_R(file, page);
  88.       pinMode(DOWN, INPUT);
  89.       write_String(1, String(page));
  90.       pinMode(UP, OUTPUT);
  91.       displayTXT_R();
  92.       pinMode(UP, INPUT_PULLUP);
  93.       adc = analogRead(A0);
  94.       adc = analogRead(A0);
  95.       adc = analogRead(A0);
  96.       runtime = millis();
  97.       while (digitalRead(UP) == LOW);
  98.     }
  99.   }

  100.   if (digitalRead(DOWN) == LOW) {
  101.     delay(10);
  102.     if (digitalRead(DOWN) == LOW) {
  103.       page++;
  104.       pinMode(DOWN, OUTPUT);
  105.       gettxt_R(file, page);
  106.       pinMode(DOWN, INPUT);
  107.       write_String(1, String(page));
  108.       pinMode(UP, OUTPUT);
  109.       displayTXT_R();
  110.       pinMode(UP, INPUT_PULLUP);
  111.       adc = analogRead(A0);
  112.       adc = analogRead(A0);
  113.       adc = analogRead(A0);
  114.       runtime = millis();
  115.       while (digitalRead(DOWN) == LOW);

  116.     }
  117.   }

  118.   if ((millis() - runtime) > 120000) {
  119.     Serial.println("进入休眠状态");
  120.     pinMode(UP, OUTPUT);
  121.     u8g2_for_adafruit_gfx.setFont(u8g2_font_wqy14_t_gb2312);
  122.     u8g2_for_adafruit_gfx.setFontMode(1);
  123.     u8g2_for_adafruit_gfx.setFontDirection(0);
  124.     u8g2_for_adafruit_gfx.setBackgroundColor(GxEPD_BLACK);
  125.     u8g2_for_adafruit_gfx.setForegroundColor(GxEPD_WHITE);
  126.     display.setPartialWindow(110, 0, 95, 14);
  127.     display.firstPage();
  128.     do
  129.     {
  130.       display.fillScreen(GxEPD_BLACK);
  131.       u8g2_for_adafruit_gfx.setCursor(115, 14);
  132.       u8g2_for_adafruit_gfx.print("进入休眠状态");

  133.     }
  134.     while (display.nextPage());
  135.     ESP.deepSleep(0);
  136.   }

  137. }

  138. void displayTXT_R() {

  139.   u8g2_for_adafruit_gfx.setFont(u8g2_font_wqy14_t_gb2312);
  140.   u8g2_for_adafruit_gfx.setFontMode(1);                 // use u8g2 transparent mode (this is default)
  141.   u8g2_for_adafruit_gfx.setFontDirection(0);            // left to right (this is default)
  142.   u8g2_for_adafruit_gfx.setForegroundColor(GxEPD_BLACK);      // apply Adafruit GFX color
  143.   u8g2_for_adafruit_gfx.setBackgroundColor(GxEPD_WHITE);
  144.   display.setRotation(1);
  145.   display.setFullWindow();
  146.   display.firstPage();
  147.   do
  148.   {
  149.     display.fillScreen(GxEPD_WHITE);
  150.     u8g2_for_adafruit_gfx.setCursor(0, 14);
  151.     String H = "电池电压:" + String(float(adc) * 405 / 100000) + "V";
  152.     u8g2_for_adafruit_gfx.print(H);

  153.     H = "页:" + String(page + 1) + "/" + String(pagemax);

  154.     u8g2_for_adafruit_gfx.setCursor(300 - (H.length() * 6), 14);
  155.     u8g2_for_adafruit_gfx.print(H);

  156.     for (int j = 0; j < 24; j++) {
  157.       u8g2_for_adafruit_gfx.setCursor(0, 16 * (j + 2));
  158.       u8g2_for_adafruit_gfx.print(txt[j]);
  159.     }
  160.   }
  161.   while (display.nextPage());
  162.   Serial.println("显示结束");
  163.   display.hibernate();
  164. }

  165. void listDir(File dir, int numTabs) {
  166.   while (true) {

  167.     File entry =  dir.openNextFile();
  168.     if (! entry) {
  169.       // no more files
  170.       break;
  171.     }
  172.     for (uint8_t i = 0; i < numTabs; i++) {
  173.       Serial.print('\t');
  174.     }
  175.     Serial.print(entry.name());

  176.     if (entry.isDirectory()) {
  177.       Serial.println("/");
  178.       listDir(entry, numTabs + 1);
  179.     } else {
  180.       // files have sizes, directories do not

  181.       Serial.print("\t\t");
  182.       Serial.print(entry.size(), DEC);
  183.       time_t cr = entry.getCreationTime();
  184.       time_t lw = entry.getLastWrite();
  185.       struct tm * tmstruct = localtime(&cr);
  186.       Serial.printf("\tCREATION: %d-%02d-%02d %02d:%02d:%02d", (tmstruct->tm_year) + 1900, (tmstruct->tm_mon) + 1, tmstruct->tm_mday, tmstruct->tm_hour, tmstruct->tm_min, tmstruct->tm_sec);
  187.       tmstruct = localtime(&lw);
  188.       Serial.printf("\tLAST WRITE: %d-%02d-%02d %02d:%02d:%02d\n", (tmstruct->tm_year) + 1900, (tmstruct->tm_mon) + 1, tmstruct->tm_mday, tmstruct->tm_hour, tmstruct->tm_min, tmstruct->tm_sec);
  189.     }
  190.     entry.close();
  191.   }

  192. }

  193. //TXT读取函数_竖版
  194. void gettxt_R(File file, int Y) {
  195.   int i = 0, l = 0, d = 0;
  196.   int address = 0;

  197.   if (Y != 0) {
  198.     File SYfile = SD.open("txtSY.txt", "r");
  199.     String ST_L;
  200.     while (SYfile.available()) {
  201.       byte ST_T = SYfile.read();
  202.       ST_L += (char)ST_T;
  203.       if (ST_T == '\n') {
  204.         if (ST_L.substring(ST_L.indexOf("L") + 1, ST_L.indexOf(":")).toInt() == Y) {
  205.           address = ST_L.substring(ST_L.indexOf(":") + 1, ST_L.indexOf("\n")).toInt();
  206.           //Serial.println(address);
  207.           break;
  208.         } else {
  209.           ST_L = "";
  210.         }
  211.       }
  212.     }
  213.   }
  214.   file.seek(address, SeekSet);
  215.   txt[0] = "";
  216.   while (file.available()) {
  217.     byte t = file.read();
  218.     if ((t <= 0xF7) && (t >= 0xB0)) { //中文字符 UTF-8一个中文字符占3个字节
  219.       txt[l] += (char)t;
  220.       txt[l] += (char)file.read();
  221.       txt[l] += (char)file.read();
  222.       i = i + 3;
  223.       d = d + 3;
  224.     } else if (t == 0xE3) {
  225.       txt[l] += (char)t;
  226.       txt[l] += (char)file.read();
  227.       txt[l] += (char)file.read();
  228.       i = i + 3;
  229.       d = d + 3;
  230.     }
  231.     else if (t == '\n') {           //遇到换行符直接换行
  232.       //txt[l] += (char)t;
  233.       i++;
  234.       l++;
  235.       d = 0;
  236.       txt[l] = "";
  237.     }
  238.     else {                           //英文字符 一个字符占用1个字节
  239.       txt[l] += (char)t;
  240.       i++;
  241.       d++;
  242.     }

  243.     if (d > 60) {                  //一行满60个字节换行
  244.       d = 0;
  245.       l++;
  246.       txt[l] = "";
  247.     }
  248.     if (l >= 24) {                //一页显示24行 停止获取
  249.       break;
  250.     }
  251.   }
  252. }

  253. //索引文件生成函数竖版
  254. void suoyin_R(File file) {
  255.   unsigned long i = 0, l = 0, d = 0, y = 0;
  256.   int s = file.size();
  257.   String adds;
  258.   int v;

  259.   SD.remove("txtSY.txt");
  260.   File SYfile = SD.open("txtSY.txt", "a");
  261.   while (file.available()) {
  262.     byte t = file.read();
  263.     if ((t <= 0xF7) && (t >= 0xB0)) { //中文字符 UTF-8一个中文字符占3个字节
  264.       t = file.read();
  265.       t = file.read();
  266.       i = i + 3;
  267.       d = d + 3;
  268.     } else if (t == 0xE3) {
  269.       txt[l] += (char)t;
  270.       txt[l] += (char)file.read();
  271.       txt[l] += (char)file.read();
  272.       i = i + 3;
  273.       d = d + 3;
  274.     }
  275.     else if (t == '\n') {           //遇到换行符直接换行
  276.       //txt[l] += (char)t;
  277.       i++;
  278.       l++;
  279.       d = 0;

  280.     }
  281.     else {                           //英文字符 一个字符占用1个字节
  282.       txt[l] += (char)t;
  283.       i++;
  284.       d++;
  285.     }
  286.     if (d > 60) {                  //一行满60个字节换行
  287.       d = 0;
  288.       l++;
  289.     }
  290.     if (l >= 24) {                //一页显示24行 停止获取

  291.       long t = file.position();

  292.       //         Serial.print("L");
  293.       //         Serial.print(y+1);
  294.       //         Serial.print(":");
  295.       //         Serial.println(String(t));
  296.       float value = (float(t) / float(s)) * 100;
  297.       if (v != int(value)) {
  298.         v = int(value);
  299.         Serial.print("处理进度:");
  300.         Serial.print(v);
  301.         Serial.println(" %");
  302.       }

  303.       //        Serial.print(adds);
  304.       SYfile.print("L");
  305.       SYfile.print(String(y + 1));
  306.       SYfile.print(":");
  307.       SYfile.print(String(t));
  308.       SYfile.print("\n");

  309.       l = 0;
  310.       y++;
  311.     }
  312.     if (i >= s) {
  313.       write_String(10, String(y + 1));
  314.       break;
  315.     }
  316.   }
  317.   Serial.print(adds);
  318.   SYfile.close();
  319.   write_String(1, "0");
  320.   delay(1000);
  321.   Serial.println("重启");
  322.   ESP.restart();
  323. }

  324. void write_String(int a, String str) {

  325.   EEPROM.write(a, str.length());

  326.   for (int i = 0; i < str.length(); i++) {
  327.     EEPROM.write(a + 1 + i, str[i]);
  328.   }
  329.   EEPROM.commit();
  330. }


  331. String read_String(int a) {
  332.   String data = "";
  333.   for (int i = 0; i < EEPROM.read(a); i++) {
  334.     data += char(EEPROM.read(a + 1 + i));
  335.   }
  336.   return data;
  337. }
复制代码


这是错误截图

这是错误截图

这是截图

正在编译项目...
"C:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\python3\\3.7.2-post1/python3" "C:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1/tools/signing.py" --mode header --publickey "E:\\电子书\\EPD_BOOK_v0.4_TF/public.key" --out "C:\\Users\\suiyu\\AppData\\Local\\Temp\\arduino_build_892159/core/Updater_Signing.h"
"C:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\xtensa-lx106-elf-gcc\\3.0.3-gcc10.3-9bcba0b/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ -D_GNU_SOURCE "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1/tools/sdk/include" "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1/tools/sdk/lwip2/include" "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1/tools/sdk/libc/xtensa-lx106-elf/include" "-IC:\\Users\\suiyu\\AppData\\Local\\Temp\\arduino_build_892159/core" -c -w -Werror=return-type -Os -g -free -fipa-pta -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++17 -MMD -ffunction-sections -fdata-sections -fno-exceptions -DMMU_IRAM_SIZE=0x8000 -DMMU_ICACHE_SIZE=0x8000 -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10818 -DARDUINO_ESP8266_NODEMCU_ESP12E -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD=\"ESP8266_NODEMCU_ESP12E\"" -DLED_BUILTIN=2 -DFLASHMODE_DIO -DESP8266 "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1\\cores\\esp8266" "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1\\variants\\nodemcu" "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1\\libraries\\SD\\src" "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1\\libraries\\SDFS\\src" "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1\\libraries\\SPI" "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1\\libraries\\ESP8266SdFat\\src" "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1\\libraries\\EEPROM" "-ID:\\Program Files (x86)\\Arduino\\libraries\\U8g2_for_Adafruit_GFX\\src" "-ID:\\Program Files (x86)\\Arduino\\libraries\\Adafruit_GFX_Library" "-ID:\\Program Files (x86)\\Arduino\\libraries\\GxEPD2\\src" "-ID:\\Program Files (x86)\\Arduino\\libraries\\Adafruit_BusIO" "-IC:\\Users\\suiyu\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.0.1\\libraries\\Wire" "C:\\Users\\suiyu\\AppData\\Local\\Temp\\arduino_build_892159\\sketch\\EPD_BOOK_v0.4_TF.ino.cpp" -o "C:\\Users\\suiyu\\AppData\\Local\\Temp\\arduino_build_892159\\sketch\\EPD_BOOK_v0.4_TF.ino.cpp.o"
E:\电子书\EPD_BOOK_v0.4_TF\EPD_BOOK_v0.4_TF.ino: In function 'void setup()':
EPD_BOOK_v0.4_TF:88:20: error: expected primary-expression before ')' token
使用 2.0.0  版本的库 SD 在文件夹: C:\Users\suiyu\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.1\libraries\SD
使用 0.1.0  版本的库 SDFS 在文件夹: C:\Users\suiyu\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.1\libraries\SDFS
使用 1.0  版本的库 SPI 在文件夹: C:\Users\suiyu\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.1\libraries\SPI
使用 2.0.2  版本的库 ESP8266SdFat 在文件夹: C:\Users\suiyu\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.1\libraries\ESP8266SdFat
使用 1.0  版本的库 EEPROM 在文件夹: C:\Users\suiyu\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.1\libraries\EEPROM
使用 1.8.0  版本的库 U8g2_for_Adafruit_GFX 在文件夹: D:\Program Files (x86)\Arduino\libraries\U8g2_for_Adafruit_GFX
使用 1.10.14  版本的库 Adafruit_GFX_Library 在文件夹: D:\Program Files (x86)\Arduino\libraries\Adafruit_GFX_Library
使用 1.3.1  版本的库 GxEPD2 在文件夹: D:\Program Files (x86)\Arduino\libraries\GxEPD2
使用 1.11.3  版本的库 Adafruit_BusIO 在文件夹: D:\Program Files (x86)\Arduino\libraries\Adafruit_BusIO
使用 1.0  版本的库 Wire 在文件夹: C:\Users\suiyu\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.1\libraries\Wire
exit status 1
expected primary-expression before ')' token

求大佬们指点,这是哪里的问题,是库的问题还是代码的问题啊。感谢

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:28 , Processed in 0.142778 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表