"Serial1 not declared in this scope"

Status
Not open for further replies.

Fenichel

Well-known member
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.
 
Yes, each of the .ino and .cpp files is compiled separately, so that an #include only applies within that one file.

Pete
 
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.
 
Status
Not open for further replies.
Back
Top