EnviroDIY / Arduino-SDI-12

An Arduino library for SDI-12 communication with a wide variety of environmental sensors. This library provides a general software solution, without requiring any additional hardware.
https://github.com/EnviroDIY/Arduino-SDI-12/wiki
BSD 3-Clause "New" or "Revised" License
159 stars 100 forks source link

arduino due-sdi 12 error #11

Closed samarth003 closed 8 years ago

samarth003 commented 9 years ago

Hi, I am using arduino-1.5.7 and trying to work with decagon sensors using serial event example code with some modifications to suit my project. The library works great with arduino uno but with arduino due, it gives me the following error message:

home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp: In member function 'void SDI12::setState(uint8_t)': /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:377:32: error: 'digitalPinToPCMSK' was not declared in this scope digitalPinToPCMSK(_dataPin) &= ~(1<<digitalPinToPCMSKbit(_dataPin)); ^ /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:377:71: error: 'digitalPinToPCMSKbit' was not declared in this scope digitalPinToPCMSK(_dataPin) &= ~(1<<digitalPinToPCMSKbit(_dataPin)); ^ /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:389:29: error: 'digitalPinToPCICR' was not declared in this scope digitalPinToPCICR(_dataPin) |= (1<<digitalPinToPCICRbit(_dataPin)); ^ /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:389:67: error: 'digitalPinToPCICRbit' was not declared in this scope digitalPinToPCICR(_dataPin) |= (1<<digitalPinToPCICRbit(_dataPin)); ^ /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:390:32: error: 'digitalPinToPCMSK' was not declared in this scope digitalPinToPCMSK(_dataPin) |= (1<<digitalPinToPCMSKbit(_dataPin)); ^ /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:390:70: error: 'digitalPinToPCMSKbit' was not declared in this scope digitalPinToPCMSK(_dataPin) |= (1<<digitalPinToPCMSKbit(_dataPin)); ^ /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:394:31: error: 'digitalPinToPCMSK' was not declared in this scope digitalPinToPCMSK(_dataPin) &= ~(1<<digitalPinToPCMSKbit(_dataPin)); ^ /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:394:70: error: 'digitalPinToPCMSKbit' was not declared in this scope digitalPinToPCMSK(_dataPin) &= ~(1<<digitalPinToPCMSKbit(_dataPin)); ^ /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:396:32: error: 'digitalPinToPCICR' was not declared in this scope digitalPinToPCICR(_dataPin) &= ~(1<<digitalPinToPCICRbit(_dataPin)); ^ /home/bmubuntu/Arduino/libraries/Arduino-SDI-12-master/SDI12.cpp:396:71: error: 'digitalPinToPCICRbit' was not declared in this scope digitalPinToPCICR(_dataPin) &= ~(1<<digitalPinToPCICRbit(_dataPin)); ^

I am a newbie to the arduino board. Please help me in the regard.

Thanks!

Kevin-M-Smith commented 9 years ago

Hi @samarth003, can you try to use an example from the SoftwareSerial library on your DUE board and let me know if it will compile for you? (Both libraries use the statements that appear in the errors.)

samarth003 commented 9 years ago

Hi @Kevin-M-Smith, Thanks for the prompt reply. I tried importing SoftwareSerial library and used its example on the DUE board. It gives me the following error:

/home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:128:2: error: #error This version of SoftwareSerial supports only 20, 16 and 8MHz processors

error This version of SoftwareSerial supports only 20, 16 and 8MHz processors

^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp: In member function 'bool SoftwareSerial::listen()': /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:184:23: error: 'SREG' was not declared in this scope uint8_t oldSREG = SREG; ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:185:9: error: 'cli' was not declared in this scope cli(); ^ In file included from /opt/arduino-1.5.7/hardware/arduino/sam/cores/arduino/Arduino.h:189:0, from /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:43: /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp: In member function 'void SoftwareSerial::setTX(uint8_t)': /opt/arduino-1.5.7/hardware/arduino/sam/variants/arduino_duex/variant.h:62:65: error: invalid conversion from 'Pio' to 'uint8_t {aka unsigned char}' [-fpermissive]

define digitalPinToPort(P) ( g_APinDescription[P].pPort )

                                                             ^

/home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:362:18: note: in expansion of macro 'digitalPinToPort' uint8_t port = digitalPinToPort(tx); ^ /opt/arduino-1.5.7/hardware/arduino/sam/variants/arduino_due_x/variant.h:66:44: error: base operand of '->' is not a pointer

define portOutputRegister(port) ( &(port->PIO_ODSR) )

                                        ^

/home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:363:27: note: in expansion of macro 'portOutputRegister' _transmitPortRegister = portOutputRegister(port); ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp: In member function 'void SoftwareSerial::setRX(uint8_t)': /opt/arduino-1.5.7/hardware/arduino/sam/variants/arduino_duex/variant.h:62:65: error: invalid conversion from 'Pio' to 'uint8_t {aka unsigned char}' [-fpermissive]

