1 (edited by denisfefelov 2022-01-12 02:00:32)

Topic: под ESP32 не компилируется код ESP8266

Всем привет. Проблема такая - один и тот же код (за исключением библиотек под разные платы) нормально компилируется под плату ESP8266 и не компилируется под плату ESP 32.
копипаст ошибки
C:\Users\DNS\Documents\Arduino\sketch\remotexy\t34_driver.ino\t34_driver.ino.ino: In function 'void Wheel(unsigned char*, int)':
t34_driver.ino:188:106: error: call of overloaded 'analogWrite(unsigned char&, double)' is ambiguous
        if (v>0) { digitalWrite(motor[0], HIGH); digitalWrite(motor[1], LOW); analogWrite(motor[2], v*2.55); }
                                                                                                          ^
In file included from C:\Users\DNS\Documents\ArduinoData\packages\esp32\hardware\esp32\2.0.2\cores\esp32/Arduino.h:36,
                 from sketch\t34_driver.ino.ino.cpp:1:
C:\Users\DNS\Documents\ArduinoData\packages\esp32\hardware\esp32\2.0.2\cores\esp32/esp32-hal.h:93:6: note: candidate: 'void analogWrite(uint8_t, int)'
void analogWrite(uint8_t pin, int value);
      ^~~~~~~~~~~
In file included from C:\Users\DNS\Documents\Arduino\libraries\ESP32Servo\src/ESP32Servo.h:67,
                 from C:\Users\DNS\Documents\Arduino\sketch\remotexy\t34_driver.ino\t34_driver.ino.ino:26:
C:\Users\DNS\Documents\Arduino\libraries\ESP32Servo\src/analogWrite.h:9:8: note: candidate: 'void analogWrite(uint8_t, uint16_t)'
   void analogWrite( uint8_t APin, uint16_t AValue );
        ^~~~~~~~~~~
t34_driver.ino:189:109: error: call of overloaded 'analogWrite(unsigned char&, double)' is ambiguous
   else if (v<0) { digitalWrite(motor[0], LOW); digitalWrite(motor[1], HIGH); analogWrite(motor[2], (-v)*2.55); }
                                                                                                             ^
In file included from C:\Users\DNS\Documents\ArduinoData\packages\esp32\hardware\esp32\2.0.2\cores\esp32/Arduino.h:36,
                 from sketch\t34_driver.ino.ino.cpp:1:
C:\Users\DNS\Documents\ArduinoData\packages\esp32\hardware\esp32\2.0.2\cores\esp32/esp32-hal.h:93:6: note: candidate: 'void analogWrite(uint8_t, int)'
void analogWrite(uint8_t pin, int value);
      ^~~~~~~~~~~
In file included from C:\Users\DNS\Documents\Arduino\libraries\ESP32Servo\src/ESP32Servo.h:67,
                 from C:\Users\DNS\Documents\Arduino\sketch\remotexy\t34_driver.ino\t34_driver.ino.ino:26:
C:\Users\DNS\Documents\Arduino\libraries\ESP32Servo\src/analogWrite.h:9:8: note: candidate: 'void analogWrite(uint8_t, uint16_t)'
   void analogWrite( uint8_t APin, uint16_t AValue );
        ^~~~~~~~~~~
C:\Users\DNS\Documents\Arduino\sketch\remotexy\t34_driver.ino\t34_driver.ino.ino: In function 'void setup()':
t34_driver.ino:196:3: error: 'RemoteXY_Init' was not declared in this scope
   RemoteXY_Init ();
   ^~~~~~~~~~~~~
C:\Users\DNS\Documents\Arduino\sketch\remotexy\t34_driver.ino\t34_driver.ino.ino:196:3: note: suggested alternative: 'RemoteXY_CONF'
   RemoteXY_Init ();
   ^~~~~~~~~~~~~
   RemoteXY_CONF
