Home | Community | Message Board


This site includes paid links. Please support our sponsors.


Welcome to the Shroomery Message Board! You are experiencing a small sample of what the site has to offer. Please login or register to post messages and view our exclusive members-only content. You'll gain access to additional forums, file attachments, board customizations, encrypted private messages, and much more!

Shop: North Spore North Spore Mushroom Grow Kits & Cultivation Supplies   Sporeworks.EU Spores for European Microscopy   Myyco.com Golden Teacher Liquid Culture For Sale

Jump to first unread post Pages: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
Some of these posts are very old and might contain outdated information. You may wish to search for newer posts instead.
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26281526 -

Finished the code:
Code:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <EEPROM.h>
#include <avr/wdt.h>

//Uncomment if you are in USA
//#define Fahrenheit

#define POLL_COUNT (4)
#define POLL_BASE (60)

const int RELAY = 0;
const int MODE = 9, UP = 12, DOWN = 11, SELECT = 10;

//CRC-8 (x^8 + x^5 + x^4 + 1) lookup table
static const byte CRC_8_TABLE[256] =
{
0x00, 0x31, 0x62, 0x53, 0xC4, 0xF5, 0xA6, 0x97, 0xB9, 0x88, 0xDB, 0xEA, 0x7D, 0x4C, 0x1F, 0x2E,
0x43, 0x72, 0x21, 0x10, 0x87, 0xB6, 0xE5, 0xD4, 0xFA, 0xCB, 0x98, 0xA9, 0x3E, 0x0F, 0x5C, 0x6D,
0x86, 0xB7, 0xE4, 0xD5, 0x42, 0x73, 0x20, 0x11, 0x3F, 0x0E, 0x5D, 0x6C, 0xFB, 0xCA, 0x99, 0xA8,
0xC5, 0xF4, 0xA7, 0x96, 0x01, 0x30, 0x63, 0x52, 0x7C, 0x4D, 0x1E, 0x2F, 0xB8, 0x89, 0xDA, 0xEB,
0x3D, 0x0C, 0x5F, 0x6E, 0xF9, 0xC8, 0x9B, 0xAA, 0x84, 0xB5, 0xE6, 0xD7, 0x40, 0x71, 0x22, 0x13,
0x7E, 0x4F, 0x1C, 0x2D, 0xBA, 0x8B, 0xD8, 0xE9, 0xC7, 0xF6, 0xA5, 0x94, 0x03, 0x32, 0x61, 0x50,
0xBB, 0x8A, 0xD9, 0xE8, 0x7F, 0x4E, 0x1D, 0x2C, 0x02, 0x33, 0x60, 0x51, 0xC6, 0xF7, 0xA4, 0x95,
0xF8, 0xC9, 0x9A, 0xAB, 0x3C, 0x0D, 0x5E, 0x6F, 0x41, 0x70, 0x23, 0x12, 0x85, 0xB4, 0xE7, 0xD6,
0x7A, 0x4B, 0x18, 0x29, 0xBE, 0x8F, 0xDC, 0xED, 0xC3, 0xF2, 0xA1, 0x90, 0x07, 0x36, 0x65, 0x54,
0x39, 0x08, 0x5B, 0x6A, 0xFD, 0xCC, 0x9F, 0xAE, 0x80, 0xB1, 0xE2, 0xD3, 0x44, 0x75, 0x26, 0x17,
0xFC, 0xCD, 0x9E, 0xAF, 0x38, 0x09, 0x5A, 0x6B, 0x45, 0x74, 0x27, 0x16, 0x81, 0xB0, 0xE3, 0xD2,
0xBF, 0x8E, 0xDD, 0xEC, 0x7B, 0x4A, 0x19, 0x28, 0x06, 0x37, 0x64, 0x55, 0xC2, 0xF3, 0xA0, 0x91,
0x47, 0x76, 0x25, 0x14, 0x83, 0xB2, 0xE1, 0xD0, 0xFE, 0xCF, 0x9C, 0xAD, 0x3A, 0x0B, 0x58, 0x69,
0x04, 0x35, 0x66, 0x57, 0xC0, 0xF1, 0xA2, 0x93, 0xBD, 0x8C, 0xDF, 0xEE, 0x79, 0x48, 0x1B, 0x2A,
0xC1, 0xF0, 0xA3, 0x92, 0x05, 0x34, 0x67, 0x56, 0x78, 0x49, 0x1A, 0x2B, 0xBC, 0x8D, 0xDE, 0xEF,
0x82, 0xB3, 0xE0, 0xD1, 0x46, 0x77, 0x24, 0x15, 0x3B, 0x0A, 0x59, 0x68, 0xFF, 0xCE, 0x9D, 0xAC
};

