No a o tom píši, a ne jedinej,
v setup() doplň , nikde to tam nevidím
Kód: Vybrat vše
//Nastavení STOP pro motor
digitalWrite(CloseDoorPin, LOW);
digitalWrite(OpenDoorPin, LOW);
No a o tom píši, a ne jedinej,
Kód: Vybrat vše
//Nastavení STOP pro motor
digitalWrite(CloseDoorPin, LOW);
digitalWrite(OpenDoorPin, LOW);
Kód: Vybrat vše
// darkthreshold 20
// daythreshold = 400
// Define pins & variables
const int EnMotorPin = 9; // enable motor - pin 9 PWM
const int CloseDoorPin = 8; // direction close motor - pin 8
const int OpenDoorPin = 7; // direction open motor - pin 7
const int photocellPin = A0; // photocell connected to analog 0
const long eventTime_1_LDR = 2000; // 2 vteřin
unsigned long previousTime_1 = 0;
int photocellVal; // analog reading of the photocel
bool daylight = true; // daylight status
int darkthreshold = 20;
int daythreshold = 350;
int systemState = 0;
int SPEED = 220;
int bottomSwitchPin = 2; // Reed switches top and bottom of coop door
int topSwitchPin = 4;
bool topSwitchState; // true if door is up
bool bottomSwitchState; // true if door is down
void setup() {
Serial.begin(9600);
pinMode(bottomSwitchPin, INPUT);
pinMode(topSwitchPin, INPUT);
pinMode(EnMotorPin, OUTPUT);
pinMode(CloseDoorPin, OUTPUT);
pinMode(OpenDoorPin, OUTPUT);
digitalWrite(CloseDoorPin, LOW);
digitalWrite(OpenDoorPin, LOW);
}
void loop() {
systemState = 0;
unsigned long currentTime = millis();
if ( currentTime - previousTime_1 >= eventTime_1_LDR)
{
photocellVal = analogRead(photocellPin); // read inputs
previousTime_1 = currentTime;
}
if (photocellVal > daythreshold)
{
daylight = true;
}
if (photocellVal < darkthreshold)
{
daylight = false;
}
topSwitchState = digitalRead(topSwitchPin);
bottomSwitchState = digitalRead(bottomSwitchPin);
// read system status
if (daylight == true && topSwitchState == true)
{
systemState = 0; // motor stop
}
if (daylight == true && topSwitchState == false)
{
systemState = 1; // drive door up
}
if (daylight == false && bottomSwitchState == true)
{
systemState = 0; // motor stop
}
if (daylight == false && bottomSwitchState == false)
{
systemState = 2; // drive door down
}
DispVals();
switch (systemState) {
case 0: // motor stop
digitalWrite(CloseDoorPin, LOW);
digitalWrite(OpenDoorPin, LOW);
analogWrite(EnMotorPin, 0);
break;
case 1: //drive door up
digitalWrite(CloseDoorPin, LOW);
digitalWrite(OpenDoorPin, HIGH);
analogWrite(EnMotorPin, SPEED);
break;
case 2: // drive door down
digitalWrite(CloseDoorPin, HIGH);
digitalWrite(OpenDoorPin, LOW);
analogWrite(EnMotorPin, SPEED);
break;
default:
digitalWrite(CloseDoorPin, LOW);
digitalWrite(OpenDoorPin, LOW);
analogWrite(EnMotorPin, 0);
break;
}
}
void DispVals()
{
Serial.print("topSW ");
Serial.print(topSwitchState);
Serial.print("\t");
Serial.print("botSW ");
Serial.print(bottomSwitchState);
Serial.print("\t");
Serial.print("PhotoVal ");
Serial.print(photocellVal);
Serial.print("\t");
Serial.print("daylight ");
Serial.print(daylight);
Serial.print("\t");
Serial.print("systemState ");
Serial.print(systemState);
Serial.print("\t");
if (systemState == 0)
{
Serial.println("\t door stopped");
}
if (systemState == 1)
{
Serial.println("\t door driving up");
}
if (systemState == 2)
{
Serial.println("\t door driving down");
}
}
Kód: Vybrat vše
// Define pins & variables
const int EnMotorPin = 9; // enable motor - pin 9 PWM
const int CloseDoorPin = 8; // direction close motor - pin 8
const int OpenDoorPin = 7; // direction open motor - pin 7
const int photocellPin = A0; // photocell connected to analog 0
const long eventTime_1_LDR = 20000; // 20 vteřin
unsigned long previousTime_1 = 0;
int photocellVal; // analog reading of the photocel
bool daylight = true; // daylight status
int darkthreshold = 20;
int daythreshold = 350;
int systemState = 0;
int SPEED = 220;
int bottomSwitchPin = 2; // Reed switches top and bottom of coop door
int topSwitchPin = 4;
bool topSwitchState; // true if door is up
bool bottomSwitchState; // true if door is down
void setup() {
Serial.begin(9600);
pinMode(bottomSwitchPin, INPUT);
pinMode(topSwitchPin, INPUT);
pinMode(EnMotorPin, OUTPUT);
pinMode(CloseDoorPin, OUTPUT);
pinMode(OpenDoorPin, OUTPUT);
photocellVal = analogRead(photocellPin); // díky Pavel1TU
digitalWrite(CloseDoorPin, LOW); // díky kiRRow
digitalWrite(OpenDoorPin, LOW);
analogWrite(EnMotorPin, 0);
}
void loop() {
unsigned long currentTime = millis();
if ( currentTime - previousTime_1 >= eventTime_1_LDR)
{
photocellVal = analogRead(photocellPin); // read inputs
previousTime_1 = currentTime;
}
if (photocellVal > daythreshold)
{
daylight = true;
}
if (photocellVal < darkthreshold)
{
daylight = false;
}
topSwitchState = digitalRead(topSwitchPin);
bottomSwitchState = digitalRead(bottomSwitchPin);
// read system status
if (daylight == true && topSwitchState == true)
{
systemState = 0; // motor stop
}
if (daylight == true && topSwitchState == false)
{
systemState = 1; // drive door up
}
if (daylight == false && bottomSwitchState == true)
{
systemState = 0; // motor stop
}
if (daylight == false && bottomSwitchState == false)
{
systemState = 2; // drive door down
}
DispVals();
switch (systemState) {
case 0: // motor stop
digitalWrite(CloseDoorPin, LOW);
digitalWrite(OpenDoorPin, LOW);
analogWrite(EnMotorPin, 0);
break;
case 1: //drive door up
digitalWrite(CloseDoorPin, LOW);
digitalWrite(OpenDoorPin, HIGH);
analogWrite(EnMotorPin, SPEED);
break;
case 2: // drive door down
digitalWrite(CloseDoorPin, HIGH);
digitalWrite(OpenDoorPin, LOW);
analogWrite(EnMotorPin, SPEED);
break;
default:
digitalWrite(CloseDoorPin, LOW);
digitalWrite(OpenDoorPin, LOW);
analogWrite(EnMotorPin, 0);
break;
}
}
void DispVals()
{
Serial.print("topSW ");
Serial.print(topSwitchState);
Serial.print("\t");
Serial.print("botSW ");
Serial.print(bottomSwitchState);
Serial.print("\t");
Serial.print("PhotoVal ");
Serial.print(photocellVal);
Serial.print("\t");
Serial.print("daylight ");
Serial.print(daylight);
Serial.print("\t");
Serial.print("systemState ");
Serial.print(systemState);
Serial.print("\t");
if (systemState == 0)
{
Serial.println("\t door stopped");
}
if (systemState == 1)
{
Serial.println("\t door driving up");
}
if (systemState == 2)
{
Serial.println("\t door driving down");
}
}
Kód: Vybrat vše
// defines pins numbers
// DS3231: SDA A4
// SCL A5
// A4988 step D5
// A4988 direction D6
// Koncák otevřeno D7
// Koncák zavřeno D8
#include <Wire.h>
#include "RTClib.h"
DS3231 rtc;
char daysOfTheWeek[7][12] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"};
const int stepPin = 5;
const int dirPin = 6;
const int koncakOtevreno=7;
const int koncakZavreno=8;
int casOtevreniHod=6;
int casOtevreniMin=30;
int casZavreniHod=19;
int casZavreniMin=0;
int casOtevreni=casOtevreniHod*60+casOtevreniMin;
int casZavreni=casZavreniHod*60+casZavreniMin;
int aktualniCas;
void otevri(){
Serial.println("oteviram dvere");
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation, M5 závit má stoupání 0,8mm/otáčku, potřebuji 250 otáček = 250*200= 50000 pulzů
for(int x = 0; x < 50000; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
}
void zavri(){
Serial.println("zaviram dvere");
digitalWrite(dirPin,LOW); //Changes the rotations direction
// Makes 200 pulses for making one full cycle rotation
for(int x = 0; x < 50000; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
}
void setup() {
Serial.begin(9600);
delay(3000);
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
DS3231 rtc; // inicializace RTC z knihovny
pinMode(stepPin,OUTPUT); //Nastavení pinů pro krokový motor jako výstup
pinMode(dirPin,OUTPUT);
pinMode(koncakOtevreno, INPUT_PULLUP);
pinMode(koncakZavreno, INPUT_PULLUP);
}
void loop() {
DateTime now = rtc.now();
aktualniCas=now.hour()*60+now.minute(); //převedení aktuálního čas z hodin a minut na pouze minuty
if(aktualniCas>=casOtevreni && aktualniCas<=casZavreni)
{
if (digitalRead(koncakZavreno) == LOW)
{
otevri();
delay(3000);
}
else
{
delay(3000);
}
}
else if(aktualniCas>casZavreni || aktualniCas<casOtevreni)
{
if (digitalRead(koncakOtevreno) == LOW)
{
zavri();
delay(3000);
}
else
{
delay(3000);
}
}
delay(1000); // One second delay
}
Já jsem programátor samouk - vycházím z "Reference" na arduino.cc - abych se přiznal, bool jsem u digitalRead nikdy nepoužil i když to evidentně jde.kiRRow píše: ↑03 kvě 2020, 10:51Zaujalo mě to stím int a digitalRead. Já osobně datový typ volím dle očekávané velikosti informace, které tam budou. Když čtu digitalRead, očekávám 0 nebo 1 (nic jiného ani nemůže být) a logicky proto zvolím datový typ boolean.
I když v příkladech na arduino.cc používají int, osobně si myslím, že spíš jen z důvodu aby nepletli nováčkům hlavy s tím, že jsou ještě jiné datové typy. Si vemte ... kde v jakém example příkladě jste viděli #define ... čísla pinů jsou zapsaná jako int proměná. A proč ? Protože to je zatím netřeba vysvětlovat a fungovat to bude tak i tak.
Tyto koncáky (snad tyto) mám a pokud se chce brát že zmáčknutí je "aktivace", dávám tam PULLUP, protože ten "neguje" standartní funkci vstupu.
Toho jsem si právě vědom, ale nejsem si jistej, zda je ten koncák sám od sebe vybaven pullupem a tím pádem bych nemusel aktivovat pullup integrovaný v arduino desce.
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 16 hostů