Fórum témák
- • Elektromos vezérlésű pneumatika
- • Arduino
- • Nagyfeszültségű tápegység
- • Kondenzátor
- • Hangszórójavítás (otthon)
- • Elfogadnám, ha ingyen elvihető
- • Általános antennás kérdések, válaszok
- • Klíma szervizelés, javítás
- • Internetes rádióvevő
- • Alternativ HE találkozó(k)
- • 3D nyomtatás
- • Felajánlás, azaz ingyen elvihető
- • Akkumulátor töltő
- • Elektronikai témájú könyvek újságok
- • Rádióamatőrök topikja
- • LED szalag
- • TDA7294 végerősítő
- • Háromfázisú aggregátor
- • Szintetizátor javítás
- • Dobozolási technikák, műszerdobozok
- • Boombox javítás
- • Sütő javítás
- • Erősítő mindig és mindig
- • Mosógép vezérlők és általános problémáik
- • Számítógép hiba, de mi a probléma?
- • Laptop javítás, tuning
- • Elektromos távirányítós kapunyitó
- • Autós erősítős kérdések, problémák
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Villanymotor
- • Vegyes barkácsfogások
- • Digitális óra
- • Hűtőgép probléma
- • TV hiba, mi a megoldás?
- • Szünetmentes táp javítása, élesztése
- • Erősítő építése elejétől a végéig
- • Műhelyünk felszerelése, szerszámai
- • Kombikazán működési hiba
- • Függvénygenerátor építése
- • SMD, mi a típusa?
- • Hibrid erősítő
- • Suzuki Swift elektronika
- • Videomagnó problémák
- • Érdekességek
- • STK erősítők javítások
- • DC-DC konverter max. kapacitív terhelése
- • Audiofil, High End Audio
- • Központi fűtés (vezérlés)
- • IMI villanymotor
- • Borhűtő vezérlő panel
- • Androidos okos telefonok
- • Klíma beszerelése, fűtés-hűtés házilag
- • Súlymérés
- • Varrógép elektronika
- • Analóg oszcilloszkóp javítása
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Az enkodereknek 2 bemenet kel. Van még plusz 3 bemeneted?
És a magyarázat:
Bővebben: Link
Szia!
A problémám a következő: a 4 gomb közül 2 a menüben az előre és hátra irányt vezérli, egy pedig maga a menü előhívása. Azt szeretném, hogy az encoder SW gombja lenne a menü, az A és B pedig az elöre és hátra irány. Én ehhez suta vagyok, sajnos nem tudom megcsinálni.
A meglevő menü gomb kezelést meghagyod.
A két irány választó gomb rutinjait lecseréled a fenti linkben szereplő rutinra.
A 10(minusz,hátra),11(plusz,elöre),12(menü)-es lenne az a 3 gomb.
Ezt gyorsan töröld! És rakdbbe a lenti zöld gombok "kód" zárójelei közé
void loop() { //A menü és gomb vezérlés
if (digitalRead(12) == HIGH) {
menu++;
cl();
in_d = 0;
if (menu > 4) {
menu = 0;
}
}
if (analogRead(A1) > 900) {
in++;
menu = 5;
w = 1;
in_d = 1;
cl();
if (in > 4 || in < 1) {
in = 1;
}
}
if (menu == 0) {
if (digitalRead(11) == HIGH) {
vol++;
w = 1;
if (vol > 48) {
vol = 48;
}
}
if (digitalRead(10) == HIGH) {
vol--;
w = 1;
if (vol < 0) {
vol = 0;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w = 0;
w1 = 1;
}
lcd.setCursor(0, 0); lcd.print("Volume ");
lcd.print(-48 + vol); lcd.setCursor(13, 0); lcd.print("dB");
vol_d = vol / 2;
if (vol_d >= 0) {
for (z = 0; z <= vol_d; z++) {
lcd.setCursor(z / 2, 1);
lcd.write((uint8_t)0);
}
}
if (vol_d % 2 == 0) {
lcd.setCursor(z / 2, 1);
lcd.write((uint8_t)1);
}
lcd.setCursor(13, 1); lcd.print(vol);
}
if (menu == 1) {
if (digitalRead(11) == HIGH) {
bass++;
w = 1;
if (bass > 7) {
bass = 7;
}
}
if (digitalRead(10) == HIGH) {
bass--;
w = 1;
if (bass < -7) {
bass = -7;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
lcd.setCursor(0, 0); lcd.print("Bass ");
lcd.print(bass * 2); lcd.setCursor(13, 0); lcd.print("dB");
for (z = -7; z <= bass; z++) {
lcd.setCursor(z + 7, 1);
lcd.write((uint8_t)0);
}
}
if (menu == 2) {
if (digitalRead(11) == HIGH) {
mids++;
w = 1;
if (mids > 7) {
mids = 7;
}
}
if (digitalRead(10) == HIGH) {
mids--;
w = 1;
if (mids < -7) {
mids = -7;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
lcd.setCursor(0, 0); lcd.print("Mids ");
lcd.print(mids * 2); lcd.setCursor(13, 0); lcd.print("dB");
for (z = -7; z <= mids; z++) {
lcd.setCursor(z + 7, 1);
lcd.write((uint8_t)0);
}
}
if (menu == 3) {
if (digitalRead(11) == HIGH) {
treb++;
w = 1;
if (treb > 7) {
treb = 7;
}
}
if (digitalRead(10) == HIGH) {
treb--;
w = 1;
if (treb < -7) {
treb = -7;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
lcd.setCursor(0, 0); lcd.print("Trebble ");
lcd.print(treb * 2); lcd.setCursor(13, 0); lcd.print("dB");
for (z = -7; z <= treb; z++) {
lcd.setCursor(z + 7, 1);
lcd.write((uint8_t)0);
}
}
if (menu == 4) {
if (digitalRead(11) == HIGH) {
balans++;
w = 1;
if (balans > 4) {
balans = 4;
}
}
if (digitalRead(10) == HIGH) {
balans--;
w = 1;
if (balans < -4) {
balans = -4;
}
}
lcd.setCursor(0, 0);
if (balans >= 0) {
lcd.print("-");
} else {
lcd.print("+");
}
lcd.print(abs(balans)); lcd.print(" dB ");
lcd.print(" <> ");
if (balans >= 0) {
lcd.print("+");
} else {
lcd.print("-");
}
lcd.print(abs(balans)); lcd.print(" dB ");
lcd.setCursor(0, 1); lcd.print("R");
lcd.setCursor(15, 1); lcd.print("L");
if (balans < 0) {
lcd.setCursor(balans + 7, 1);
lcd.write((uint8_t)0);
}
if (balans > 0) {
lcd.setCursor(balans + 8, 1);
lcd.write((uint8_t)0);
}
if (balans == 0) {
lcd.setCursor(7, 1);
lcd.write((uint8_t)0);
lcd.setCursor(8, 1);
lcd.write((uint8_t)0);
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
}
if (in_d == 1) {
g1();
if (digitalRead(11) == HIGH) {
gain++;
w = 1;
if (gain > 15) {
gain = 15;
}
}
if (digitalRead(10) == HIGH) {
gain--;
w = 1;
if (gain < 0) {
gain = 0;
}
}
g2();
lcd.setCursor(0, 0); lcd.print("Input: "); lcd.print(in);
lcd.setCursor(0, 1); lcd.print("Input Gain: "); lcd.print(gain);
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
}
Mivel csak kód töredéket kaptam, nem tudtam ellenőrző fordítást végezni!
Így képzeltem a cserét:
#defune MINUSZ_BUTTON 10
#defune PLUSZ_BUTTON 11
#define MENU_BUTTON 12
#define outputA 11
#define outputB 10
int counter = 0;
int aState;
int aLastState;
int encoder();
//A menu es gomb vezerles
void loop() {
int readEncoder = encoder();
if (digitalRead(12) == HIGH) {
menu++;
cl();
in_d = 0;
if (menu > 4) {
menu = 0;
}
}
if (analogRead(A1) > 900) {
in++;
menu = 5;
w = 1;
in_d = 1;
cl();
if (in > 4 || in < 1) {
in = 1;
}
}
if (menu == 0) {
if (readEncoder == 1) {
vol++;
w = 1;
if (vol > 48) {
vol = 48;
}
}
if (readEncoder == 2) {
vol--;
w = 1;
if (vol < 0) {
vol = 0;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w = 0;
w1 = 1;
}
lcd.setCursor(0, 0); lcd.print("Volume ");
lcd.print(-48 + vol); lcd.setCursor(13, 0); lcd.print("dB");
vol_d = vol / 2;
if (vol_d >= 0) {
for (z = 0; z <= vol_d; z++) {
lcd.setCursor(z / 2, 1);
lcd.write((uint8_t)0);
}
}
if (vol_d % 2 == 0) {
lcd.setCursor(z / 2, 1);
lcd.write((uint8_t)1);
}
lcd.setCursor(13, 1); lcd.print(vol);
}
if (menu == 1) {
if (readEncoder == 1) {
bass++;
w = 1;
if (bass > 7) {
bass = 7;
}
}
if (readEncoder == 2) {
bass--;
w = 1;
if (bass < -7) {
bass = -7;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
lcd.setCursor(0, 0); lcd.print("Bass ");
lcd.print(bass * 2); lcd.setCursor(13, 0); lcd.print("dB");
for (z = -7; z <= bass; z++) {
lcd.setCursor(z + 7, 1);
lcd.write((uint8_t)0);
}
}
if (menu == 2) {
if (readEncoder == 1) {
mids++;
w = 1;
if (mids > 7) {
mids = 7;
}
}
if (readEncoder == 2) {
mids--;
w = 1;
if (mids < -7) {
mids = -7;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
lcd.setCursor(0, 0); lcd.print("Mids ");
lcd.print(mids * 2); lcd.setCursor(13, 0); lcd.print("dB");
for (z = -7; z <= mids; z++) {
lcd.setCursor(z + 7, 1);
lcd.write((uint8_t)0);
}
}
if (menu == 3) {
if (readEncoder == 1) {
treb++;
w = 1;
if (treb > 7) {
treb = 7;
}
}
if (readEncoder == 2) {
treb--;
w = 1;
if (treb < -7) {
treb = -7;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
lcd.setCursor(0, 0); lcd.print("Trebble ");
lcd.print(treb * 2); lcd.setCursor(13, 0); lcd.print("dB");
for (z = -7; z <= treb; z++) {
lcd.setCursor(z + 7, 1);
lcd.write((uint8_t)0);
}
}
if (menu == 4) {
if (readEncoder == 1) {
balans++;
w = 1;
if (balans > 4) {
balans = 4;
}
}
if (readEncoder == 2) {
balans--;
w = 1;
if (balans < -4) {
balans = -4;
}
}
lcd.setCursor(0, 0);
if (balans >= 0) {
lcd.print("-");
} else {
lcd.print("+");
}
lcd.print(abs(balans)); lcd.print(" dB ");
lcd.print(" <> ");
if (balans >= 0) {
lcd.print("+");
} else {
lcd.print("-");
}
lcd.print(abs(balans)); lcd.print(" dB ");
lcd.setCursor(0, 1); lcd.print("R");
lcd.setCursor(15, 1); lcd.print("L");
if (balans < 0) {
lcd.setCursor(balans + 7, 1);
lcd.write((uint8_t)0);
}
if (balans > 0) {
lcd.setCursor(balans + 8, 1);
lcd.write((uint8_t)0);
}
if (balans == 0) {
lcd.setCursor(7, 1);
lcd.write((uint8_t)0);
lcd.setCursor(8, 1);
lcd.write((uint8_t)0);
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
}
if (in_d == 1) {
g1();
if (readEncoder == 1) {
gain++;
w = 1;
if (gain > 15) {
gain = 15;
}
}
if (readEncoder == 2) {
gain--;
w = 1;
if (gain < 0) {
gain = 0;
}
}
g2();
lcd.setCursor(0, 0); lcd.print("Input: "); lcd.print(in);
lcd.setCursor(0, 1); lcd.print("Input Gain: "); lcd.print(gain);
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
}
int encoder() {
int Direction = 0;
aState = digitalRead(outputA); // Reads the "current" state of the outputA
// If the previous and the current state of the outputA are different, that means a Pulse has occured
if (aState != aLastState){
// If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
if (digitalRead(outputB) != aState) {
counter ++;
Direction = 1;
} else {
counter --;
Direction = 2;
}
// Serial.print("Position: ");
// Serial.println(counter);
}
aLastState = aState; // Updates the previous state of the outputA with the current state
return Direction;
}
Szia! Itt a teljes kód.
#include <EEPROM.h>
#include <Wire.h>
#include <TDA7439.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
TDA7439 tda;
LiquidCrystal_I2C lcd(0x27, 16, 2);// I2C címzés és szetáp
byte a1[8] = {0b00000, 0b11011, 0b11011, 0b11011, 0b11011, 0b11011, 0b11011, 0b00000};
byte a2[8] = {0b00000, 0b11000, 0b11000, 0b11000, 0b11000, 0b11000, 0b11000, 0b00000};
int vol, vol_d, z, bass, mids, treb, balans, in, gain, gain1, gain2, gain3, gain4;
byte menu, w, w1, in_d;
unsigned long time;
void setup() { ///// Szetáp kettő
Serial.begin(9600); Serial.print("TDA7439");
lcd.backlight();
lcd.init();
lcd.setCursor(0, 0); lcd.print(" TDA7439 "); delay(1000);
pinMode(12, INPUT); // menü
pinMode(11, INPUT); // plusz
pinMode(10, INPUT); // mínusz
pinMode(A1, INPUT); // bemenet 1-4
lcd.createChar(0, a1); lcd.createChar(1, a2);
vol = EEPROM.read(0); // volume
bass = EEPROM.read(1) - 7; // basszus eeprom
mids = EEPROM.read(2) - 7; // mids eeprom
treb = EEPROM.read(3) - 7; // treble eeprom
balans = EEPROM.read(4) - 4; // balansz eeprom
in = EEPROM.read(5); // input eeprom
gain1 = EEPROM.read(6); // gain1 eeprom
gain2 = EEPROM.read(7); // gain2 eeprom
gain3 = EEPROM.read(8); // gain3 eeprom
gain4 = EEPROM.read(9); // gain4 eeprom
g1(); audio();
}
void loop() { //A menü és gomb vezérlés
if (digitalRead(12) == HIGH) {
menu++;
cl();
in_d = 0;
if (menu > 4) {
menu = 0;
}
}
if (analogRead(A1) > 900) {
in++;
menu = 5;
w = 1;
in_d = 1;
cl();
if (in > 4 || in < 1) {
in = 1;
}
}
if (menu == 0) {
if (digitalRead(11) == HIGH) {
vol++;
w = 1;
if (vol > 48) {
vol = 48;
}
}
if (digitalRead(10) == HIGH) {
vol--;
w = 1;
if (vol < 0) {
vol = 0;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w = 0;
w1 = 1;
}
lcd.setCursor(0, 0); lcd.print("Volume ");
lcd.print(-48 + vol); lcd.setCursor(13, 0); lcd.print("dB");
vol_d = vol / 2;
if (vol_d >= 0) {
for (z = 0; z <= vol_d; z++) {
lcd.setCursor(z / 2, 1);
lcd.write((uint8_t)0);
}
}
if (vol_d % 2 == 0) {
lcd.setCursor(z / 2, 1);
lcd.write((uint8_t)1);
}
lcd.setCursor(13, 1); lcd.print(vol);
}
if (menu == 1) {
if (digitalRead(11) == HIGH) {
bass++;
w = 1;
if (bass > 7) {
bass = 7;
}
}
if (digitalRead(10) == HIGH) {
bass--;
w = 1;
if (bass < -7) {
bass = -7;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
lcd.setCursor(0, 0); lcd.print("Bass ");
lcd.print(bass * 2); lcd.setCursor(13, 0); lcd.print("dB");
for (z = -7; z <= bass; z++) {
lcd.setCursor(z + 7, 1);
lcd.write((uint8_t)0);
}
}
if (menu == 2) {
if (digitalRead(11) == HIGH) {
mids++;
w = 1;
if (mids > 7) {
mids = 7;
}
}
if (digitalRead(10) == HIGH) {
mids--;
w = 1;
if (mids < -7) {
mids = -7;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
lcd.setCursor(0, 0); lcd.print("Mids ");
lcd.print(mids * 2); lcd.setCursor(13, 0); lcd.print("dB");
for (z = -7; z <= mids; z++) {
lcd.setCursor(z + 7, 1);
lcd.write((uint8_t)0);
}
}
if (menu == 3) {
if (digitalRead(11) == HIGH) {
treb++;
w = 1;
if (treb > 7) {
treb = 7;
}
}
if (digitalRead(10) == HIGH) {
treb--;
w = 1;
if (treb < -7) {
treb = -7;
}
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
lcd.setCursor(0, 0); lcd.print("Trebble ");
lcd.print(treb * 2); lcd.setCursor(13, 0); lcd.print("dB");
for (z = -7; z <= treb; z++) {
lcd.setCursor(z + 7, 1);
lcd.write((uint8_t)0);
}
}
if (menu == 4) {
if (digitalRead(11) == HIGH) {
balans++;
w = 1;
if (balans > 4) {
balans = 4;
}
}
if (digitalRead(10) == HIGH) {
balans--;
w = 1;
if (balans < -4) {
balans = -4;
}
}
lcd.setCursor(0, 0);
if (balans >= 0) {
lcd.print("-");
} else {
lcd.print("+");
}
lcd.print(abs(balans)); lcd.print(" dB ");
lcd.print(" <> ");
if (balans >= 0) {
lcd.print("+");
} else {
lcd.print("-");
}
lcd.print(abs(balans)); lcd.print(" dB ");
lcd.setCursor(0, 1); lcd.print("R");
lcd.setCursor(15, 1); lcd.print("L");
if (balans < 0) {
lcd.setCursor(balans + 7, 1);
lcd.write((uint8_t)0);
}
if (balans > 0) {
lcd.setCursor(balans + 8, 1);
lcd.write((uint8_t)0);
}
if (balans == 0) {
lcd.setCursor(7, 1);
lcd.write((uint8_t)0);
lcd.setCursor(8, 1);
lcd.write((uint8_t)0);
}
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
}
if (in_d == 1) {
g1();
if (digitalRead(11) == HIGH) {
gain++;
w = 1;
if (gain > 15) {
gain = 15;
}
}
if (digitalRead(10) == HIGH) {
gain--;
w = 1;
if (gain < 0) {
gain = 0;
}
}
g2();
lcd.setCursor(0, 0); lcd.print("Input: "); lcd.print(in);
lcd.setCursor(0, 1); lcd.print("Input Gain: "); lcd.print(gain);
if (w == 1) {
audio();
cl();
time = millis();
w1 = 1;
w = 0;
}
}
////////////////Gomb vezérlés vége
////EEPROM beállítás mentés, ha nincsenek a gombok több mint 10mp-ig lenyomva
if (millis() - time > 10000 && w1 == 1) {
EEPROM.update(0, vol);
EEPROM.update(4, balans + 4);
EEPROM.update(1, bass + 7);
EEPROM.update(2, mids + 7);
EEPROM.update(3, treb + 7);
EEPROM.update(5, in);
EEPROM.update(6, gain1); EEPROM.update(7, gain2); EEPROM.update(8, gain3); EEPROM.update(9, gain4);
menu = 0; w1 = 0; cl(); in_d = 0;
}
}
void g1() {
if (in == 1) {
gain = gain1;
} if (in == 2) {
gain = gain2;
} if (in == 3) {
gain = gain3;
} if (in == 4) {
gain = gain4;
}
}
void g2() {
if (in == 1) {
gain1 = gain;
} if (in == 2) {
gain2 = gain;
} if (in == 3) {
gain3 = gain;
} if (in == 4) {
gain4 = gain;
}
}
void cl() {
delay(200);
lcd.clear();
}
void audio() {
tda.setInput(in); // 1 to 4
tda.inputGain(gain); // 0 to 15
tda.setVolume(vol); // 0 to 48 ( 0 is mute)
tda.setSnd(bass, 1); //-7 to +7 , 1 - Bass | 2 - Mids | 3 - Trebble
tda.setSnd(mids, 2);
tda.setSnd(treb, 3);
tda.spkAtt(balans); /// balance function
}
Beillesztettem a kódot, de nem fordította le. Ezért jobbnak láttam elküldeni az egész kódot.
A sikerhez kellene a: TDA7439.lib, vagy link?
Szia. Ezen a linken található a könyvtár, amit használok
Elnézést!
De ez a program már akkorára dagadt, hogy nem fordul meg a loop ciklus elég gyorsan.
Ahhoz, hogy lekérdezéssel biztonságosan elkapja az encoder jeleit!
Ide már megszakításos módszert kellene alkalmazni.
Szerintem ez már túlmegy, a szívességből csináld már meg határán!
Rengeteg ilyen példát találsz a neten, csak keresned kel.
Sajnálom ennyi időm most nincsen rá!
Sziasztok!
Akadt egy kis gondom a Ki mit épített topicban bemutatott fordulatszámmérővel. A fordulatszám jelet az AVR-be a képen látható módon vezetem bele, a bemenet a belső felhúzó ellenállással H szintre van húzva. A tranzisztor bázisát a 10k ellenálláson keresztül megpróbáltam közvetlenül a gyújtó trafó primer tekercsére kötni, de összevissza ugráló értelmezhetetlen értékeket jelzett ki. Jel generátorról tökéletesen működött. Gondolom a gyújtó trafó visszarúgása okozza a bajt, de hogyan küszöbölhetném ki ezt a problémát? Köthetem közvetlenül az ECU gyújtás kimenetére?
Táprészen több tagú LC szűrők.15 Voltos Zener gátak.
A bemetet otpoval leválasztani ami a fordulatszám adótól kapja a jelet.
A tranzisztor így nem sokat véd.
Az optocsatoló közvetlen a uC mellett legyen ... az opto diódáján már lóghat hosszú drót.Opto Tranzisztora minél közelebb kerüljön inkább.
Sziasztok!
Egy rejtélyes dolog megfejtésében kérem a segítségeteket. Egy Arduino alapú Midi vezérlőn dolgozom és az Arduino panelem elég furcsán viselkedik. Van egy eredeti is és egy klón is, mindkettő ugyanazt csinálja.
Röviden annyit, hogy a digitális bemeneteken van egy 6x6-os billentyű mátrix, amit beolvas és a neki megfelelő Midi üzenetet elküldi a Tx lábon. Lefordítom és betöltöm az Arduino-ba. Ha egy darab dróttal egy tetszőleges sor és oszlop kivezetést összezárok próbaképpen egy pillanatra, akkor a Tx LED felvillan, jelezve, hogy valamit kiküldött, tehát úgy néz ki, hogy működik.
Nyomok egy Reset-et a panelen, utána ugyanígy működik tovább.
Most jön a furcsaság: ha lehúzom az USB-t róla és újra visszadugom, utána (látszólag) nem működik a program. Tehát hiába érintem össze ugyanazt a két pontot, a TX LED nem csinál semmit... mintha elfelejtette volna a programot. Gyorsan rátöltöttem a Blink sketch-et, azt nem "felejti el"...
Van valami ötletetek, hogy mitől lehet ez? A hozzászólás módosítva: Márc 22, 2019
Tegyél a kódba egy blink kódot, a loop ciklus elejébe. Delay nélkülit természetesen, valahogy így: Bővebben: Link.
Persze ha használod valamire a 13-as pin-t, akkor tedd máshova, és használj külső LED-et, egyébként jó a beépített.
Az elárul pár dolgot, ha USB ki-be dugdosás után villog-e a LED.
Illetve ha usb ki-be után nyomsz egy reset gombot, az "megjavítja"?
Köszönöm az ötletet, majd otthon kipróbálom. Az usb ki-be után a reset nem javítja meg.
A 13-as lábat használom (meg az összes többit is, kivéve a Tx/Rx-et), de ideiglenesen kiszedhetem az egyik oszlopot a próba kedvéért.
Az nem jó, a lényeg az lenne, hogy ne változtass a hw-en.
Analóg pint is használhatsz digit ki/bemenetként, abból nincs szabad?
De az még mind szabad. Később majd max. hármat tervezek felhasználni belőlük.
Egy képet küldhetnél. Miről táplálod meg az Arduinokat egyébként? Multiméterrel méregettél már? Tápfeszültség, stb? Pl. ha a CH340 zárlatos, akkor lehúzza az 5V-ot nagyon alacsonyra (0-1V), és előfordulhat, hogy a két táplálási mód közül az egyikkel megy az Arduino, a másikkal nem.
Kipróbáltam a LED villogtatást, a LED tovább villog az USB ki-be után is.
Viszont: közben eszembe jutott, hogy kétségbeesésemben a librarykba is belenyúltam. Úgy emlékszem, hogy visszaállítottam mindent, amit átírtam, de ezek szerint mégsem... a libraryk törlése és újratelepítése megoldotta a problémát, most már minden jó, lehet tovább dolgozni a kódon.
Köszönöm a segítséget!
Sziasztok,
Hazahoztam egy 8x8-as szeletet, amivel addig kísérleteztem amíg el nem sikerült hárítanom a problémát.
A megoldás az volt, hogy invertálni kellett a sorokat.
Így végül ebből:
ledmatrix.Shift_Register_Emulator(253,LedPort); adott oszlopok bekapcsolása
delay(6);
ledmatrix.Shift_Register_Emulator(255,LedPort); összes led ki
Ez lett:
ledmatrix.Shift_Register_Emulator(2,LedPort); adott oszlopok bekapcsolása
delay(6);
ledmatrix.Shift_Register_Emulator(0,LedPort); összes led ki
proba kolléga forráskódját használtam fel, az sokkal átláthatóbb, gyorsabb és szebb az első kódomnál.
Delay-nek 2 bizonyult a legjobb értéknek, 3-malmár kezd szemmel alig láthatóan villogni.
Köszönöm szépen mindenki segítségét!
További szép estét mindenkinek!
Ha akarod, finomíthatod a várakozást, használd a DelayMicrosec függvényt. Így nem csak 2 vagy 3 ms-ot tudsz várni, hanem 2000-3000 microsec között bármit (lehet még kisebb érték is elegendő). Így a programodat se lassítod feleslegesen, és a vibrálás is minimálisra lesz szorítva.
Köszi a tippet!
Amiután bekötöm a többi ledeket, utána még fogok játszani jó sokat a programmal.
Fogok feltölteni videót is róla amiután elkészült
Sziasztok!
Készítettem egy stoppert Arduino Uno-val. Sok példát néztem, de szerettek volna egy kicsit más formában csinálni a programját. A megszakításokat még nem használtam és ezzel akartam, hogy működjön. Valamiért nem számol és nem ír ki eredményt és a "Stopper .." kiírás is villódzik. Érdemes-e a megszakításokat használni a stopperben, hol lehet a hiba ami gátolja a működést. A másik kérdésem, pedig, hogy hogyan kell a programot itt feltölteni, hogy olyan szépen sorszámozott sorok legyenek. Én csak a Ctrl C-V- vel tudtam.
#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
int Startkapcsolo = 2; // Start gomb Pin2-re kotve
int Stopkapcsolo = 3; // Stop gpmb Pin3-ra kotve
volatile int kapcsoloStart = LOW; // Start jelzo valtozo
volatile int kapcsoloStop = LOW; // Stop jelzo valtozo
void setup()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
attachInterrupt(0, megszakitas1, FALLING);
attachInterrupt(1, megszakitas2, FALLING);
pinMode(12, OUTPUT); // elektromágnes
}
long t = 0; // mért idő
long k = millis(); // kezdő idő
long s ; // megáll idő
void loop() // Főprogram
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Arduino stopper4");
lcd.setCursor(0,1);
lcd.print(t);
lcd.setCursor(12,1);
lcd.print("msec");
}
void megszakitas1() //Start kapcsolohoz tartozo megszakitas
{
if (kapcsoloStart == LOW) // ha a start jelzo változótár törölve van
{
digitalWrite(12,HIGH); // jelző LED be
k = millis(); // idő mérése indul
kapcsoloStart = HIGH; // a Start jelző változó visszaállítása }
}
}
void megszakitas2() //Stop kapcsolohoz tartozo megszakitas
{
if (kapcsoloStop == LOW) // ha a stop jelzo változótár törölve van
{
s = millis();
t = (s - k);
kapcsoloStop = HIGH; // a Stop jelző változó visszaállítása
digitalWrite(12,LOW); // jelz LED ki
}
}
Idézet: „másik kérdésem, pedig, hogy hogyan kell a programot itt feltölteni, hogy olyan szépen sorszámozott sorok legyenek. Én csak a Ctrl C-V- vel tudtam.”
Mi lenne ha kinyitnád a szemed ?!
Értelmeznéd az üzenet beírási ablak alatti gombokat esetleg még játszanál is velük .
Egyből közelebb jutnál a megoldáshoz .
OTT van a KÓD zöld gomb, használd.
#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
int Startkapcsolo = 2; // Start gomb Pin2-re kotve
int Stopkapcsolo = 3; // Stop gpmb Pin3-ra kotve
volatile int kapcsoloStart = LOW; // Start jelzo valtozo
volatile int kapcsoloStop = LOW; // Stop jelzo valtozo
void setup()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
attachInterrupt(0, megszakitas1, FALLING);
attachInterrupt(1, megszakitas2, FALLING);
pinMode(12, OUTPUT); // elektromágnes
}
long t = 0; // mért idő
long k = millis(); // kezdő idő
long s ; // megáll idő
void loop() // Főprogram
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Arduino stopper4");
lcd.setCursor(0,1);
lcd.print(t);
lcd.setCursor(12,1);
lcd.print("msec");
}
void megszakitas1() //Start kapcsolohoz tartozo megszakitas
{
if (kapcsoloStart == LOW) // ha a start jelzo változótár törölve van
{
digitalWrite(12,HIGH); // jelző LED be
k = millis(); // idő mérése indul
kapcsoloStart = HIGH; // a Start jelző változó visszaállítása }
}
}
void megszakitas2() //Stop kapcsolohoz tartozo megszakitas
{
if (kapcsoloStop == LOW) // ha a stop jelzo változótár törölve van
{
s = millis();
t = (s - k);
kapcsoloStop = HIGH; // a Stop jelző változó visszaállítása
digitalWrite(12,LOW); // jelz LED ki
}
}
itt lent a Kód zöld gomb ha megnyomod
akkor 1 ilyen sort fogsz kapni :
üres sor de a code formázó tagek közé vannak zárva egy space ezért üres
Amik közte vannak azok soronként (CRel zárt) sorszámozva lesznek
Ez a code kivül van már írva megint A hozzászólás módosítva: Márc 24, 2019
|
|