In file included from C:\Users\DNS\Documents\Arduino\sketch\remotexy\t34_driver.ino\t34_driver.ino.ino:25:
C:\Users\DNS\Documents\Arduino\sketch\remotexy\t34_driver.ino\t34_driver.ino.ino: In function 'void loop()':
C:\Users\DNS\Documents\Arduino\libraries\RemoteXY\src/RemoteXY.h:151:28: error: 'remotexy' was not declared in this scope
#define RemoteXY_Handler() remotexy->handler ()
                            ^~~~~~~~
C:\Users\DNS\Documents\Arduino\sketch\remotexy\t34_driver.ino\t34_driver.ino.ino:233:3: note: in expansion of macro 'RemoteXY_Handler'
   RemoteXY_Handler ();
   ^~~~~~~~~~~~~~~~
C:\Users\DNS\Documents\Arduino\libraries\RemoteXY\src/RemoteXY.h:151:28: note: suggested alternative: 'RemoteXY'
#define RemoteXY_Handler() remotexy->handler ()
                            ^~~~~~~~
C:\Users\DNS\Documents\Arduino\sketch\remotexy\t34_driver.ino\t34_driver.ino.ino:233:3: note: in expansion of macro 'RemoteXY_Handler'
   RemoteXY_Handler ();
   ^~~~~~~~~~~~~~~~
exit status 1
call of overloaded 'analogWrite(unsigned char&, double)' is ambiguous

2

Re: под ESP32 не компилируется код ESP8266

Я в программировании прям новичек. Две недели назад купил первую плату... что он хочет от меня?

3

Re: под ESP32 не компилируется код ESP8266

remotexy wrote:

.

пожалуйста, помогите решить проблему

4

Re: под ESP32 не компилируется код ESP8266

Попробуйте заменить везде в коде где вызывается analogWrite

//analogWrite(motor[2], v*2.55);
analogWrite(motor[2], (int)(v*2.55));

5

Re: под ESP32 не компилируется код ESP8266

remotexy wrote:

Попробуйте заменить везде в коде где вызывается analogWrite

//analogWrite(motor[2], v*2.55);
analogWrite(motor[2], (int)(v*2.55));

Не помогло…

6

Re: под ESP32 не компилируется код ESP8266

remotexy wrote:

Попробуйте заменить везде в коде где вызывается analogWrite

//analogWrite(motor[2], v*2.55);
analogWrite(motor[2], (int)(v*2.55));

вот так

void Wheel (unsigned char * motor, int v)
{
  if (v>100) v=100;
  if (v<-100) v=-100;
  if (v>0) {
    digitalWrite(motor[0], HIGH);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], v);
  }
  else if (v<0) {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], HIGH);
    analogWrite(motor[2], -v);
  }
  else {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], 0);
  }
}

скомпиллировало
как теперь из 0-100 сделать 0-255?

7

Re: под ESP32 не компилируется код ESP8266

void Wheel (unsigned char * motor, int v)
{
  if (v>100) v=100;
  if (v<-100) v=-100;
 
  int k = v * 2.55;

  if (v>0) {
    digitalWrite(motor[0], HIGH);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], k);
  }
  else if (v<0) {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], HIGH);
    analogWrite(motor[2], -k);
  }
  else {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], 0);
  }
}

8

Re: под ESP32 не компилируется код ESP8266

remotexy wrote:

.

спасибо. уже догадался))

void Wheel (unsigned char * motor, int v)
{
  if (v>100) v=100;
  if (v<-100) v=-100;
  int x = v*2.55;
  if (v>0) { digitalWrite(motor[0], HIGH); digitalWrite(motor[1], LOW); analogWrite(motor[2], x); }
  else if (v<0) { digitalWrite(motor[0], LOW); digitalWrite(motor[1], HIGH); analogWrite(motor[2], -x); }
  else { digitalWrite(motor[0], LOW); digitalWrite(motor[1], LOW); analogWrite(motor[2], 0); }
}

еще раз спасибо за помощь