nicolasoto
Vytvořené odpovědi
-
AutorPříspěvky
-
MartinCE
ÚčastníkDobrý den,
nedávno jsem také řešil podobný problém.
Čidla pracují se sběrnicí One-wire. Na jednom webu jsem se dozvěděl, že maximum je 100m na jiném 60m.
Na delší vzdálenost bych doporučil kroucenou dvoulinku a galvanické oddělení…
Na svém projektu jsem si vystačil s 1m dlouhým kabelem, který byl u čidel.Martin
BlindP
ÚčastníkAhoj, zkus použít funkci Millis pro časování viz příklad „BlinkWithoutDelay“.
const int ledPin = 13; const int tlac = 7; unsigned long previousMillis = 0; const long interval = 5000; void setup() { pinMode(ledPin, OUTPUT); pinMode(tlac, INPUT); } void loop() { if(digitalRead(tlac) == LOW) { previousMillis = millis(); digitalWrite(ledPin, HIGH); } unsigned long currentMillis = millis(); if(currentMillis - previousMillis >= interval) { digitalWrite(ledPin, LOW); } }
Po stisknutí tlačítka sepne led a po 5 vteřinách zhasne.
B.Boban
ÚčastníkAhoj mohl by si prosim poskytnout odkaz na knihovnu OneWire co pouzivas? mam v planu k Attiny pripojit to same cidlo a jeste modul 433MHz a pak to posilat do UNA a teplotu zobrazovat na displeji. Pripadne kdyby si sem moch dat tvuj kod pro inspiraci bylo by to fajn. Diky Boban
staricek
ÚčastníkMám stejný problém. Našel jsi nějaké řešení?
Používám stejný modul, stejnou libqmax
ÚčastníkAno, to je muj problem. Teda asi spis byl. Zjistil jsem ze to blikani asi zpusobuji nestinene vodice k diodam(pouzivam ploche kabely a jsou polozene pres sebe). Kdyz k sobe ty kabely pritlacim tak to zacne blikat, kdyz je dam od sebe tak to sviti vpohode.
tibordoma
ÚčastníkKolega mi poradil, že keďže podľa tých obrázkov na Merkur board je vždy 5V v strede, tak keď to dám aj opačne, tak to nezhorí. Tak som skúsil obidve kombinácie a jedna z nich fungovala.
Takže teraz som sa pustil do rozbehávania senzora – http://oi59.tinypic.com/34j7vw4.jpg – hore na dopravníku na červenej vodorovnej „tyči“. Tu je označený ako QRDx1 – http://i.snag.gy/Su8QI.jpg . Pripojil som to na Arduino na analógový port a sledoval výstup senzora. Predpokladám, že by to mal byť RGB senzor, nakoľko v popise dopravníka je toto „Set obsahuje mechanické části a je vybaven infa čidly, RGB senzorem, řídící elektronikou a displejem 4×20 mm.“ Ale ako rozoznávať farby, na to som neprišiel, ani som si nevšimol nejaké zmeny vo výstupe pri rozdielnych farbách. Skôr sa mi zdá, že reaguje všeobecne na svetlo. Možno to nesprávne používam. Skúsim vypýtať od Merkuru datasheet k tomu senzoru.
Zbyšek Voda
ÚčastníkV pohodě.
Buď si koupíte nějaký relé shield a pak jednotlivá relé ovládáte třeba tak, že je zapínáte/vypínáte LOW/HIGH na pinu, nebo si koupíte relé, připojíte k němu nějaký budič (třeba ULN2003a) a ovládáte je pomocí něho.krokodile
ÚčastníkSuper, díky za odpověď. Jak se potom řeší to napojení na relé? Omlouvám se za hloupé dotazy, ale nejsem problematikou se moc nezabývám…
Zbyšek Voda
ÚčastníkTohle zvládne jakékoliv Arduino 🙂 Klidně Nano, UNO…
Ještě bych k tomu přidal nějaký modul reálného času (RTC) pro lepší přehled v čase.Zbyšek Voda
ÚčastníkJsem rád, že se problém vyřešil 🙂
Decadics
ÚčastníkTak už jsem to vyřešil. Chyběla mi zem na pinu RW u LCD displeje. Nicméně teď budu řešit problém, jak to rozchodit přes ten I2C převodník, u kterého se mi to chovalo stejně. každopádně jsem rád, že LCD je v pořádku a příště si nejprve pořádně překontroluju zapojení, než budu někam něco psát. Díky za Váš čas. 😉
Pidrman
ÚčastníkDobrý den
Tak jsem program upravil. Snad dobře.
#include <LiquidCrystal.h>
#include <TimerOne.h>// buttons code
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5// directions
#define FORWARD HIGH
#define BACKWARD LOW// debounce time (milliseconds)
#define DEBOUNCE_TIME 200// PINs for Pololu controller
#define PIN_STEP 2
#define PIN_DIR 3// lookup table speed – ticks (interrupts)
const int speed_ticks[] = {-1, 600, 300, 200, 150, 120, 100, 86, 75, 67, 60, 55, 50, 46, 43};// global variables
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);int actual_speed;
int actual_direction;int ticks;
unsigned long tick_count;int button;
boolean debounce;
int previous_time;// custom LCD square symbol for progress bar
byte square_symbol[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};// string constants
char forward_arrow[] = „->“;
char backward_arrow[] = „<-„;void setup() {
// init the timer1, interrupt every 0.1ms
Timer1.initialize(100);
Timer1.attachInterrupt(timerIsr);// init LCD and custom symbol
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.createChar(0, square_symbol);// pins direction
pinMode(PIN_STEP, OUTPUT);
pinMode(PIN_DIR, OUTPUT);// initial values
actual_speed = 0;
actual_direction = FORWARD;
tick_count = 0;
ticks = -1;
debounce = false;digitalWrite(PIN_DIR, actual_direction);
updateLCD();
}void loop() {
// check if debounce active
if(debounce) {
button = btnNONE;
if(millis() > previous_time + DEBOUNCE_TIME) debounce = false;
} else button = read_buttons();// if a button is pressed, start debounce time
if(button != btnNONE) {previous_time = millis();
debounce = true;
}// check which button was pressed
switch(button) {case btnUP:
increase_speed();
break;
case btnDOWN:
decrease_speed();
break;
case btnLEFT:
change_direction(BACKWARD);
break;
case btnRIGHT:
change_direction(FORWARD);
break;
case btnSELECT:
emergency_stop();
break;
}// finally update the LCD
updateLCD();
}// increase speed if it’s below the max (70)
void increase_speed() {if(actual_speed < 70) {
actual_speed += 5;
tick_count = 0;
ticks = speed_ticks[actual_speed / 5];
}
}// decrease speed if it’s above the min (0)
void decrease_speed() {if(actual_speed > 0) {
actual_speed -= 5;
tick_count = 0;
ticks = speed_ticks[actual_speed / 5];
}
}// change direction if needed
void change_direction(int new_direction) {if(actual_direction != new_direction) {
actual_direction = new_direction;
digitalWrite(PIN_DIR, actual_direction);
}
}// emergency stop: speed 0
void emergency_stop() {
actual_speed = 0;
tick_count = 0;
ticks = speed_ticks[actual_speed / 5];
}// update LCD
void updateLCD() {// print first line:
// Speed: xxxRPM -> (or <-)
lcd.setCursor(0,0);
lcd.print(„SPEED: „);
lcd.print(actual_speed);
lcd.print(„RPM „);lcd.setCursor(13,0);
if(actual_direction == FORWARD) lcd.print(forward_arrow);
else lcd.print(backward_arrow);// print second line:
// progress bar [##### ]
// 15 speed steps: 0 – 5 – 10 – … – 70
lcd.setCursor(0,1);
lcd.print(„[„);for(int i = 1; i <= 14; i++) {
if(actual_speed > (5 * i) – 1) lcd.write(byte(0));
else lcd.print(“ „);
}lcd.print(„]“);
}// timer1 interrupt function
void timerIsr() {if(actual_speed == 0) return;
tick_count++;
if(tick_count == ticks) {
// make a step
digitalWrite(PIN_STEP, HIGH);
digitalWrite(PIN_STEP, LOW);tick_count = 0;
}
}// read buttons connected to a single analog pin
int read_buttons() {int adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
}Ale problém přetrvává 🙁
Zbyšek Voda
ÚčastníkDobrý den,
to rozhodně schválně není. Vaše chyba je ale podivná. Zkoušel jsem ji reprodukovat ve více prohlížečích, ale všude mi zobrazování funguje správně (ať už stránkování na úvodní stránce, nebo v Novinky).
Když půjdete třeba sem: https://bastlirna.hwkitchen.cz/page/3/, zobrazí se vám třetí stránka novinek, nebo úvodní stránka?
Zbyšek Voda
ÚčastníkDobrý den,
když tak zběžně koukám na váš program, napadá mě jedna věc. Snad to bude ono.
Na začátku máte:
Timer1.initialize(100); Timer1.attachInterrupt(timerIsr);
což zapříčiní, že se bude funkce timerIsr volat každých 100µs.
Funci timerIsr máte definovanou jako
void timerIsr() { if(actual_speed == 0) return; tick_count++; if(tick_count == ticks) { // make a step digitalWrite(PIN_STEP, HIGH); digitalWrite(PIN_STEP, LOW); tick_count = 0; } }
čili každých 100µs se proměnná tick_count zvýší o jednu (pokud neplatí speciální podmínky – ty teď ale přeskočme). Proměnná tick_count je typu int.
int tick_count;
a to by mohl být ten problém. Proměnné typu int mohou uchovávat čísla od -32.768 do 32.767. Vy ale nemáte nijak pojištěno, co se stane, když vám tick_count přeteče.
Jako první krok zkuste použít jiný typ – například unsigned long, který může mít rozsah od 0 do 4.294.967.295.
unsigned long tick_count;
Pokud se problém vyřeší (respektive se o hodně odloží), budeme mít jistotu, že to byl skutečně problém použitého datového typu.
Poté můžete zkusit dodělat detekci přetečení proměnné. Jelikož ale při zvýšení každých 100µs „vydrží“ tato proměnná počítat asi pět dní, neviděl bych to jako nutnost 🙂
Zbyšek Voda
ÚčastníkDobrý den,
problémem v rychlosti myslíte to, že se řádky rozsvěcují moc pomalu a nevznikne pak dojem, že svítí všechny naráz?
Zkuste nám sem poslat váš program, to by také mohlo pomoci.
Dan
ÚčastníkOdpovím si tedy sám, na anglickém fóru mi poradili v mžiku. Attiny85 musím provozovat na 8Mhz a výš. Přepnul jsem obvod na vnitřní oscilátor 8 MHz a vše začalo fungovat k naprosté spokojenosti. 🙂
HadrDisk
ÚčastníkTrošku upravená verze 0.0002 :))
int soft = 7; //zapnutí trafa přes odpor
int tr = 8; //zapnutí trafa bez odporu
int repro = 9; //zpožděné připojení repro + ochrana před DC
int buttonPin = 10; //Tlačítko power
int led = 13; //Kontrolka (při DC na výstupu zesilovače bliká do resetu obvodu)
int DC1 = analogRead(A0); //ochrana L kanálu
int DC2 = analogRead(A1); //ochrana P kanáluboolean currentState = LOW;//stroage for current button state
boolean lastState = LOW;//storage for last button state
boolean ledState = LOW;//storage for the current state of the LED (off/on)void setup() {
pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT
pinMode(repro, OUTPUT);
pinMode(soft, OUTPUT);
pinMode(tr, OUTPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);}
void loop() {
int DC1 = analogRead(A0);
int DC2 = analogRead(A1);
Serial.println(DC2); //informace pro nastavení napětí
delay(100);currentState = digitalRead(buttonPin);
while ((DC1 > 800 && lastState < 800)) {
digitalWrite(tr, LOW);
digitalWrite(soft, LOW);
digitalWrite(repro, LOW);
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
delay(200);
}while (DC2 > 800 && lastState < 800) {
digitalWrite(tr, LOW);
digitalWrite(soft, LOW);
digitalWrite(repro, LOW);
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
delay(200);
}if (currentState == HIGH && lastState == LOW) {
delay(10);//crude form of button debouncing
if (ledState == HIGH) {
digitalWrite(repro, LOW);
delay(200);
digitalWrite(soft, LOW);
digitalWrite(led, LOW);
digitalWrite(tr, LOW);
ledState = LOW;
} else {
digitalWrite(led, HIGH);
digitalWrite(soft, HIGH);
delay(1000);
digitalWrite(tr, HIGH);
delay(60);
digitalWrite(soft, LOW);
delay(3000);
digitalWrite(repro, HIGH);
ledState = HIGH;
}
}
lastState = currentState;
}Ocením nějaké návrhy na zjednodušení a případný reset blikající LEDky dlouhým stiskem tlačítka :))
Předem díky za nápady :))
Decadics
ÚčastníkDěkuji za rady, mrknu, jestli je vše, co jste popsal v pořádku. Pokud ano, koupím raději nový a originální arduino displej. Hzeký den. 🙂
Zbyšek Voda
ÚčastníkProgram bude v pořádku. Mě tohle normálně fungovalo.
Nabízí se tedy hledat problém někde jinde. Koukal jsem třeba sem: http://stackoverflow.com/questions/9217084/arduino-lcd-only-showing-black-boxes-on-bottom-rowNabízí tam vícero tipů.
- Zkontrolovat zapojení – jestli nemáte nějaký vadný vodič.
- Zkontrolovat, jestli jsou piny dobře připájené k LCD.
- Před lcd.begin() dát delay(1000) – display by mohl potřebovat čas na naběhnutí
- Ujistěte se, jestli se program skutečně nahrál do Arduina (zkuste třeba nahrát blikání LEDkou a pak zase zpět na LCD hello world)
Takhle na dálku mě nenapadá nic dalšího.
Decadics
ÚčastníkDěje. Při otáčení poťákem se mění kontrast. Od svetlého do nejtmavšího. Regulací kontrastu to asi nebude. Na netu jsem našel vícero lidí, kteří měli stejný problém. Jen se to na těch fórech nikdy nedořešilo do konce. Takže se jedná o obvyklý problém, ale neznám řešení. Možná bude něco špatného v kódu, nebo bude špatná knihovna?
Zbyšek Voda
ÚčastníkTakže když točíte kontrastním potenciometrem, tak se nic neděje?
Přijde mi, že toto dělá displej, když má nastavený maximální kontrast.Decadics
ÚčastníkDobrý den,
zařízení jsem již rozebral a oddělil jsem I2C převodník od LCD s tím, že se pokusím o klasické zapojení bez I2C převodníku abych vyloučil jeho poškození. Bohužel, problém přetrvává i bez I2C převodníku. Displej zobrazuje to samé, co předtím. Z I2C modulu jsem použil jen potenciometr abych mohl štelovat kontrast.
Foto: http://decadics.rajce.idnes.cz/ARDUINO_-_LCD_PROBLEM#ARDUINO2.jpg
Zdroják:
/*
LiquidCrystal Library – Hello WorldDemonstrates the use a 16×2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.This sketch prints „Hello World!“ to the LCD
and shows the time.The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom IgoeThis example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/// include the library code:
#include <LiquidCrystal.h>// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);void setup() {
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print(„hello, world!“);
}void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);Zbyšek Voda
ÚčastníkDobrý den, můžete sem postnout fotku vašeho zapojení? 🙂
jurda23
Účastníkproblem s web byl vyřešen nevšimnul jsem si že používám porty 10, 11, 12, 13 ktere potřebuje ethernet shild
[code]
#include <SD.h>
#include <Ethernet.h>
#include <SPI.h>
#include <SoftwareSerial.h>
#include <MemoryFree.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>float T00;
float T01;
float T02;
//float T03;
// zde si upravte podle sebe
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0xC4, 0x36 };
// IP adresabyte ip[] = { 192, 168, 99, 150 };
byte gateway[] = { 192, 168, 99, 1 };
byte subnet[] = { 255, 255, 255, 0 };
String readString;
// port
EthernetServer server(80);
//RGBLED
int bluePin1 = 40; //Digital Pin fĂĽr Blaue LED1 in RGB-LED
int greenPin1 = 41; //Digital Pin fĂĽr GrĂĽne LED1 in RGB-LED
int redPin1 = 42; //Digital Pin fĂĽr Rote LED1 in RGB-LEDint redIn1 = 0;
int greenIn1 = 1;
int blueIn1 = 2;int redVal1;
int greenVal1;
int blueVal1;int bluePin2 = 4; //Digital Pin fĂĽr Blaue LED2 in RGB-LED
int greenPin2 = 5; //Digital Pin fĂĽr GrĂĽne LED2 in RGB-LED
int redPin2 = 6; //Digital Pin fĂĽr Rote LED2 in RGB-LEDint redIn2 = 3;
int greenIn2 = 4;
int blueIn2 = 5;int redVal2;
int greenVal2;
int blueVal2;//Relays
int relPin1 = 2; //Digital Pin fĂĽr Relay1
int relPin2 = 3; //Digital Pin fĂĽr Relay2
int relPin3 = 8; //Digital Pin fĂĽr Relay3
int relPin10 = 22; //Digital Pin fĂĽr Relay22
int relPin11 = 24; //Digital Pin fĂĽr Relay24int relPin1In = 22;
int relPin2In = 1;
int relPin3In = 5;
int relPin10In = 23;
int relPin11In = 25;int relPin1Val;
int relPin2Val;
int relPin3Val;
int relPin10Val;
int relPin11Val;
//Heater Status
int heiz1Val;
int heiz2Val;
//#define WS5200_CS 10
//#define SDCARD_CS 4
#define BACKLIGHT_PIN 13
#define ONE_WIRE_BUS 32
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//Adresy CIDEL
DeviceAddress C = { 0x28, 0xC0, 0x97, 0x8A, 0x06, 0x00, 0x00, 0x74 };
DeviceAddress Cc = { 0x28, 0x3E, 0x11, 0x8A, 0x06, 0x00, 0x00, 0x42 };
DeviceAddress Ccc = { 0x28, 0x73, 0x9B, 0x89, 0x06, 0x00, 0x00, 0x83 };
//DeviceAddress C03 = { 0x28, 0x73, 0x9B, 0x89, 0x06, 0x00, 0x00, 0x83 };
int backLight = 13; // pin 13 will control the backlight
int LEDbrightness; //void setup() {
sensors.begin();
Serial.begin(9600);Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
sensors.requestTemperatures();
Serial.print(„server is at „);
Serial.println(Ethernet.localIP());// Velikost slova (bit) 9 10 11 12
//Rozlišenà (°C) 0.5 0.25 0.125 0.0625
//Doba převodu (ms) 93,75 187,5 375 750
sensors.setResolution(C, 9);
sensors.setResolution(Cc, 9);
sensors.setResolution(Ccc, 9);
//sensors.setResolution(C03, 9);
lcd.begin(16, 4);
lcd.clear(); // initialize the lcd
lcd.backlight();//T03 = sensors.getTempC(C03); //teplota solaru
pinMode(relPin1, OUTPUT); //Output Mode for Relay1
pinMode(relPin2, OUTPUT); //Output Mode for Relay2
pinMode(relPin3, OUTPUT); //Output Mode for Relay3
pinMode(relPin10, OUTPUT); //Output Mode for Relay2
pinMode(relPin11, OUTPUT); //Output Mode for Relay3
// digitalWrite(relPin1, HIGH);
// digitalWrite(relPin2, HIGH);
// digitalWrite(relPin3, HIGH);
// digitalWrite(relPin10, HIGH);
// digitalWrite(relPin11, HIGH);}
void loop() {
sensors.requestTemperatures();
T00 = sensors.getTempC(C); //teplota bazenu
T01 = sensors.getTempC(Cc); //teplota panelu
T02 = sensors.getTempC(Ccc); //teplota solaru
//T03 = sensors.getTempC(C03); //teplota solarulcd.setCursor(0, 0);
lcd.print(„Bazen: „);
lcd.print(T00); //teplota venku
lcd.print(„C“);
lcd.setCursor(0, 2);
lcd.print(„Ohrev: „);
lcd.print(T01); //teplota solaru
lcd.print(„C“);
// Serial.println();
// Serial.print(„T0 „);
// Serial.print(T00);
// Serial.println();
// Serial.print(„T1 „);
// Serial.print(T01);
// Serial.println();
// Serial.print(„T2 „);
// Serial.print(T02);//Je nach Temperatur Farbe der RGB-LED anpassen und Rel 1 schalten
if(T01 <= 27)
{
redVal1 = 0;
greenVal1 = 0;
blueVal1 = 150;
relPin1Val = LOW;
relPin3Val = LOW;
lcd.setCursor(0, 1);
lcd.print(„Topeni: Zap „);
}
else if(T01 > 27 && T01 < 29)
{
redVal1 = 0;
greenVal1 = 150;
blueVal1 = 0;
relPin1Val = HIGH;
relPin3Val = LOW;
lcd.setCursor(0, 1);
lcd.print(„Topeni: Vyp „);
}
else if(T01 > 29)
{
redVal1 = 150;
greenVal1 = 0;
blueVal1 = 0;
relPin1Val = HIGH;
relPin3Val = HIGH;
lcd.setCursor(0, 1);
lcd.print(„VÄ›tránĂ: Vyp „);
}//Je nach Temperatur Farbe der RGB-LED anpassen und Rel 2 schalten
if(T02 <= 27)
{
redVal2 = 0;
greenVal2 = 0;
blueVal2 = 255;
relPin2Val = LOW;
lcd.setCursor(0, 3);
lcd.print(„Topeni: Zap „);
}
else if(T02 > 27 && T02 < 29)
{
redVal2 = 0;
greenVal2 = 255;
blueVal2 = 0;
relPin2Val = HIGH;
lcd.setCursor(0, 3);
lcd.print(„Topeni: Vyp „);
}
else if(T02 > 29)
{
redVal2 = 255;
greenVal2 = 0;
blueVal2 = 0;
relPin2Val = HIGH;
lcd.setCursor(0, 3);
lcd.print(„Topeni: Vyp „);
}
{analogWrite(redPin1, redVal1);
analogWrite(greenPin1, greenVal1);
analogWrite(bluePin1, blueVal1);
analogWrite(redPin2, redVal2);
analogWrite(greenPin2, greenVal2);
analogWrite(bluePin2, blueVal2);
digitalWrite(relPin1, relPin1Val);
digitalWrite(relPin2, relPin2Val);
digitalWrite(relPin3, relPin3Val);
digitalWrite(relPin10, relPin10Val);
digitalWrite(relPin11, relPin11Val);}
Serial.println();
Serial.print(„Locating devices…“);
Serial.print(„Found „);
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(“ devices.“);
//Serial.print(„Free Memory = „);
//Serial.println(getFreeMemory());
// kdyĹľ je pĹ™ipojen klient, zjistĂme, zda jsou odeslána data
// od klienta směrem k nám
EthernetClient client = server.available();
String buffer = „“;// dokud je klient pĹ™ipojen
while (client.connected()) {
// ÄŤti data od nÄ›j dokud nenarazĂš na znak novĂ©ho řádkuif (client.available()) {
char c = client.read();
buffer = buffer + c;
if (c == ‚\n‘) {if(buffer.indexOf(„rele1=1“)>=0)
digitalWrite(2,HIGH);else if(buffer.indexOf(„rele1=0“)>=0)
digitalWrite(2,LOW);if (buffer.indexOf(„rele2=1“) >= 0)
digitalWrite(3, HIGH);
else if (buffer.indexOf(„rele2=0“) >= 0)
digitalWrite(3, LOW);if (buffer.indexOf(„rele10=1“) >= 0)
digitalWrite(22, HIGH);else if (buffer.indexOf(„rele10=0“) >= 0)
digitalWrite(22, LOW);if (buffer.indexOf(„rele11=1“) >= 0)
digitalWrite(24, HIGH);else if (buffer.indexOf(„rele11=0“) >= 0)
digitalWrite(24, LOW);// delay(1);
// odešle klasickou hlavičku HTML stránky
client.println F ((„HTTP/1.1 200 OK“));
client.println F ((„Content-Type: text/html“));
client.println F ((„Connection: close“));client.println ();
client.println F ((„<!DOCTYPE HTML>“));// zde jiĹľ klasická html data
client.println F ((„<html>“));
client.println F ((„<head>“));
// Název stránky
client.println F ((„<title>Arduinio Server – Rele control</title>“));
client.println F ((„</head>“));
client.println F ((„<body>“));
client.print F ((„<h3 align=center>Program pro ovladani rele</h3>“));
client.println F ((„</br>“));// vygeneruje formulář
if (digitalRead(2)) {
client.print F ((„<button style=’background:red;width:20%;height:30px‘>RELE 1 VYPNUTO</button>“));
} else {
client.print F ((„<button style=’background:green;width:20%;height:30px‘>RELE 1</button>“));
}
client.println F ( (“ test“));
client.println F ((„</br>“));if (digitalRead(3)) {
client.print F ((„<button style=’background:red;width:20%;height:30px‘>RELE 2 VYPNUTO</button>“));
} else {
client.print F ((„<button style=’background:green;width:20%;height:30px‘>RELE 2</button>“));
}
client.println F ((“ svetlo“));
client.println F ((„</br>“));if (digitalRead(22)) {
client.print F ((„<button style=’background:red;width:20%;height:30px‘>RELE 3 VYPNUTO</button>“));
} else {
client.print F ((„<button style=’background:green;width:20%;height:30px‘>RELE 3</button>“));client.println F ((“ filtrace“));
client.println F ((„</br>“));if (digitalRead(24)) {
client.print F ((„<button style=’background:red;width:20%;height:30px‘>RELE 4 VYPNUTO</button>“));
} else {
client.print F ((„<button style=’background:green;width:20%;height:30px‘>RELE 4</button>“));
}
client.println F ((“ tlacitko pro kotel 4″));client.println F ((„</br>“));
client.println F ((„</br>“));
client.println („</br>“);client.println („Teplota0“);
client.println (T00);
client.println („</br>“);
client.println („Teplota1:“);client.println (T01);
client.println („</br>“);
client.println („Teplota2:“);client.println (T02);
client.println („</br>“);client.print („<meta http-equiv=\“refresh\“ content=\“5\“>“); //stránka se naÄŤte automaticky jednou za 3 s
client.println („</body>“);
client.println („</html>“);Serial.println(buffer);
delay(1); //dáme klientovi čas na zpracování
//ukončà přenos
client.stop();
} }
}
} }[/code]
jaracim
ÚčastníkProblém je vyřešen, dík.
Zbyšek Voda
ÚčastníkPokud jsem kód dobře pochopil, přijde mi, že sice máte zobrazená tlačítka, ale nemáte k nim obslužný kód.
Předpokládám, že chcete, aby po kliknutí na tlačítko program odeslal požadavek s informacemi o stavu relé.Dalo by se to udělat třeba tak, že z tlačítek uděláte odkazy vedoucí na určitou URL s přidanými parametry za url. Jak přidat URL ke tlačítku řeší třeba zde.
Arduino pak bude zpracovávat HTTP požadavek, ze kterého si vybere požadované informace z parametru.
jurda23
Účastníkno momentalně vše zkouším metodou pokus-omyl potřebuji aby to fungovalo jako termostat na třech zavislostech,spinalo dvě rele, vše nastavitelné přes web
1.pokud je čas který nasavím (cca 9:00-17:00hod) bude seple rele1
2.teplota čidla1 dle nasavení ovlada rele2 za podmínky že teplota čidla2 neni menší než ktera bude nastavena
3.I2C displejna kterem budou rotovat dokola teploty z cca 6čidel a stavy relatek topení,oběh
Jedná se mi o to vytvořit automatiku která bude hlídat ohřev bazenu přes tep.vyměník ze zasobníku tepelného čerpadla ve kterem nesmí poklesnout teplota pod cca 40stupnu jinak se spustí příhřev topnou spirálou cca9KW čemuž chci zabránit,muj sen je aby to časem vypadalo stejně jako zde https://www.youtube.com/watch?v=ef9fpolMtxAjsem na začátku a potýkám se s tím že se nerozjede webserver ping na adresu jde,když už se rozjede občas tak mi nefunguji stavy rele a ovladaní. a netuším jak udělat podmínku na bod 1a2,modul realneho času je na cestě a nevímjak sinchronizovat čas přes NTP vše chci něák velmi jednoduše. Ještě tvořím jeden system,naplatformě cubieboard ten již funguje na adrese teblomer.juricekpavel.net:81
na arduinu jsem nováček tak se snažím lepit kod z toho co najdu na netu.jurda23
Účastníkno momentalně vše zkouším metodou pokus-omyl potřebuji aby to fungovalo jako termostat na třech zavislostech,spinalo dvě rele, vše nastavitelné přes web
1.pokud je čas který nasavím (cca 9:00-17:00hod) bude seple rele1
2.teplota čidla1 dle nasavení ovlada rele2 za podmínky že teplota čidla2 neni menší než ktera bude nastavena
3.I2C displejna kterem budou rotovat dokola teploty z cca 6čidel a stavy relatek topení,oběh
Jedná se mi o to vytvořit automatiku která bude hlídat ohřev bazenu přes tep.vyměník ze zasobníku tepelného čerpadla ve kterem nesmí poklesnout teplota pod cca 40stupnu jinak se spustí příhřev topnou spirálou cca9KW čemuž chci zabránit,muj sen je aby to časem vypadalo stejně jako zde https://www.youtube.com/watch?v=ef9fpolMtxAjsem na začátku a potýkám se s tím že se nerozjede webserver ping na adresu jde,když už se rozjede občas tak mi nefunguji stavy rele a ovladaní. a netuším jak udělat podmínku na bod 1a2,modul realneho času je na cestě a nevímjak sinchronizovat čas přes NTP vše chci něák velmi jednoduše. Ještě tvořím jeden system,naplatformě cubieboard ten již funguje na adrese teblomer.juricekpavel.net:81
na arduinu jsem nováček tak se snažím lepit kod z toho co najdu na netu.Zbyšek Voda
ÚčastníkDobrý den,
můžete prosím popsat, co konkrétně vám nefunguje?
Taky by se hodil popis projektu – co to má dělat, jak to funguje…
Zbyšek Voda
ÚčastníkV Arduino IDE v nabídce Tools v Ports vyberte COM5
-
AutorPříspěvky