2023-01-22 16:09:48 +00:00
# ifndef ESPMEGA
# define ESPMEGA
2023-08-26 16:16:51 +00:00
# define ANALOG_CARD_ENABLE
2023-01-22 16:09:48 +00:00
# include <Arduino.h>
# include <Wire.h>
# include <Adafruit_PWMServoDriver.h>
# include <PCF8574.h>
2023-09-28 07:22:19 +00:00
# include <FRAM.h>
2023-09-16 09:44:07 +00:00
# include <TimeLib.h>
# include <DS1307RTC.h>
2023-09-28 06:57:51 +00:00
# include <time.h>
# ifdef ANALOG_CARD_ENABLE
# include <Adafruit_ADS1X15.h>
# include <MCP4725.h>
2023-08-26 16:16:51 +00:00
# endif
2023-01-22 16:09:48 +00:00
2023-12-30 07:32:40 +00:00
# warning "The procedural ESPMega library does not support installing card. If you want to use the card system, please use the OOP version of the library."
2023-08-26 04:31:28 +00:00
# define INPUT_BANK_A_ADDRESS 0x21
2023-08-26 05:47:28 +00:00
# define INPUT_BANK_B_ADDRESS 0x22
# define PWM_BANK_ADDRESS 0x5F
2023-09-09 15:44:08 +00:00
# define RTC_ADDRESS 0x68
2023-08-27 16:42:08 +00:00
# define ANALOG_INPUT_BANK_A_ADDRESS 0x48
# define ANALOG_INPUT_BANK_B_ADDRESS 0x49
# define DAC0_ADDRESS 0x60
# define DAC1_ADDRESS 0x61
# define DAC2_ADDRESS 0x62
# define DAC3_ADDRESS 0x63
2023-09-28 07:22:19 +00:00
# define FRAM_ADDRESS 0x56
2023-09-09 15:44:08 +00:00
2023-01-22 16:09:48 +00:00
//#define USE_INTERRUPT
2023-08-26 05:47:28 +00:00
# define INPUT_BANK_A_INTERRUPT 36
# define INPUT_BANK_B_INTERRUPT 39
2023-09-28 07:22:19 +00:00
extern FRAM ESPMega_FRAM ;
2023-09-28 06:57:51 +00:00
# define ESPMega_configNTP configTime
2023-09-16 09:44:07 +00:00
struct rtctime_t {
uint8_t hours ;
uint8_t minutes ;
uint8_t seconds ;
uint8_t day ;
uint8_t month ;
uint16_t year ;
} ;
2023-01-22 16:09:48 +00:00
/**
* Initiate ESPMega PRO Internal Components
*
* This function will initiate the PWM bank , Input banks , and the EEPROM .
*/
void ESPMega_begin ( ) ;
/**
* Run ESPMega PRO Internal Routines
*
* This function must be called regularly for the correct
* operation of the ESPMega !
*/
void ESPMega_loop ( ) ;
/**
* Read one of the ESPMega ' s Digital Input pins ( I0 - I15 )
*
* @ param id The number of the pin to be read
* @ return The state of the pin ( HIGH / LOW )
*/
bool ESPMega_digitalRead ( int id ) ;
/**
* Write a pulse wave modulated signal to one of the ESPMega ' s
* PWM pins ( P0 - P15 )
*
* @ param id The number of the pin to write to
* @ param value the " HIGH " duty cycle of the PWM wave ( 0 - 4095 )
*/
void ESPMega_analogWrite ( int id , int value ) ;
/**
* Write a digital signal to one of the ESPMega ' s
* PWM pins ( P0 - P15 )
*
* @ param id The number of the pin to write to
* @ param value the new state for the pin ( HIGH / LOW )
*/
void ESPMega_digitalWrite ( int id , bool value ) ;
void IRAM_ATTR refreshInputBankA ( ) ;
void IRAM_ATTR refreshInputBankB ( ) ;
2023-09-16 09:44:07 +00:00
/**
* Get time from the onboard RTC as a struct
*
* @ return Time Element Struct
*/
rtctime_t ESPMega_getTime ( ) ;
/**
* Set the onboard RTC ' s time
*
* @ param hours
* @ param minutes
* @ param seconds
* @ param day Day of the month
* @ param month Month in numerical form
* @ param year Years in AD
*/
void ESPMega_setTime ( int hours , int minutes , int seconds , int day , int month , int year ) ;
2023-09-28 06:57:51 +00:00
/**
* Update the onboard RTC ' s time
* by using time from the NTP server
* configured with ESPMega_configNTP ( ) ;
* @ return true when updated successfully .
*/
bool ESPMega_updateTimeFromNTP ( ) ;
2023-08-26 16:16:51 +00:00
# ifdef ANALOG_CARD_ENABLE
/**
* Read one of the ESPMega Analog Card ' s Analog Input pins ( A0 - A7 )
*
* @ param id The number of the pin to be read
* @ return The value of the pin ( 0 - 4095 )
*/
2023-08-27 16:42:08 +00:00
int16_t ESPMega_analogRead ( int id ) ;
/**
* Write a True Analog Signal to one of the ESPMega Analog Card ' s
* Analog Output pins ( AO0 - AO3 )
*
* @ param id The number of the pin to write to
* @ param value the analog value of the pin ( 0 - 4095 )
*/
void ESPMega_dacWrite ( int id , int value ) ;
2023-08-26 16:16:51 +00:00
# endif
2023-01-22 16:09:48 +00:00
# endif