Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 5 of 5

Thread: "Serial1 not declared in this scope"

  1. #1
    Member
    Join Date
    Feb 2019
    Location
    Vancouver, BC
    Posts
    25

    "Serial1 not declared in this scope"

    I am trying to interface a Sparkfun particulate-matter sensor (their P/N SEN-15103) to a Teensy 3.2, using Teensyduino 1.48/Arduino 1.88 under Windows 7/64. To verify that the IDE recognizes the Teensy 3.2, I can
    see that Tools/Get Board Info retrieves the correct serial number for the board.

    The code supplied with the sensor for UART communication with the sensor is only a stub, so I filled it out to
    Code:
    /*
     * Copyright (c) 2018, Sensirion AG
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions are met:
     *
     * * Redistributions of source code must retain the above copyright notice, this
     *   list of conditions and the following disclaimer.
     *
     * * Redistributions in binary form must reproduce the above copyright notice,
     *   this list of conditions and the following disclaimer in the documentation
     *   and/or other materials provided with the distribution.
     *
     * * Neither the name of Sensirion AG nor the names of its
     *   contributors may be used to endorse or promote products derived from
     *   this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     * POSSIBILITY OF SUCH DAMAGE.
     */
    
    #include "sensirion_arch_config.h"
    #include "sensirion_uart.h"
    
    /*
     * INSTRUCTIONS
     * ============
     *
     * Implement all functions where they are marked with TODO: implement
     * Follow the function specification in the comments.
     */
    
    /**
     * sensirion_uart_select_port() - select the UART port index to use
     *                                THE IMPLEMENTATION IS OPTIONAL ON SINGLE-PORT
     *                                SETUPS (only one SPS30)
     *
     * Return:      0 on success, an error code otherwise
     */
    int16_t sensirion_uart_select_port(uint8_t port) {
        return 0;
    }
    
    /**
     * sensirion_uart_open() - initialize UART
     *
     * Return:      0 on success, an error code otherwise
     */
    int16_t sensirion_uart_open()
      { Serial1.begin(115200);                                          // problem here
        while (!Serial1)
          {};
        return 0;
      }
    
    /**
     * sensirion_uart_close() - release UART resources
     *
     * Return:      0 on success, an error code otherwise
     */
    int16_t sensirion_uart_close() {
        // TODO: implement
        return 0;
    }
    
    /**
     * sensirion_uart_tx() - transmit data over UART
     *
     * @data_len:   number of bytes to send
     * @data:       data to send
     * Return:      Number of bytes sent or a negative error code
     */
    int16_t sensirion_uart_tx(uint16_t data_len, const uint8_t* Data)
      { // TODO: implement
        for (int I = 1; I <= data_len; I++)
          { Serial1.print(Data[I-1]); }                                                            // problem here
        return data_len;;
      }
    
    /**
     * sensirion_uart_rx() - receive data over UART
     *
     * @data_len:   max number of bytes to receive
     * @data:       Memory where received data is stored
     * Return:      Number of bytes received or a negative error code
     */
    int16_t sensirion_uart_rx(uint16_t max_data_len, uint8_t* Data)
      { for (int I = 1; I <= max_data_len; I++)
          { Data[I-1] = Serial1.read(); }// problem here
        // TODO: implement
        return max_data_len;
      }
    
    /**
     * Sleep for a given number of microseconds. The function should delay the
     * execution for at least the given time, but may also sleep longer.
     *
     * Despite the unit, a <10 millisecond precision is sufficient.
     *
     * @param useconds the sleep time in microseconds
     */
    void sensirion_sleep_usec(uint32_t useconds)
      { delayMicroseconds(useconds);                                  // problem here
        // TODO: implement
      }
    The calling code is bulky and unlikely to be relevant. Also, there may be some run-time problems with trying to read from empty buffers and so forth, but I planned to get this code working, perhaps by inserting extravagant delays, and then to rewrite the whole package. That's irrelevant too; this code never makes it to run time.

    Instead, the compiler reports that neither of the Teensy-specific built-ins (Serial1 and delayMicroseconds) is declared. I don't know what is going on.

    Any suggestion will be appreciated.

  2. #2
    Senior Member
    Join Date
    Nov 2012
    Posts
    1,488
    At the top of the file, add this:
    Code:
    #include <Arduino.h>

    Pete

  3. #3
    Member
    Join Date
    Feb 2019
    Location
    Vancouver, BC
    Posts
    25
    Quote Originally Posted by el_supremo View Post
    At the top of the file, add this:
    Code:
    #include <Arduino.h>

    Pete
    Thanks; that did the trick..

    There is a
    Code:
    #include <Arduino.h>
    line at the top of the main program, but I guess that its scope must be limited to that file.

  4. #4
    Senior Member
    Join Date
    Nov 2012
    Posts
    1,488
    Yes, each of the .ino and .cpp files is compiled separately, so that an #include only applies within that one file.

    Pete

  5. #5
    Senior Member
    Join Date
    Jul 2014
    Posts
    2,898
    Quote Originally Posted by el_supremo View Post
    Yes, each of the .ino and .cpp files is compiled separately, so that an #include only applies within that one file.

    Pete
    Small correction: Using Arduino IDE, .cpp files are compiled separately, but .ino files in directory are concatenated into a single file with "#include Arduino.h" added at top and translated into a single .ino.cpp file.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •