/*
PINS */
#define MOTOR_DIR 5
#define MOTOR_EN 6
#define HEATER_EN 7
#define NTC1 A0
#define NTC2 A1
#define FULL 13
#define BUTTON 12
#define FAIL_X 9
#define OK_X 8
#define OK_PAUSE 4
#define DRY_NOIDEA 10
#define COOL_FILTER 3
#define END_FULL 2
/*
Configuration */
int max_temp = 510;
int min_temp = max_temp - 150;
void lightPlay( int spins )
{
for( int x=0;x
digitalWrite(OK_X, 0);
digitalWrite(FAIL_X, 1);
digitalWrite(DRY_NOIDEA,
1); digitalWrite(END_FULL, 0);
delay(100);
digitalWrite(END_FULL,
1);digitalWrite(COOL_FILTER, 0);
delay(100);
digitalWrite(COOL_FILTER, 1);
digitalWrite(DRY_NOIDEA, 0);
delay(100);
digitalWrite(OK_X,
1);
digitalWrite(FAIL_X, 0);
delay(100);
digitalWrite(DRY_NOIDEA,
1);digitalWrite(COOL_FILTER, 0);
delay(100);
digitalWrite(COOL_FILTER, 1);
digitalWrite(END_FULL, 0);
delay(100);
}
}
#define LED_OK 0x10
#define LED_DRYING (0x1 |
LED_OK)
#define LED_COOLING (0x2 | LED_OK)
#define LED_END (0x4 |
LED_OK)
#define LED_PAUSED (0x8 |
LED_OK)
#define LED_FAN (0x2
| LED_OK)
#define LED_FAN_HEAT (0x3
| LED_OK)
#define LED_NOIDEA 0x1
#define LED_FILTER 0x2
#define LED_FULL 0x4
void set_led_status( int led_status )
{
if( led_status & LED_OK ) {
digitalWrite(OK_X, 0);
digitalWrite(FAIL_X, 1);
}
else {
digitalWrite(OK_X, 1);
digitalWrite(FAIL_X, 0);
}
digitalWrite(DRY_NOIDEA, led_status&1 ? 0 : 1);
digitalWrite(COOL_FILTER, led_status&2 ?0 : 1);
digitalWrite(END_FULL,led_status&4 ? 0 : 1 );
digitalWrite(OK_PAUSE, led_status&8 ? 0 : 1);
}
void setup()
{
Serial.begin(9600);
pinMode(MOTOR_DIR,
OUTPUT);
pinMode(MOTOR_EN, OUTPUT);
pinMode(HEATER_EN, OUTPUT);
pinMode(NTC1, INPUT);
pinMode(NTC1, INPUT);
pinMode(FULL, INPUT);
pinMode(BUTTON, INPUT);
pinMode(FAIL_X,
OUTPUT);
pinMode(OK_X, OUTPUT);
pinMode(OK_PAUSE,
OUTPUT);
pinMode(DRY_NOIDEA, OUTPUT);
pinMode(COOL_FILTER, OUTPUT);
pinMode(END_FULL, OUTPUT);
/* All lights off */
digitalWrite(OK_X, 0);
digitalWrite(FAIL_X, 1);
digitalWrite(OK_PAUSE, 1);
digitalWrite(END_FULL, 1);
digitalWrite(COOL_FILTER, 1);
digitalWrite(DRY_NOIDEA, 1);
Serial.println("Hello");
lightPlay( 5 );
}
typedef enum {
UNDEFINED,
READY,
RUN,
RUN_SPIN_HEAT,
RUN_SPIN_NO_HEAT,
FULL_PAUSE,
REFRESH_SPIN_NO_HEAT,
}
STATE;
STATE
state = UNDEFINED;
int ntc1;
int ntc2;
int full;
int button_up;
int button_last;
int duration = 0;
void enter_ready()
{
set_led_status( LED_PAUSED );
digitalWrite(HEATER_EN, 0);
digitalWrite(MOTOR_DIR, 0);
digitalWrite(MOTOR_EN, 0 );
}
void enter_run()
{
set_led_status( LED_FAN );
digitalWrite(HEATER_EN, 0);
digitalWrite(MOTOR_DIR, 0);
digitalWrite(MOTOR_EN, 1 );
}
void enter_run_spin_heat()
{
digitalWrite(HEATER_EN, 1);
set_led_status( LED_FAN_HEAT );
}
void enter_run_spin_no_heat()
{
digitalWrite(HEATER_EN, 0);
set_led_status( LED_FAN );
}
void enter_full_pause()
{
digitalWrite(HEATER_EN, 0);
digitalWrite(MOTOR_DIR, 0);
digitalWrite(MOTOR_EN, 0 );
set_led_status( LED_FULL );
}
void enter_refresh_spin_no_heat()
{
digitalWrite(HEATER_EN, 0);
digitalWrite(MOTOR_DIR, 0);
digitalWrite(MOTOR_EN, 1 );
set_led_status( LED_FAN | LED_END );
}
int do_ready()
{
if( full ) {
return FULL_PAUSE;
}
if( button_up ) {
return RUN;
}
return state;
}
int do_run()
{
if( button_up ) {
return REFRESH_SPIN_NO_HEAT;
}
if( duration > 3 ) {
if( full ) {
return FULL_PAUSE;
}
else {
if( ntc1 < max_temp ){
return RUN_SPIN_HEAT;
}else {
return RUN_SPIN_NO_HEAT;
}
}
}
return state;
}
int do_run_spin_heat()
{
if( full ) {
return RUN;
}
if( button_up ) {
return REFRESH_SPIN_NO_HEAT;
}
if( ntc1 > max_temp ) {
return RUN_SPIN_NO_HEAT;
}
return state;
}
int do_run_spin_no_heat()
{
if( full ) {
return RUN;
}
if( button_up ) {
return REFRESH_SPIN_NO_HEAT;
}
if( ntc1 < min_temp ) {
return RUN_SPIN_HEAT;
}
return state;
}
int do_full_pause()
{
if( button_up && !full ) {
return RUN;
}
return state;
}
int do_refresh_spin_no_heat()
{
if( button_up ) {
return READY;
}
if( duration > 10*60 ) {
return READY;
}
return state;
}
void loop()
{
ntc1
= analogRead( NTC1 );
ntc2
= analogRead( NTC2 );
full
= digitalRead( FULL );
/* Handle State */
int new_state;
switch( state )
{
case READY:
new_state = do_ready();
break;
case RUN:
new_state = do_run();
break;
case RUN_SPIN_HEAT:
new_state = do_run_spin_heat();
break;
case RUN_SPIN_NO_HEAT:
new_state = do_run_spin_no_heat();
break;
case FULL_PAUSE:
new_state = do_full_pause();
break;
case REFRESH_SPIN_NO_HEAT:
new_state = do_refresh_spin_no_heat();
break;
case UNDEFINED:
default:
new_state = READY;
break;
}
/*
Handle State transition */
if( new_state != state )
{
switch( new_state )
{
case READY:
enter_ready();
break;
case RUN:
enter_run();
break;
case RUN_SPIN_HEAT:
enter_run_spin_heat();
break;
case RUN_SPIN_NO_HEAT:
enter_run_spin_no_heat();
break;
case FULL_PAUSE:
enter_full_pause();
break;
case REFRESH_SPIN_NO_HEAT:
enter_refresh_spin_no_heat();
break;
default:
break;
}
state = new_state;
duration = 0;
}
button_up = 0;
for(int i=0;i
int button =
digitalRead( BUTTON );
button_up |= ( button==0 && button_last == 1 );
button_last = button;
delay(100);
if( button_up ) {
break;
}
}
Serial.print(state);Serial.print("\t");
Serial.print(ntc1);Serial.print("\t");
Serial.print(ntc2);Serial.print("\t");
Serial.print(full);Serial.print("\t");
Serial.print(button_up);Serial.print("\n");
duration++;
}
Hello my friend.
ReplyDeleteI'm triing to upload your code to a nano but I get error messages. I'm a very very starter in arduino, but I got a very closely match dryer like yours. My control board is dead too, so I want to replace it with arduino. Can you help me please?
I paste here the error code:
ReplyDeleteC:\Users\Z570\Documents\Arduino\sketch_oct27a\sketch_oct27b\sketch_oct27b.ino: In function 'void lightPlay(int)':
sketch_oct27b:24: error: expected ';' before 'digitalWrite'
digitalWrite(OK_X, 0);
^
sketch_oct27b:24: error: expected ')' before ';' token
digitalWrite(OK_X, 0);
^
C:\Users\Z570\Documents\Arduino\sketch_oct27a\sketch_oct27b\sketch_oct27b.ino: At global scope:
sketch_oct27b:44: error: expected declaration before '}' token
}
^
exit status 1
expected ';' before 'digitalWrite'