Adafruit_SSD1306 display(128, 32, &Wire, 4);

float result;
byte low, high;
unsigned int rawResult;
byte bufferRaw[3], CRC;
int loopCounter, mode, selectRow, index, relayOutput;
int modeCount, upCount, downCount, selectCount;
bool modePressed, upPressed, downPressed, selectPressed;

void setup() {
pinMode(RELAY, OUTPUT);
pinMode(MODE, INPUT_PULLUP);
pinMode(UP, INPUT_PULLUP);
pinMode(DOWN, INPUT_PULLUP);
pinMode(SELECT, INPUT_PULLUP);

low = EEPROM.read(0);
high = EEPROM.read(1);
if(255 == low) low = 40;
if(255 == high) high = 50;
relayOutput = 0; //Default is off
loopCounter = 0;
mode = 0, selectRow = 0;
modeCount = POLL_BASE, upCount = POLL_BASE, downCount = POLL_BASE, selectCount = POLL_BASE;

Wire.begin();
Wire.setClock(10000);

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.cp437(true);

wdt_enable(WDTO_4S);
}

void loop() {
pollButtons();
loopCounter++;
delay(10);

processMode();
processSelect();
processUp();
processDown();

if(40 != loopCounter) return;
loopCounter = 0;
wdt_reset();

display.clearDisplay();
if(0 == mode) processMainScreen();
if(1 == mode) processSetupScreen();
display.display();
}

void processMode() {
if(!modePressed) return;

modePressed = false;
if(0 == mode) {
mode = 1;
return;
}
if(1 == mode) {
mode = 0;
if(low != EEPROM.read(0)) EEPROM.write(0, low);
if(high != EEPROM.read(1)) EEPROM.write(1, high);
return;
}
}

void pollButtons() {
//----Mode button-----------------------------------
if(LOW == digitalRead(MODE)) modeCount++;
else modeCount = POLL_BASE;

if((POLL_BASE + POLL_COUNT) <= modeCount)
{
modePressed = true;
modeCount = 0;
}

//----Up button-------------------------------------
if(LOW == digitalRead(UP)) upCount++;
else upCount = POLL_BASE;

if((POLL_BASE + POLL_COUNT) <= upCount)
{
upPressed = true;
upCount = 0;
}

//----Down button-----------------------------------
if(LOW == digitalRead(DOWN)) downCount++;
else downCount = POLL_BASE;

if((POLL_BASE + POLL_COUNT) <= downCount)
{
downPressed = true;
downCount = 0;
}

//----Select button---------------------------------
if(LOW == digitalRead(SELECT)) selectCount++;
else selectCount = POLL_BASE;

if((POLL_BASE + POLL_COUNT) <= selectCount)
{
selectPressed = true;
selectCount = 0;
}
}

void processUp() {
if(!upPressed) return;
upPressed = false;
if(0 == mode) return;

if(0 == selectRow) {
high++;
if(101 <= high) high = 0;
}
else {
low++;
if(101 <= low) low = 0;
}
}

void processDown() {
if(!downPressed) return;
downPressed = false;
if(0 == mode) return;

if(0 == selectRow) {
high--;
if(255 == high) high = 100;

}
else {
low--;
if(255 == low) low = 100;
}
}

void processSelect() {
if(!selectPressed) return;

selectPressed = false;
if(0 == mode) selectRow = 0;
if(1 == mode) {
if(0 == selectRow) {
selectRow = 1;
return;
}
if(1 == selectRow) {
selectRow = 0;
return;
}
}
}