define digitalPinToPort(P) ( g_APinDescription[P].pPort )

                                                             ^

/home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:373:18: note: in expansion of macro 'digitalPinToPort' uint8_t port = digitalPinToPort(rx); ^ /opt/arduino-1.5.7/hardware/arduino/sam/variants/arduino_due_x/variant.h:67:44: error: base operand of '->' is not a pointer

define portInputRegister(port) ( &(port->PIO_PDSR) )

                                        ^

/home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:374:26: note: in expansion of macro 'portInputRegister' _receivePortRegister = portInputRegister(port); ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp: In member function 'void SoftwareSerial::begin(long int)': /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:385:31: error: 'table' was not declared in this scope for (unsigned i=0; i<sizeof(table)/sizeof(table[0]); ++i) ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:401:38: error: 'digitalPinToPCICR' was not declared in this scope if (digitalPinToPCICR(_receivePin)) ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:403:78: error: 'digitalPinToPCICRbit' was not declared in this scope digitalPinToPCICR(_receivePin) |= _BV(digitalPinToPCICRbit(_receivePin)); ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:403:79: error: '_BV' was not declared in this scope digitalPinToPCICR(_receivePin) |= _BV(digitalPinToPCICRbit(_receivePin)); ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:404:37: error: 'digitalPinToPCMSK' was not declared in this scope digitalPinToPCMSK(_receivePin) |= _BV(digitalPinToPCMSKbit(_receivePin)); ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:404:78: error: 'digitalPinToPCMSKbit' was not declared in this scope digitalPinToPCMSK(_receivePin) |= _BV(digitalPinToPCMSKbit(_receivePin)); ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp: In member function 'void SoftwareSerial::end()': /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:419:36: error: 'digitalPinToPCMSK' was not declared in this scope if (digitalPinToPCMSK(_receivePin)) ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:420:77: error: 'digitalPinToPCMSKbit' was not declared in this scope digitalPinToPCMSK(_receivePin) &= ~_BV(digitalPinToPCMSKbit(_receivePin)); ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:420:78: error: '_BV' was not declared in this scope digitalPinToPCMSK(_receivePin) &= ~_BV(digitalPinToPCMSKbit(_receivePin)); ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp: In member function 'virtual size_t SoftwareSerial::write(uint8_t)': /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:455:21: error: 'SREG' was not declared in this scope uint8_t oldSREG = SREG; ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:456:7: error: 'cli' was not declared in this scope cli(); // turn off interrupts for a clean txmit ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:460:26: error: 'XMIT_START_ADJUSTMENT' was not declared in this scope tunedDelay(_tx_delay + XMIT_START_ADJUSTMENT); ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp: In member function 'virtual void SoftwareSerial::flush()': /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:503:21: error: 'SREG' was not declared in this scope uint8_t oldSREG = SREG; ^ /home/bmubuntu/Arduino/libraries/SoftwareSerial/SoftwareSerial.cpp:504:7: error: 'cli' was not declared in this scope cli(); ^

checking the SoftwareSerial.h, it is configured for 8,16 and 20MHz processors, so i guess it is not compatible with DUE's ARM processor. Any workaround for this? Is the Arduino-SDI12 lib also made to work with 8,16 and 20 MHz processors?

Thanks!

Kevin-M-Smith commented 9 years ago

I'm not worried about the speed of the ARM chip, but the errors later on (e.g. digitalPinToPCICR not defined) are pretty serious. The library is set up to respond to incoming signals from the sensors by detecting a change of state on the input pin (pin change interrupt / PCINT). It does not appear that the ARM chip uses the same code bindings for creating PCINTs. I will send a note to the Arduino developers mailing list to see if there is a remedy. Thanks for bringing this to my attention, I'll let you know what I find out.

samarth003 commented 9 years ago

Thanks @Kevin-M-Smith, Do let me know where we can go with this.

Kevin-M-Smith commented 9 years ago

Hi @samarth003, my email finally got through the approval process to go out to the developers list.

The responses will come back here: https://groups.google.com/a/arduino.cc/forum/#!topic/developers/4nFR-zx8kZA.

I'll try to monitor the thread to see if anything helpful comes through - but you may also want to track it.

Regards, Kevin

tchkikouna commented 9 years ago

Hello, I have the same error with Arduino DUE. I don't understand the solution that you propose.

here is the error message:

C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:125:2: error: #error This version of SoftwareSerial supports only 20, 16 and 8MHz processors

error This version of SoftwareSerial supports only 20, 16 and 8MHz processors

