Stránka 1 z 1

Poskládání kódu

Napsal: 04 pro 2017, 18:32
od Jomalak
Ahoj všichni. Tohle je mé první seznámení a zapojení ARDUINA, berte na to prosím ohled.
Má desku Arduino UNO chtěl bych s ním ovládat cca 3 zařízení. Myslel, jsem že pokud programuju v PHP, tak to bude něco obdobného, ale zatím mi to přijde úplně něco jiného. Časem se do toho asi dostanu (snad). No nicméně zkouším na základě své představy splácat program dle přílohy. No bohužel mi to nejde. Pokud ty "funkce" dělám samostatně, tak to funguje, pokud to chci ale dát nějak dohromady, tak jsem úplně mimo... :(

Poradí někdo díky. :)

Re: Poskládání kódu

Napsal: 04 pro 2017, 18:51
od zbysek
Začněte tím, ze nám nasdilite kódy :)

Re: Poskládání kódu

Napsal: 04 pro 2017, 19:29
od Jomalak
Ok.
To časování mám zatím takto:

Kód: Vybrat vše

#include <Wire.h>

#define DS3231_I2C_ADDRESS 0x68
byte sec, minute, hour;

int LED1 = A0;
int LED2 = A1;


void setup() {
  Serial.begin(9600);   
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
}

void loop() {
  GetRtc();
  if (hour==21 && minute==30 && sec == 0){
    digitalWrite(LED1, HIGH);     
  }
  if (hour==21 && minute==30 && sec == 20){
    digitalWrite(LED2, HIGH);
    delay(40000);
    } 
}

void GetRtc() {
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);

  sec = bcdToDec(Wire.read() & 0x7f);
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read() & 0x3f);
}

byte bcdToDec(byte val) {
  return((val / 16 * 10) + (val % 16));
}
Ovšem to nemůžu vyzkoušet protože na RTC modul ještě čekám.

Teplotu bych řešil nějak takto:

Kód: Vybrat vše

int tempPin=A2;
int tempPin1=A2;
int LED3=6;

void setup()
{
  Serial.begin(9600); 
    pinMode(LED3, OUTPUT);
    pinMode(tempPin, INPUT);
    pinMode(tempPin1, INPUT);
}

void loop()
{
  float temp=(analogRead(tempPin)*5.0)/1024.0;
  temp=100*(temp-0.5)*100;

  float temp1=(analogRead(tempPin1)*5.0)/1024.0;
  temp1=100*(temp-0.5)*100;
  delay(1000);

    if(temp <=22 && temp1 >=40) {
      digitalWrite(LED3, HIGH);
    }
}
A ty tlačítka zkouším stylem:

Kód: Vybrat vše

int LEDa = 2;
int LEDb = 2;
int TLAC = A4;
int TLACa = A5;
boolean svetlo = false;
boolean blik = false;

 
void setup()
  {
    pinMode(LEDa, OUTPUT);
    pinMode(LEDb, OUTPUT);
    pinMode(TLAC, INPUT);
    pinMode(TLACa, INPUT);
  }
  
void loop()
{
  if (digitalRead(TLAC))
  {
   if (svetlo) svetlo = false; else svetlo = true;
   digitalWrite(LEDa, svetlo);
   while (digitalRead(TLAC)) delay(50);
  } 

 
   if (digitalRead(TLACa))
  {
   if (blik)blik = false; else blik = true;
    blika();
    while (digitalRead(TLACa)) delay(50);
  }
}

void blika()
{
    digitalWrite(LEDb, HIGH);
    delay(500);
    digitalWrite(LEDb, LOW);
    delay(500);
}

V podstatě jedno tlačítko by mělo rozsvítit/zhasnout jednu led a to druhé zase další led rozblikat/zhasnout (posléze jsem chtěl k tomu přiřadit ty předchozí funkce).
Nicméně jak říkám, jsem naprostý začátečník a jak se mi to ze začátku zdálo vcelku jednoduché (blikání led, použití jednoho tlačítka, výpis teploty..), tak teď když to chci dát nějak dohromady, tak nevím jak dál...

Re: Poskládání kódu

Napsal: 04 pro 2017, 19:49
od Jomalak
V tom prvním "časovém" kódu je chybka u toho druhého časování. Chybí tam po delay ukončení (LOW)... Chtěl jsem upravit příspěvek, ale nenašel jsem jak by to šlo...