/*
Для урока. Используется драйвер L296 для одного мотора, который крутит вал от верхней точки до нижней.
Урок 1 При включении мотор едит до концевика вверх и останавливается, при нажатии и удержании StartPin мотор едит вниз вверх, отпустили StartPin мотор остановился.
Урок 2 При включении мотор едит до концевика вверх и останавливается, при нажатии и удержании StartPin мотор едит вниз вверх, отпустили StartPin мотор едит до верхнего концевика и останавливается.
Урок 3 (Разбираемся с ds18b20) При включении мотор едит до концевика вверх и останавливается, при нажатии и удержании StartPin и если температура выше "" мотор едит вниз вверх, отпустили StartPin мотор едит до верхнего концевика и останавливается.
Урок 4 При включении мотор едит до концевика вверх и останавливается, при нажатии и удержании StartPin и если температура выше "" и если ExtPin нажат, то мотор едит вниз вверх, отпустили StartPin мотор едит до верхнего концевика и останавливается.
Урок 5 При поломке UpSwitch или DownSwitch включать alarm ledAlarm
Урок 6 при всех условиях должен проехать только например три раза вниз вниз вверх
Потом как нибудь, если время будет, посмотрим дисплей, меню и запись в память.
*/
const byte lSwitch = 3;
const byte rSwitch = 4;
const byte in1 = 2;
const byte in2 = 1;
const int StartPin = 5;
const int Fan = 0; // ledAlarm
const unsigned long limitTimer = 10000;
int state = 0; // -1 - Home, 0 - STOP, 1 - //, 2 - Rechts, 3 - Links, 99 - ALARM
unsigned long timer = 0;
/*
char -128 127 int8_t
byte 0-255 uint8_t
int -32768 32767 int16_t
long -2 123 2 13 int32_t
unsinged int 0 65535 uint16_t
unsigned long 0 4 123
&& and
|| or
*/
void down()
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(Fan, LOW);
}
void up()
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(Fan, LOW);
}
void stop()
{
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
digitalWrite(Fan, HIGH);
}
void setup() {
stop();
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
digitalWrite(Fan, HIGH);
pinMode(Fan, OUTPUT);
pinMode(lSwitch, INPUT_PULLUP);
pinMode(rSwitch, INPUT_PULLUP);
pinMode(StartPin, INPUT_PULLUP);
//state = 1; //-1 nur Home fahrt
}
void loop() {
static int numMove;
switch(state)
{
case -1:
{
if (digitalRead(lSwitch) == HIGH && (millis()-timer <= limitTimer))
{
up();
}
else
{
stop();
state = 0;
if(millis()-timer > limitTimer)
{
state = 99;
}
timer = millis();
}
}
break;
case 1:
case 3:
{
if (digitalRead(lSwitch) == HIGH && (millis()-timer <= limitTimer))
{
up();
}
else
{
stop();
if(millis()-timer > limitTimer)
{
state = 99;
}
else
{
if(state == 1)
{
state = 2;
}
else //3
{
numMove++;
if(numMove < 1) // nach loslassen xFahrt
{
state = 2;
}
else
{
state = 0;
}
}
timer = millis();
}
// state = (state == 1 ? (abc == 3 ? 0 : (ccc == 10 ? 10 : 20)) : (state == 3 ? 0 : 999));
}
}
break;
case 2:
{
if (digitalRead(rSwitch) == HIGH && (millis()-timer <= limitTimer))
{
down();
}
else
{
stop();
if(millis()-timer > limitTimer)
{
state = 99;
}
else
{
stop();
state = 3;
timer = millis();
}
}
}
break;
case 99:
{
//digitalWrite(ledAlarm, LOW);
}
break;
default: //0, 4 ...
if (digitalRead(StartPin) == LOW)
{
numMove = 0;
state = 1;
timer = millis();
}
}
}