^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp: In member function 'bool SoftwareSerial::listen()': C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:181:23: error: 'SREG' was not declared in this scope uint8_t oldSREG = SREG; ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:182:9: error: 'cli' was not declared in this scope cli(); ^ In file included from C:\Program Files (x86)\Arduino\hardware\arduino\sam\cores\arduino/Arduino.h:189:0, from C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:43: C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp: In member function 'void SoftwareSerial::setTX(uint8_t)': C:\Program Files (x86)\Arduino\hardware\arduino\sam\variants\arduino_duex/variant.h:62:65: error: invalid conversion from 'Pio' to 'uint8_t {aka unsigned char}' [-fpermissive]

define digitalPinToPort(P) ( g_APinDescription[P].pPort )

                                                             ^

C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:357:18: note: in expansion of macro 'digitalPinToPort' uint8_t port = digitalPinToPort(tx); ^ C:\Program Files (x86)\Arduino\hardware\arduino\sam\variants\arduino_due_x/variant.h:65:44: error: base operand of '->' is not a pointer

define portOutputRegister(port) ( &(port->PIO_ODSR) )

                                        ^

C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:358:27: note: in expansion of macro 'portOutputRegister' _transmitPortRegister = portOutputRegister(port); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp: In member function 'void SoftwareSerial::setRX(uint8_t)': C:\Program Files (x86)\Arduino\hardware\arduino\sam\variants\arduino_duex/variant.h:62:65: error: invalid conversion from 'Pio' to 'uint8_t {aka unsigned char}' [-fpermissive]

define digitalPinToPort(P) ( g_APinDescription[P].pPort )

                                                             ^

C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:368:18: note: in expansion of macro 'digitalPinToPort' uint8_t port = digitalPinToPort(rx); ^ C:\Program Files (x86)\Arduino\hardware\arduino\sam\variants\arduino_due_x/variant.h:66:44: error: base operand of '->' is not a pointer

define portInputRegister(port) ( &(port->PIO_PDSR) )

                                        ^

C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:369:26: note: in expansion of macro 'portInputRegister' _receivePortRegister = portInputRegister(port); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp: In member function 'void SoftwareSerial::begin(long int)': C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:380:31: error: 'table' was not declared in this scope for (unsigned i=0; i<sizeof(table)/sizeof(table[0]); ++i) ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:396:38: error: 'digitalPinToPCICR' was not declared in this scope if (digitalPinToPCICR(_receivePin)) ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:398:78: error: 'digitalPinToPCICRbit' was not declared in this scope digitalPinToPCICR(_receivePin) |= _BV(digitalPinToPCICRbit(_receivePin)); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:398:79: error: '_BV' was not declared in this scope digitalPinToPCICR(_receivePin) |= _BV(digitalPinToPCICRbit(_receivePin)); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:399:37: error: 'digitalPinToPCMSK' was not declared in this scope digitalPinToPCMSK(_receivePin) |= _BV(digitalPinToPCMSKbit(_receivePin)); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:399:78: error: 'digitalPinToPCMSKbit' was not declared in this scope digitalPinToPCMSK(_receivePin) |= _BV(digitalPinToPCMSKbit(_receivePin)); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp: In member function 'void SoftwareSerial::end()': C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:414:36: error: 'digitalPinToPCMSK' was not declared in this scope if (digitalPinToPCMSK(_receivePin)) ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:415:77: error: 'digitalPinToPCMSKbit' was not declared in this scope digitalPinToPCMSK(_receivePin) &= ~_BV(digitalPinToPCMSKbit(_receivePin)); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:415:78: error: '_BV' was not declared in this scope digitalPinToPCMSK(_receivePin) &= ~_BV(digitalPinToPCMSKbit(_receivePin)); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp: In member function 'virtual size_t SoftwareSerial::write(uint8_t)': C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:450:21: error: 'SREG' was not declared in this scope uint8_t oldSREG = SREG; ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:451:7: error: 'cli' was not declared in this scope cli(); // turn off interrupts for a clean txmit ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:455:26: error: 'XMIT_START_ADJUSTMENT' was not declared in this scope tunedDelay(_tx_delay + XMIT_START_ADJUSTMENT); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp: In member function 'virtual void SoftwareSerial::flush()': C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:498:21: error: 'SREG' was not declared in this scope uint8_t oldSREG = SREG; ^ C:\Program Files (x86)\Arduino\libraries\SoftwareSerial\SoftwareSerial.cpp:499:7: error: 'cli' was not declared in this scope cli(); ^ Erreur lors de la compilation.

I would be grateful for your help

Kevin-M-Smith commented 9 years ago

@tchkikouna, at the time there is no solution to this problem.

The library does not currently support the ARM CPU architecture.

The following boards should work: * Arduino Uno (and other ATmega328 boards, like Arduino Duemilanove) * Arduino Mega (and other ATmega2560 boards)

@steve-2 , did I miss any other compatible boards that you know of?