void processMainScreen() {
getRH();

if(low > result) relayOutput = 1;
if(high < result) relayOutput = 0;
digitalWrite(RELAY, relayOutput);

getTemperature();
}

void processSetupScreen() {
display.setCursor(100, selectRow * 16);
display.print((char)27);

display.setCursor(0, 0);
display.print(F("H: "));
display.print(high);

display.setCursor(0, 16);
display.print(F("L: "));
display.print(low);
}

void getRH() {
//Triggering RH measurement
Wire.beginTransmission(0x40);
Wire.write(0xE5);
Wire.endTransmission();

//Requesting result (3 bytes: 2 bytes for value and 1 for checksum)
Wire.requestFrom(0x40, 3);
index = 2;
while(Wire.available()) {
bufferRaw[index] = Wire.read();
if(0 == index) {
//Trying to display result if it's correct
showRH();
break;
}
index--;
}
}

void getTemperature() {
//Triggering temperature measurement
Wire.beginTransmission(0x40);
Wire.write(0xE3);
Wire.endTransmission();

//Requesting result (3 bytes: 2 bytes for value and 1 for checksum)
Wire.requestFrom(0x40, 3);
index = 2;
while(Wire.available()) {
bufferRaw[index] = Wire.read();
if(0 == index) {
//Trying to display result if it's correct
showTemperature();
break;
}
index--;
}
}

void showRH() {
display.setCursor(10, 0);
if(checkChecksum(bufferRaw[2], bufferRaw[1], bufferRaw[0])) {
rawResult = (bufferRaw[2] << 8) | (bufferRaw[1] & B11111100);
result = rawResult * 125.0 / 65536.0 - 6.0;
display.print(F("RH:"));
display.print(result, 1);
display.print(F("%"));
}
else
display.print(F("RH: error"));
}

void showTemperature() {
display.setCursor(10, 16);
if(checkChecksum(bufferRaw[2], bufferRaw[1], bufferRaw[0])) {
rawResult = (bufferRaw[2] << 8) | (bufferRaw[1] & B11111100);
result = rawResult * 175.72 / 65536.0 - 46.85;

#ifdef Fahrenheit
result = result * 1.8 + 32.0;
#endif

display.print(F(" T:"));
display.print(result, 1);

#ifdef Fahrenheit
display.print(F("F"));
#else
display.print(F("C"));
#endif
}
else
display.print(F("Temp: error"));
}

bool checkChecksum(byte MSB, byte LSB, byte checksum) {
CRC = 0;
CRC = CRC_8_TABLE[CRC ^ MSB];
CRC = CRC_8_TABLE[CRC ^ LSB];
if(CRC == checksum) return true;
return false;
}



It remembers set-point values even when power is off. It will self-recover in case of power failure.
Here I specified 71-30 range, meaning that once RH reaches over 71% -- it will be off.
To be back on -- it needs to lower less than 30%.


I did not find any 5V relay around, so I soldered LED to D0 pin.
You can see it is ON now as it is really dry in my room, less than 20% and less than 30% low range set up on previous picture. In real situation the relay would be on and mist-making device be pumping up moisture into the chamber.


I covered sensor with my finger to use my body wetness to increase RH, it went over 71% high range set up on the first picture, meaning humidity is enough and mist-making device must be off (light is off).

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26281527 -

(this did not fit into previous post)

The 71-30 range is just to test it easily, it can be any provided that low value is lower than higher value.
At this point the program is done unless we find some bugs. We can really focus on sensor "siliconing" and testing.

Please ask me if you don't understand anything in the code or about soldering things on shield.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26283172 -

If I have a problem I will be sure to ask. As of now the only thing I am not sure of is how the buttons hook up does it matter how they go in the board? And the bottom legs all connect togeather?

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: SHROOMSISAY01]
    #26283198 -

I just no noticed the green led what does that do?

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: SHROOMSISAY01]
    #26283204 -

Duh, I see it shows when the relay is on.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: SHROOMSISAY01]
    #26283667 -

Green LED is just something instead of relay, because I don't have 5V relay at hand.
I'll post full schematic now.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26283701 -

See if you can make sense of it:

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26283706 -

