Fórum témák
- • Garázskapu mozgató
- • Napelem alkalmazása a lakás energia ellátásában
- • Villanyszerelés
- • Indukciós főzőlap javítása
- • Gázkazán vezérlő hibák
- • Érdekességek
- • Codefon kaputelefon
- • Kombikazán működési hiba
- • Vásárlás, hol kapható?
- • Erősítő mindig és mindig
- • Felajánlás, azaz ingyen elvihető
- • Kávéfőzőgép hiba
- • Házilag építhető fémkereső
- • Skoda Octavia elektromos probléma
- • Erősítő építése elejétől a végéig
- • LCD TV probléma
- • TV hiba, mi a megoldás?
- • Muzeális készülékek-alkatrészek restaurálása
- • Radiosonde
- • Oszcilloszkóp vétel, mit gondoltok?
- • Rádióamatőrök topikja
- • Bojler javítása, kérdések
- • Folyamatábrás mikrokontroller programozás Flowcode-dal
- • HDMI bekötés
- • Westen 240 Fi gázkazán hiba
- • Szünetmentes táp javítása, élesztése
- • Háromfázisú aggregátor
- • Klíma szervizelés, javítás
- • Nyomtató probléma
- • Szobatermosztát bekötése
- • Tina
- • Lemezjátszó beállítása, javítása
- • Padlófűtés vezérlés
- • Li-Po - Li-ion akkumulátor és töltője
- • Labortápegység készítése
- • Tápegységgel kapcsolatos kérdések
- • Autórádió (fejegység) problémák, kérdések, válaszok
- • Sonoff kapcsolók informatikai háttere (rendszer topológia)
- • Kapcsolási rajzot keresek
- • EAGLE NYÁK tervező
- • Telefon és LAN hálózat kialakítása
- • SONY TA-F 590ES MOSFET végfok átalakítása
- • Villanypásztor
- • Elektronikus szulfátoldó (Akku aktivátor)
- • Akkumulátor töltő
- • Klíma beszerelése, fűtés-hűtés házilag
- • Autóelektronika
- • SMD forrasztás profin
- • Számítógép hiba, de mi a probléma?
- • Vicces - mókás történetek
- • Parkside akkuk javìtása
- • Videoton EA 6383 s (tuning)
- • Arduino
- • Elfogadnám, ha ingyen elvihető
- • Ultrahangos párásító
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Igen, köszönöm, gondoltam hogy bagatel hibát vétettem itt nézem vagy fél órája hogy mit ronthattam el. Most már jól fut a program, köszönöm még egyszer.
Ez mindig így van, pont a lényeg fölött siklik el az ember szeme. Nálunk is mindennapos történet, hogy szólunk egy kollegának, hogy "gyere nézd már meg légyszi, mi nem szúrja ki a szememet"...
Sziasztok. Sajnos elakadtam a projektemben. 3 lednek kellene világítani 3 nyomógomb megnyomásakor.
1. led egyfolytában világít és 1. gomb megnyomásakor ki/be kapcsol
2. led villog 500/500ms-al 2. gomb lenyomásakor ki/be kapcsol
3. led villog 250/250ms-al 3. gomb lenyomásakor ki/be kapcsol.
Ha valaki tudna segíteni akár privátban is azt nagyon megköszönném.
Kisfiam játékába szeretném mint karácsonyi ajándék
Üdvözlettel: Egy kezdő Arduinos
Csatold a kódot amit eddig csináltál, és részletesen írd le hogy mit szeretnél elérni! A privátot ilyenkor nem szeretjük, mert akkor mások nem tudnak tanulni belőle. De vagyunk itt elegen, csak összejön! Össze szokott
A LED-eket le kell csípni, meg a fesz. stab sem egy spórolós fajta az eredeti lapon. Jobb újraépíteni korrektsn, ahogy Asch is írta.
Eddig sikerült megcsinálni külön-külön a nyomógombos világítást külön a villogást csak nem tudom összeboronálni egy programba
Sikerült végre a HGA22 adó idő szinkron vétele arduino segítségével
Program, rajz:
Bővebben: HGA22
#include <avr/io.h>
#include <avr/interrupt.h>
#include <Wire.h>
#include "LiquidCrystal_I2C.h"
#define window_size 4 //moving average filter
LiquidCrystal_I2C lcd(0x27,16,2);
volatile unsigned long sample;
volatile unsigned long lastsample;
byte inByte = 0;
int index = 0;
volatile int value = 0;
int sum = 0;
int readings[window_size];
volatile int averaged = 0;
unsigned long lastsample1;
byte state = 0;
int laststate = 0 ;
volatile byte j = 0;
int nosig = 0;
volatile unsigned long bitle[256];
volatile int pr = 0;
bool HGAStartBitDetected = false;
byte HGAData[128];
int HGAByteCounter = 0;
byte year = 21;
byte month = 1;
byte day = 1;
byte hour = 12;
byte minute = 0;
byte sec = 0;
byte halfsec;
unsigned long previousMillis = 0;
bool sync = false;
const long interval = 500;
const unsigned long bh = 4550;
void setup()
{
cli();
TCCR1A = 0;
TCCR1B = 0;
OCR1A = 29;//133,2kHz
TCCR1A = _BV(WGM10) | _BV(COM1A0);
TCCR1B = _BV(WGM13) | _BV(CS10);
DDRB |= _BV(1);
sei();
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
PORTB = PORTB | B00100000;//D13 HIGH
attachInterrupt(digitalPinToInterrupt(2), sign, FALLING);
Serial.begin(1200,SERIAL_8E1);
Serial.println("START");
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" HGA22 CLOCK ");
//lcd.setCursor(2,1);
delay(1000);
}
void loop()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
halfsec++;
if(halfsec % 2 == 0){
sec++;
}
if(sec > 59){
sec = 0;
minute++;
}
if (minute > 59){
minute = 0;
hour++;
}
if (hour > 23) {
hour = 0;
}
if(halfsec % 2 == 0) {
Serial.print("20");
Serial.print(year);
Serial.print("-");
Serial.print(month);
Serial.print("-");
Serial.print((day));
Serial.print(" ");
Serial.print((hour));
Serial.print(":");
Serial.print((minute));
Serial.print(":");
Serial.print(sec);
Serial.print(" ");
Serial.println();
}
if(sync == true){
lcd.setCursor(0,0);
lcd.print(" 20");
lcd.print(year);
lcd.print("-");
if(month < 10)lcd.print("0");
lcd.print(month);
lcd.print("-");
if(day < 10)lcd.print("0");
lcd.print((day));
lcd.print(" ");
lcd.setCursor(4,1);
if(hour < 10)lcd.print("0");
lcd.print((hour));
if(halfsec % 2 == 0){
lcd.print(":");
}
else
{
lcd.print(" ");
}
if(minute < 10)lcd.print("0");
lcd.print((minute));
lcd.print(":");
if(sec < 10)lcd.print("0");
lcd.print(sec);
lcd.print(" ");
}
}
if (Serial.available() > 0) {
inByte = Serial.read();
if (HGAStartBitDetected)
{
HGAData[HGAByteCounter] = inByte;
HGAByteCounter++;
if (HGAByteCounter == 3)
{
if (HGAData[1] != HGAData[2])
{
HGAStartBitDetected = false;
}
}
if (HGAData[1] + 4 == HGAByteCounter)
{
HGAStartBitDetected = false;
if (HGAData[0] == 0x68 && HGAData[1] == 0x0A && HGAData[2] == 0x0A && HGAData[5] == 0x00 && HGAData[6] == 0x00 && HGAData[7] == 0x00)
{
Serial.print("HGA22: 20");
Serial.print(HGAData[13]);
Serial.print("-");
Serial.print(HGAData[12]);
Serial.print("-");
Serial.print((HGAData[11] & 0x1F));
Serial.print(" ");
Serial.print((HGAData[10] & 0x1F));
Serial.print(":");
Serial.print((HGAData[9] & 0x3F));
Serial.print(":");
Serial.print(((HGAData[8] & 0xFC) >> 2));
Serial.print(" ");
//Serial.print(HGAData[14],HEX);
//Serial.print(" ");
//Serial.print(HGAData[15], HEX);
Serial.println();
if(HGAData[13] <= 99 && HGAData[12] <= 12 && (HGAData[11] & 0x1F) <= 31 && (HGAData[10] & 0x1F) < 24 && (HGAData[9] & 0x3F) < 60 && ((HGAData[8] & 0xFC) >> 2) < 60) {
sync = true;
year = HGAData[13];
month = HGAData[12];
day = HGAData[11] & 0x1F;
hour = HGAData[10] & 0x1F;
minute = HGAData[9] & 0x3F;
sec = ((HGAData[8] & 0xFC) >> 2);
}
}
}
}
else
{
if (inByte == 0x68)
{
HGAData[0] = 0x68;
HGAStartBitDetected = true;
HGAByteCounter = 1;
}
}
}
if(pr==1){
pr = 0;
//1200baud 8E1:
for( int i = 1 ; i <= j; i++ ){
//Serial.println(bitle[i]);
if(bitle[i] < 7500 && bitle[i] >= 1000) bitle[i] = bh*2/12*1;
else if(bitle[i] < 12500 && bitle[i] >= 7500) bitle[i] = bh*2/12*2;
else if(bitle[i] < 17500 && bitle[i] >= 12500) bitle[i] = bh*2/12*3;
else if(bitle[i] < 22500 && bitle[i] >= 17500) bitle[i] = bh*2/12*4;
else if(bitle[i] < 27500 && bitle[i] >= 22500) bitle[i] = bh*2/12*5;
else if(bitle[i] < 32500 && bitle[i] >= 27500) bitle[i] = bh*2/12*6;
else if(bitle[i] < 37500 && bitle[i] >= 32500) bitle[i] = bh*2/12*7;
else if(bitle[i] < 42500 && bitle[i] >= 37500) bitle[i] = bh*2/12*8;
else if(bitle[i] < 47500 && bitle[i] >= 42500) bitle[i] = bh*2/12*9;
else if(bitle[i] < 52500 && bitle[i] >= 47500) bitle[i] = bh*2/12*10;
else if(bitle[i] < 57500 && bitle[i] >= 52500) bitle[i] = bh*2/12*11;
else if(bitle[i] < 62500 && bitle[i] >= 57500) bitle[i] = bh*2/12*12;
}
//Serial.println();
for( int i = 1 ; i <= j; i++ ){
if(i % 2 == 1){
PORTB = PORTB & B11011111;
}
else
{
PORTB = PORTB | B00100000;
}
delayMicroseconds((bitle[i]));
}
PORTB = PORTB | B00100000;
j = 0;
}
}
void sign(){
sample = micros();
value = sample - lastsample;
sum = sum - readings[index];
readings[index] = value;
sum = sum + value;
index = (index + 1) % window_size;
averaged = sum / window_size;
lastsample = sample;
if(averaged > 435 && averaged < 500 ){
state = 1;
nosig = 0;
}
if(averaged < 435 && averaged > 380 ){
state = 0;
nosig ++;
}
if(state != laststate){
bitle[j] = (sample - lastsample1);
j++;
lastsample1 = sample;
}
laststate = state;
if(nosig > 150 && j > 0){
nosig = 0;
pr = 1;
}
}
A hozzászólás módosítva: Nov 19, 2021
De most azt nem gondolod hogy innen mi tudjuk hogy mi van a gépeden ugye?
Ejha!
Igazából az Arduino.cc-ről töltöttem le pár verziót és próbáltam átalakítani úgy hogy nekem jó legyen. Sajnos nincs kézzel fogható megoldásom nincs még
Töltsd fel amit eddig megcsináltál, és specifikáld pontosan hogy mit szeretnél!
Szép! Hasznos lehet olyan projektekhez, ahol kellene tudni a valós időt. Áramkör rajz is lesz?
Van egy link a onedrive- hoz Bővebben....
Azért az Arduino nem olyan egyszerü, hogy egy kezdö elövesz valamit és mindjárt minden elindul. 1-2 hét intenziv tanulás kell ahhoz, hogy még egy primitiv feladatot is meg tudj oldani.
Lépésröl lépésre kellene menned. Már megirtam, hogy mi lehet egy lehetséges megoldás, azt kellene végigrágnod.
Elöször a két szaggatott kimenetet kell megoldanod. ( ott mindig a megfelelö freki van)
Ahhoz is van az Arduino IDE-ben kèsz mintaprogram. Azt kell egy kicsit kiegészitened, melyik jel hol jelenjen meg ( a mintaprogramokban általában a D13-ra kötött LED-et villogtatják).
Az neked is jo az egyik villogásra ( 1Hz), a másikat meg kell oldanod ( minden második 1Hz jelenjen meg a másik porton = 0,5 Hz), vagy forditva. A hozzászólás módosítva: Nov 19, 2021
A 2. és 3. LED bekapcsoláskor villog, majd a gombnyomásokra be- és kikapcsol, akárhányszor és aztán soha többé nem villog?
2. 3. Led be/ki kapcsolható a villogás. Ez egy 1:16-os méretarányú modelbe lenne a világítás.
1. gomb a világítás.
2. gomb vészvillogó
3. gomb villogó a fülke tetején
Az Arduino IDE-t még nem tudtam leszedni nem tudom az Arduino.cc oldaláról.
Na, így már átlátható a feladat!
Nem kell semmi cifraság, csak villogtatni a ledeket. Azt is elég csak kb-ra.
A loop-ban figyelni kell a gombok állapotát, és kezelni a prellt. Ez egy-egy állapotjelzőt kell hogy beállítson, ami jelzi a ledeknek hogy mit kell csinálni.
A másik dolog maga a villogás. Mivel a gyorsabbik 250ms-mal villog, én ezt venném alapnak, tehát a loop kering magában, és 250ms delay van benne. A 3. led ki-be kapcsol minden ütemben, ha engedélyezett az állapotjelzője. A 2. led ugyanezt teszi, de csak minden második ütemben, ezt egyszerűen egy változóval számolhatod, amit minden állapotváltozáskor törölsz. Az első led nem villog, csak hűen követi az állapotjelzőjét. A megoldás előnye hogy egyszerű mint a bot, viszont nem precíz, 250ms lesz a minimális idő amíg reagálni tud a gombok változására. Cserébe a prell automatikusan kezelve van, hiszen mire legközelebb a gombokhoz jutunk, már úgyis lecsengett.
Ezt most mankónak írtam, én így csinálnám. Ha addig nem lesz megoldás, délután összedobom neked!
Akkor eddig hogyan irtad a programot?
Itt van egy nagyon részletes leirás a standard villogo LEDröl. Már csak a kapcsolokat kell hozzá megirnod.
Arduino blinker A hozzászólás módosítva: Nov 20, 2021
Pedig ha felbontod a feladatot részfeladatokra nagyon egyszerűen megoldhatod.
Legyen három változód, mondjuk led1, led2, led3, ami ha 0 értékű akkor az adott led sötét állapotú, ha 1 akkor meg világos vagy villog.
A loop hurokban minden körben működtetheted az 1. ledet (ha led1 == 0 -> kikapcsolod, egyébként bekapcsolod)
A 2. leddel csak akkor foglalkozol, ha eltelt újabb 500msec az előző vele történő foglalkozás óta (ha led2 == 0 -> kikapcsolod egyébként meg ellentétesre állítod)
A 3. led ugyanaz mint 2. led, csak 250msec sűrűséggel.
A három nyomógombot célszerű mondjuk 50msec sűrűséggel lekérdezni, és ha a kérdéses gomb az előző lekérdezés alkalmával még nem volt lenyomott állapotba, most pedig le van nyomva, akkor hozzá tartozó led1.. led3 változót ellentétesre állítani (pl. led1 = 1 - led1). Ehhez nyilván tárolni kell a nyomógomb előző állapotát, amit mondjuk gomb1, gonb2, gomb3 változókban meg is tehetsz.
Az időzítésekhez pedig a delay() helyett a millis() függvényt célszerű használni, és fel kell venni 3db 32 bites változót, amiben eltárolod mikor foglalkoztál utoljára a led2-vel a led3-al illetve a nyomógombokkal. Az időzítési módszerhez megértéséhez érdemes megnézni a fentebbi Massawa által belinkelt videót.
Ez igen. Nagyon jó lett.
A képen mutatom, hogyan kösd be a ledeket, és a kapcsolókat! Igyekeztem érthetően és egyértelműen felkommentezni mindent. Hibák természetesen lehetnek, a teszt alatt nekem jól működött. Sok sikert!
// ***************************************************************
// Kisautó világításvezérlő
//
// Alkalmazott vezérlő: Arduino Uno
//
// Bementek:
//
// BUTTON1 -> PIN8
// BUTTON2 -> PIN9
// BUTTON3 -> PIN10
//
// Kimenetek:
// LED1 -> PIN2
//
// A program más kivezetéseket nem használ.
//
// A ledek korlátozó ellenállással a táp felé, aktív alacsony szintre
// vannak kötve.
// A gombok külső felhúzó ellenállással a táp felé, aktív alacsony
// szintet kapcsolnak.
//
// BUTTON1 megnyomásával felkapcsolódik LED1, és úgy is marad
// a következő lenyomásig. Ekkor lekapcsol.
//
// BUTTON2 lenyomás indítja LED2 villogását 500/500ms ütemben
// következő lenyomásig.
//
// BUTTON3 lenyomás indítja LED3 villogását 250/250ms ütemben
// következő lenyomásig.
//
// Gyarmati Krisztián @ sargarigo
// 2021-11-20
//
// ***************************************************************
#define LED1 2
#define BUTTON1 8
#define BUTTON2 9
#define BUTTON3 10
char led1eng = 1;
char led3 = 1, led3eng = 0; // ledek állapotait őrizzük bennük
char button1 = 1, button2 = 1, button3 = 1; // gombok állapotait őrizzük bennük
char button1_ = 1, button2_ = 1, button3_ = 1; // gombok előző állapotait őrizzük bennük
void setup() {
pinMode(LED1, OUTPUT);
pinMode(BUTTON1, INPUT);
pinMode(BUTTON2, INPUT);
pinMode(BUTTON3, INPUT);
digitalWrite(LED1, HIGH);
digitalWrite (LED2, HIGH );
digitalWrite (LED3, HIGH );
}
void loop() {
// tároljuk az előző állapotokat
button1_ = button1;
button2_ = button2;
button3_ = button3;
// ***************************************************************
// gombok kezelése
// ***************************************************************
button1 = digitalRead(BUTTON1);
button2 = digitalRead(BUTTON2);
button3 = digitalRead(BUTTON3);
if (button1_ == 1 && button1 == 0) // éppen most engedte el a gombot
led1eng = 1 - led1eng; // ha ki volt kapcsolva, akkor bekapcsoljuk és viszont
if (button2_ == 1 && button2 == 0) // éppen most engedte el a gombot
led2eng = 1 - led2eng; // ha ki volt kapcsolva, akkor bekapcsoljuk és viszont
if (button3_ == 1 && button3 == 0) // éppen most engedte el a gombot
led3eng = 1 - led3eng; // ha ki volt kapcsolva, akkor bekapcsoljuk és viszont
// ****************************************************************
// LED1 fényszóró
// ***************************************************************
digitalWrite(LED1, led1eng);
// ***************************************************************
// ***************************************************************
{
if (led2tarolo == 0) // csak minden második ütemben kapcsoljon
{
}
}
else
digitalWrite (LED2, HIGH ); // ez csak arra kell, nehogy véletlenül bekapcsolódva maradhasson
// ***************************************************************
// ***************************************************************
{
}
else
digitalWrite (LED3, HIGH ); // ez csak arra kell, nehogy véletlenül bekapcsolódva maradhasson
delay(250);
}
Sziasztok.
Egy furcsa dolgot tapasztaltam. Arduino 1.8.13-as környezetet használok Win10 alatt. Váltogatni szoktam a lapkákat, Uno, Nano, ESP32, hol meg éppen Mini. Az utóbbin elkezdtem egy munkát, majd félreraktam és dolgoztam más lapkákkal, majd amikor újra elővettem, bedobta a szokásosnak mondható "avrdude: stk500_getsync()" hibát, holott semmi nem változott a korábbi állapot óta. A megoldást az hozta, hogy Nano-ként kezelem Old Bootloader-t választva. Holott korábban Old Bootloaderes Nano-nál sem kellett Win10 alatt ezt kiválasztani. Ezt onnan lehet tudni, hogy míg Laptopon használva csak az Old Bootloaderrel lehetett írni, addig ugyanazt Win10 alatt nem kellett átállítani. Tud valaki arra magyarázatot, hogy ami korábban működött, az mitől változhatott meg?
Váó. Ez igen. Igen valahogy így gondoltam, én még kezdő szinten vagyok még benne ennyire nem látom még át. Azért kértem itt segítséget mert ebből még tanulni is tudok. Köszönöm kitartó segítségeteket. Este írok hogy működik még egyszer köszönöm
Megépítettem pont úgy működik ahogyan szerettem volna. A kész projektről küldök egy videót majd. Még egyszer köszönöm
Rendes volt tőled, hogy megcsináltad
Köszi! Az jött le a hozzászólásokból, egy ez egy egyszeri igény, és másképpen nem fog soha elkészülni. A gyereknek meg hadd legyen öröm a kisautó!
Sziasztok!
A következő problémában kérnék segtséget.
Építek egy IC tesztert Arduino Mega board-al és 240x320 érintő kijelzővel.
Az eredeti kód alapján a kijelző csak fehéren világított, semmi információ nem volt rajta.
Ezt sikerült javítanom, a megfelelő könyvtár csatolásával, már működik is. csak az érintő felülettel vannak gondok. Mégpedig az, hogy a jobb és bal oldal fel van cserélődve. Kérném a hozzáértőket segítsenek a probléma javításában.
Előre is köszönöm!
Mellékletben csatolom az Arduino IDE fájlokat, meg egy rövid videót a hibáról.
Üdv.
Travolta
|
|