Ceko
Vytvořené odpovědi
-
AutorPříspěvky
-
rades
ÚčastníkDěkuji moc, jsem Vám zavázán. Opravdu tak pohotové lidi aby pohledal.
posjirka
Účastníkprosím používejte párové značky CODE, jinak je kod špatně formátovaný a zároveń není použitelný.
zkus tento upravený kod:// Krokový motor a driver #define tlacitko 2 // cislo pinu s talcitkem #define rychlost1 1 // prvni -standratni rychlost #define rychlost2 2 // rychlost pri stisku tlacitka // čísla pinů pro digitální výstupy const int in1 = 8; const int in2 = 9; const int in3 = 10; const int in4 = 11; // proměnná pro nastavení rychlosti, // se zvětšujícím se číslem se rychlost zmenšuje int rychlost =1; // int uhel = 90; void setup() { // inicializace digitálních výstupů pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(tlacitko, INPUT); } void loop() { if(digitalRead(tlacitko) == 0){ // kdyz je stisknuto tlacitko rychlost = rychlost2; // sniz rychlost } else { // jinak rychlost = rychlost1; // pouzij normalni rychlost } // plná rotace o 360 stupňů = 512 volání // funkce rotacePoSmeru() či rotaceProtiSmeru() for(int i=0;i<(uhel*64/45);i++){ rotacePoSmeru(); } // pauza po dobu 1 vteřiny delay(1000); for(int i=0;i<(uhel*64/45);i++){ rotaceProtiSmeru(); } // pauza po dobu 1 vteřiny delay(1000); } // zde následují funkce pro volání jednotlivých // kroků pro otočení po či proti směru hodinových // ručiček void rotacePoSmeru() { krok1(); krok2(); krok3(); krok4(); krok5(); krok6(); krok7(); krok8(); } void rotaceProtiSmeru() { krok8(); krok7(); krok6(); krok5(); krok4(); krok3(); krok2(); krok1(); } // každý krok obsahuje výrobcem dané pořadí // pro správné spínání motoru a následnou // pauzu, kterou určujeme rychlost otáčení void krok1(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok2(){ digitalWrite(in1, HIGH); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok3(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok4(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok5(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok6(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, HIGH); delay(rychlost); } void krok7(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); } void krok8(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); }
posjirka
Účastníkto je vcelku jasné. bavíme se o proměnné typu byte která nabývá hodnot 0-255.
Když dělíš -5 st. c tak ti vyjde 255-5 = 250 což je v hex. kodovani rovno „FA“.
zkus toto:#include <OneWire.h> #include <DallasTemperature.h> #include <Arduino.h> #include <TM1637Display.h> #define CLK 2 #define DIO 3 TM1637Display displej(CLK,DIO); const int pinCidlaDS = 4; // nastavení čísla vstupního pinu OneWire oneWireDS(pinCidlaDS); DallasTemperature senzoryDS(&oneWireDS); byte teplota=0; int rele=8; void setup() { pinMode(rele,OUTPUT); Serial.begin(9600); senzoryDS.begin(); displej.setBrightness(8);//jas displeje 8-15 } void loop() { senzoryDS.requestTemperatures(); teplota=senzoryDS.getTempCByIndex(0); Serial.print("Teplota cidla DS18B20: "); Serial.print(senzoryDS.getTempCByIndex(0)); Serial.println(" stupnu Celsia"); // pauza pro přehlednější výpis delay(1000); if(teplota>25){ digitalWrite(rele,LOW);//sepne rele } else { digitalWrite(rele,HIGH);//rozepne rele } uint8_t vypis[] = { 0, 0, 0, 0 };//nastavení displeje na zobrazení teploty if(teplota<1){ vypis[0]=(SEG_G); } teplota = abs(teplota); // prepocet na absolutni hodnotu vypis[1]=displej.encodeDigit((teplota/10)/10);//teplota stovky vypis[2]=displej.encodeDigit((teplota/10)%10);//teplota desítky vypis[3]=displej.encodeDigit((teplota%10)%10);//teplota jednotky displej.setSegments(vypis); }
jinak pro vkladani kodu používej párové značky CODE. Je to to tlačítko v horni části odpovědi s nápisem CODE. jinak se ti špatně vloží text a není pak čitelný
Jerry
ÚčastníkDíky jak bude čas zkusím
Zbyšek Voda
ÚčastníkDobrý den, můžete si udělat třeba nějaké počitadlo.
Kód by pak mohl vypadat například takto (předpokládám, že chcete získat 5 znaků).
int poc = 0; String zadano; char znak; char menu; void setup() { Serial.begin(9600); } void loop() { while (Serial.available()) { znak = Serial.read(); if (znak < 32 || znak > 126) continue; //přeskočí znaky mimo rozumný rozsah (konec řádku...) zadano.concat(znak); poc++; Serial.println(zadano); } if (poc >= 5) { if (zadano == "HELP") menu = 'H'; else menu = '0'; switch (menu) { case 'H': Serial.println(" //================================================\\"); Serial.println(" ||================================================||"); Serial.println(" ||Vypis prikazu ||"); Serial.println(" ||================================================||"); Serial.println(" ||COSI popis instrukce jshfjashfjsah ||"); Serial.println(" ||================================================||"); Serial.println(" \\================================================//"); default: delay(5); } poc = 0; zadano = ""; } }
rades
Účastníkvoid setup() {
Serial.begin(9600);}
void loop() {
String zadano;
char znak;
char menu;while(Serial.available()) {
znak = Serial.read();
zadano.concat(znak);
}if (zadano != „“) {
Serial.println(zadano);
}
if (zadano == „HELP“)
menu = ‚H‘;
else
menu = ‚0‘;
switch (menu)
{
case ‚H‘: Serial.println(“ //================================================\\“);
Serial.println(“ ||================================================||“);
Serial.println(“ ||Vypis prikazu ||“);
Serial.println(“ ||================================================||“);
Serial.println(“ ||COSI popis instrukce jshfjashfjsah ||“);
Serial.println(“ ||================================================||“);
Serial.println(“ \\================================================//“);
default: delay(5);
}}
`rades
ÚčastníkTak jsem to nakonec vyřešil takto, ale stále uvažuji, jak vyřešit to, aby program čekal na zadání dalšího znaku..
Chucky77
ÚčastníkTen program co máš v prvním příspěvku funguje dobře. Není asi důvod zkoušet něco jiného.
Mám IDe 1.6.12 a knihovny přikládám. Zkus vymazat všechny co k liquid I2c máš a zkusit to znovu.
Obvykle jsou v C:\Users\ doplnit \Documents\Arduino\librariesV knihovně
LiquidCrystal_I2C.cpp
je změna z 0 na 1 v této části kódu#define printIIC(args) Wire.write(args)
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
send(value, Rs);
return 1;Tak hodně zdaru.
OndřejAttachments:
romansis
ÚčastníkTady je ten kód.
// Krokový motor a driver
// čísla pinů pro digitální výstupy
const int in1 = 8;
const int in2 = 9;
const int in3 = 10;
const int in4 = 11;// proměnná pro nastavení rychlosti,
// se zvětšujícím se číslem se rychlost zmenšuje
int rychlost =1;
//
int uhel = 90;void setup() {
// inicializace digitálních výstupů
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}void loop() {
// plná rotace o 360 stupňů = 512 volání
// funkce rotacePoSmeru() či rotaceProtiSmeru()
for(int i=0;i<(uhel*64/45);i++){
rotacePoSmeru();
}
// pauza po dobu 1 vteřiny
delay(1000);for(int i=0;i<(uhel*64/45);i++){
rotaceProtiSmeru();
}
// pauza po dobu 1 vteřiny
delay(1000);
}
// zde následují funkce pro volání jednotlivých
// kroků pro otočení po či proti směru hodinových
// ručiček
void rotacePoSmeru() {
krok1();
krok2();
krok3();
krok4();
krok5();
krok6();
krok7();
krok8();
}
void rotaceProtiSmeru() {
krok8();
krok7();
krok6();
krok5();
krok4();
krok3();
krok2();
krok1();
}
// každý krok obsahuje výrobcem dané pořadí
// pro správné spínání motoru a následnou
// pauzu, kterou určujeme rychlost otáčení
void krok1(){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok2(){
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok3(){
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok4(){
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok5(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok6(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, HIGH);
delay(rychlost);
}
void krok7(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(rychlost);
}
void krok8(){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(rychlost);
}Jerry
ÚčastníkZapojení jsem zkusil i přehodit ale to nereaguje vůbec
Oldast
ÚčastníkZdravím a děkuji za vysvětlení,po klesnutí teploty pod 0st.mi zobrazí mínus,ale na displeji jsou nuly nebo F,C a nevím proč mi nezobrazuje teplotu(čísla),když čidlo ds18xxx by mělo ukazovat až -55st.Na serivém portu ukazuje i mínusové teploty a rele spíná tak jak má ale na displeji nic.nevím kde dělám chybu?
posjirka
Účastníkpredpokladam ze mas spravne propoje mezi arduinem a prevodnikem.
posjirka
Účastníka co zkusit nechat zapnout a vynout podsviceni lcd? to taky jede na prevodnik a pokud ani to nepojede je spatne knihovna nebo prevodnik. udelej proste jednoduchy blik program. kdyby toto fungovalo tak nektere lcd jsou citlive kdyz nemaji volne piny uzemnene. je otazkou jak je to reseno na prevodniku….
posjirka
Účastníkprotoze display ukazuje pouze cisla jako jednotky tudiz neumi zobrazit desetina mista. dokonce ani nema jak protoze destinna tecka tam tusim neni pouze dvojtecka. je tu varianta zobrazit 10 nasobek teploty a tim bude videt i jedno des. misto. zobrazovat ale des. mista u cidla s presnost 1 st.c je holy nesmysl ktery delaji i zkusenejsi programstori (bez urazky). minus tam tusim jde zobrazit jako znak. ja to resil tak ze zprava mam „C“ pa jednotky desitkya posledni stovky nebo minus. stejne cidla ds18xxx umi min -55st.
posjirka
Účastníkbez kodu ti asi nikdo neporadi. predpokladam ze tam mas nejakou promennou ktera urcuje delku mezery mezi kroky. co tak podminka jestli je stsknute tlacitko tak nasv promennou na x jinak nastav na y?
Chucky77
ÚčastníkTak s tím jsem se taky přál. Teď už mě to jede. A mám i dva stejný převodníky na jednom UNU. Jen u jednoho jsem změnil adresu. Večer když tak mohu postnout knihovny i program.
Knihovny originální jsou v program files, uživatelské pak v dokumentech.
OndřejOdesláno z mého Lenovo P70-A pomocí Tapatalk
Vojtěch Vosáhlo
ÚčastníkNo něco je určitě špatně ale proč hned kupovat nový displej? Zkuste odpájet i2c převodník a řídit displej přes piny na něm. Alespoň zjistíte kde je chyba.
Jerry
ÚčastníkA proč po zapnutí svítí jen první řádek ? To tak má být nebo už tady je něco špatně ?
No nic koupím jiný a uvidím tohle není normální. DíkyZbyšek Voda
ÚčastníkPošlete kód 🙂
Jerry
Účastníkjá už ani nevím pořádně co tam mám za knihovnu a kde je pořádně vymazat už jsem jich nahrál asi 11 a mám v tom neskutečnej guláš
Jerry
ÚčastníkChyba při kompilaci deky
Kysa
ÚčastníkO IDE nejde. skuste toto
#include <Wire.h>
#include <LiquidCrystal_I2C.h>//nastavíme adresu a typ displeje
LiquidCrystal_I2C lcd(0x3F,16,2); // nastavení adresy (0x3F) je důležité!!!void setup()
{
lcd.init(); // initializace lcd// Vypíšeme nějaké texty na jednotlivé řádky, adresace je od 0, ne od 1.
lcd.backlight();
lcd.setCursor ( 0, 0 );
lcd.print(„Test“);
lcd.setCursor ( 0, 1 );
lcd.print(„LCD“);
}void loop()
{
}Jerry
ÚčastníkIDE mám 1.8.0.
Kysa
ÚčastníkNevím jestli jsem dobře pochopil, který kód je v arduinu. Protože pokud je to
//POZOR – na verzi Arduino IDE 1.0.5 většinou nejde přeložit,
// prosím, použijte novější verzi 1.0.6, děkuji.
//#include <Wire.h>
#include <LiquidCrystal_I2C.h>//nastavíme adresu a typ displeje
LiquidCrystal_I2C lcd(0x3F,20,4); // nastavení adresy (0x3F) je důležité!!!void setup()
{
lcd.init(); // initializace lcd// Vypíšeme nějaké texty na jednotlivé řádky, adresace je od 0, ne od 1.
lcd.backlight();
lcd.setCursor ( 0, 0 );
lcd.print(“ http://www.santy.cz „);
lcd.setCursor ( 0, 1 );
lcd.print(“ Test LCD 2004 I2C „);
lcd.setCursor ( 0, 2 );
lcd.print(“ Arduino-Home „);
lcd.setCursor ( 0, 3 );
lcd.print(“ http://www.santy.cz „);
}void loop()
{
}`tak tady se používá display 4×20 znaků.
Jerry
ÚčastníkNevím proč je tam definovaných tolik pinů a hlásí mi to chybu při kompilaci
Jerry
ÚčastníkDíky vyzkouším
ArduXPP
ÚčastníkTak pak ještě vyzkoušet tenhle kod :
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>#define I2C_ADDR 0x3F
#define BACKLIGHT_PIN 7
#define En_pin 4
#define Rw_pin 5
#define Rs_pin 6
#define D4_pin 0
#define D5_pin 1
#define D6_pin 2
#define D7_pin 3#define LED_OFF 0
#define LED_ON 1
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);void setup()
{
lcd.begin (16,2); // initialize the lcd
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
lcd.setBacklight(LED_ON);
}void loop()
{// Reset the display
lcd.clear();
delay(1000);
lcd.home();// Print on the LCD
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(„Hello, world!“);
delay(8000);
}Musí se použít knihovna tahle https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads .
Jerry
ÚčastníkTo jsem taky již psal v textu. Převodník nalezen adresa změněna na 0x3F. Pokud se zadá jakákoli jiná adresa modul nereaguje vůbec.
ArduXPP
Účastník#include <Wire.h>
#include <LiquidCrystal_I2C.h>// vytvoří objekt lcd a nastaví jeho adresu
// 0x20 a 16 zanků na 2 řádcích
LiquidCrystal_I2C lcd(0x20,16,2);void setup()
{
lcd.init();// inicializuje displejlcd.backlight(); // zapne podsvětlení
lcd.print(„text“); // vypíše text
}void loop()
{
}Místo 0x20 se dopíše co ukázal skener
ArduXPP
ÚčastníkTak ještě zkusit tohle – http://playground.arduino.cc/Main/I2cScanner
-
AutorPříspěvky