Wow, dude nice that makes it so easy. That's cheating. Now I feel guilty!

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26283712 -

So where it says "Connect Relay here" is the signal that toggles 0-5V.
I connected it to LED, you connect it to your Relay. You will need 3 pins: 5V, GND and signal.

P.S. I came home and first thing ordered potting compound, 5 sensors with caps and 5V relay. So soon I be ready to go into it very seriously.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26283720 -

Awesome my friend I can't tell you how much I appreciate you!! I forgot I have a doctor's appointment tomorrow at 8:45 and it is 2:30 I got to get to bed it's probably not a good idea to miss my appointment tomorrow after having a heart attack.

Thanks again you are awesome!! I will be working on this all day tomorrow or however long it takes.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26283722 -

Yes, don't mess with doctors. Health is always first, then mushrooms, then women.
Without health nothing follows.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26283734 -

Just noticed that Arduino Uno that I used in schematic is version R2, ours is R3.
The difference is that our R3 has extra 2 pins on each side -- above RESET and above AREV, the rest is the same. It should not be a problem as we do not use those pins anyway. So, just be careful, don't use them by counting from top, use them by their names.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26283736 -

Got ya thank you!!

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: SHROOMSISAY01]
    #26286127 -

Are the symbols in the red boxes telling me to hook to ground?...


Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: SHROOMSISAY01]
    #26286138 -

Yes, these all must be connected to GND of the board/shield.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26286143 -

Thanks for the quick reply.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: SHROOMSISAY01]
    #26286189 -

One more question. I don't see any marking and the pushbuttons. How do I know how to place them on the board? I am sure it makes a difference.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: SHROOMSISAY01]
    #26286197 -

sorry for the dumb question I used a multimeter. I made sure that 1 and 3 pins are not connected until the button is pressed.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: SHROOMSISAY01]
    #26286199 -

Yes, that is the problem and I initially placed SELECT button wrong -- the arrow on the right of the screen was constantly moving.

So you will see if you placed it wrong -- button's function will be always in action, repeating.

I used my multimeter to check, also my button legs are in vertical direction:

| |
o
| |

The button that I placed wrong was (it it makes sense):
- -
o
- -

But that can be different in your case.

Extras: Filter Print Post Top
Re: !!Arduino programer needed!! [Re: bogdancev]
    #26286201 -

Yes, multimeter is a better way.

Extras: Filter Print Post Top
Jump to top Pages: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |

Shop: North Spore North Spore Mushroom Grow Kits & Cultivation Supplies   Sporeworks.EU Spores for European Microscopy   Myyco.com Golden Teacher Liquid Culture For Sale


Similar ThreadsPosterViewsRepliesLast post
* I need some type of medicinal mushroom... Ichydai 4,668 12 10/15/02 07:14 AM
by Anonymous
* Help! Pure agar cultures needed. Some trades available! Basidiocarp 4,441 17 01/26/04 07:53 AM
by ChromeCrow
* We need one or two mods for this forum. ThorA 1,728 12 09/26/02 11:51 AM
by psyconaut
* In need of pink oyster spores colors 3,301 7 09/07/02 07:28 PM
by colors
* i need a pic of a yellow morel plate please ChromeCrow 2,310 10 11/22/03 11:11 AM
by FocusHawaii
* Gourmet/Edible Cultures Needed. Joshua 2,127 6 02/10/04 02:42 AM
by Zen Peddler
* Just Recieved Cultures - need ID Joshua 1,513 15 03/10/04 12:50 PM
by Joshua
* Advice Needed For Sending Cultures Jackal 2,122 14 03/26/03 06:10 PM
by FocusHawaii

Extra information
You cannot start new topics / You cannot reply to topics
HTML is disabled / BBCode is enabled
Moderator: RogerRabbit, cronicr, Pastywhyte, Forrester, Stromrider, SHROOMSISAY01
7,495 topic views. 0 members, 52 guests and 4 web crawlers are browsing this forum.
[ Show Images Only | Sort by Score | Print Topic ]
Search this thread:

Copyright 1997-2026 Mind Media. Some rights reserved.

Generated in 0.032 seconds spending 0.008 seconds on 17 queries.