Hi Rob,
here is the code, for now it’s only an “.ino” file - the full lib will follow.
It demonstrates the use of the I/O options of the board.
Markus
/*
* solarUSBControllerLib v1
*
* --- To compile set the board type to Arduino MEGA 2560 ---
*
* Utilities for solarUSBController board - based on ATmega2560
* Original code by Markus E. Loeffler June 2014
*
* This is free software. You can redistribute it and/or modify it under
* the terms of Creative Commons Attribution 3.0 United States License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/us/
* or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
*
*/
#include <LiquidCrystal.h>
#include <OneWire.h>
#define V_ARDUINO 4.98 // real measured board voltage
#define REDLITE 46
#define GREENLITE 45
#define BLUELITE 44
#define mainPin 35
#define inverterPin 2
#define buzzerPin 36
#define DS18S20_Pin 37
#define ChargerPin 3
#define nextPin 18 //int.3
#define enterPin 19 //int.2
#define slidePin1 34
#define slidePin2 33
LiquidCrystal lcd(27, 26, 22, 23, 24, 25);
OneWire ds(DS18S20_Pin);
void setBackgroundRGB(uint8_t r, uint8_t g, uint8_t b)
{
analogWrite(REDLITE, r);
analogWrite(GREENLITE, g);
analogWrite(BLUELITE, b);
}
void setBuzzer(uint8_t value)
{
digitalWrite(buzzerPin, value);
}
void setCharger(uint8_t value)
{
analogWrite(ChargerPin, value);
}
void setDimmer(uint8_t value)
{
analogWrite(inverterPin, value);
}
void setDisplayText(char* line1,char* line2)
{
lcd.clear();
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
}
void setDisplayText(int line1,int line2)
{
lcd.clear();
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
}
void setRelay(uint8_t state)
{
digitalWrite(mainPin, state);
}
bool isButton1()
{
return digitalRead(nextPin) == HIGH;
}
bool isButton2()
{
return digitalRead(enterPin) == HIGH;
}
int getSlideSwitch()
{
return digitalRead(slidePin1) == HIGH ? 1 : 0 +
digitalRead(slidePin2) == HIGH ? 2 : 0;
}
float getVs()
{
return V_ARDUINO*(analogRead(A11))/1023.*(29200./2200.);
}
float getVb()
{
return V_ARDUINO*(analogRead(A9))/1023.*(14200./2200.);
}
float getAs()
{
return ((V_ARDUINO*(analogRead(A10) -511.5)/1023.)/ -.04);
}
float getAb()
{
return ((V_ARDUINO*(analogRead(A8) -511.5)/1023.)/ -.04);
}
int getMainAmplitude()
{
return analogRead(A14);
}
int getInverterAmplitude()
{
return analogRead(A12);
}
float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
Serial.print("no more sensors on chain, reset search");
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.print("CRC is not valid!");
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment
float Sum = tempRead / 16;
return Sum;
}
void setup()
{
lcd.begin(16, 2);
Serial.begin(115200);
pinMode(inverterPin, OUTPUT);
pinMode(mainPin, OUTPUT);
pinMode(REDLITE, OUTPUT);
pinMode(GREENLITE, OUTPUT);
pinMode(BLUELITE, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(nextPin, INPUT_PULLUP);
pinMode(enterPin, INPUT_PULLUP);
pinMode(slidePin1, INPUT_PULLUP);
pinMode(slidePin2, INPUT_PULLUP);
pinMode(ChargerPin, OUTPUT);
setBuzzer(HIGH);
setRelay(HIGH);
setDimmer(255);
setBackgroundRGB(127,127,127);
setDisplayText("solarUSBControllerLib","SOLAR-TRAP 2014");
Serial.println("Btn1\tBtn2\tSlide\tVs\tVb\tAs\tAb\tMain\tInv\tTemp\n");
delay(100);
setBuzzer(LOW);
}
void loop()
{
Serial.print(isButton1());
Serial.print("\t");
Serial.print(isButton2());
Serial.print("\t");
Serial.print(getSlideSwitch());
Serial.print("\t");
Serial.print(getVs());
Serial.print("\t");
Serial.print(getVb());
Serial.print("\t");
Serial.print(getAs());
Serial.print("\t");
Serial.print(getAb());
Serial.print("\t");
Serial.print(getMainAmplitude());
Serial.print("\t");
Serial.print(getInverterAmplitude());
Serial.print("\t");
Serial.print(getTemp());
Serial.print("\t");
Serial.println();
setDisplayText(analogRead(A12),analogRead(A14));
delay(1000);
}
solarUSBControllerLib.ino (4.56 KB)