Liczba postów: 36
Liczba wątków: 17
Dołączył: Dec 2021
Reputacja:
1
26-12-2021, 12:39
(Ten post był ostatnio modyfikowany: 26-12-2021, 12:43 przez Arpl.)
Witam wszystkich, zaczynam przygodę z Arduino i zacząłem od stworzenia prostego układu z dwoma diodami LED i dwoma przyciskami. Obecnie szukam instrukcji która mógłbym wykorzystać do przeskoku do innej części programu. Mianowicie chodzi mi o to że jak świeci LED1 i chcę włączyć LED2 to program powinien na to nie zareagować tylko przeskoczyć do dalszej części programu. Czyli coś takiego
if (ledPin2 == HIGH) {
to przeskocz do "123"
Liczba postów: 884
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
43
Naucz się wielozadaniowość. Podziel funkcje.
np..
void dioda1(){
// program obsługujący diode 1
}
void diada2(){
//program obslugujący diode 2
}
void przyciski(){
// program obsługujący włączniki
if(przycisk1=high){
dioda1();
}
if(przycisk2==high){
dioda2();
}
}
viod loop(){
przyciski();
}
Wtedy w każdej pozycji będziesz mógł skoczyć do dowolnej funkcji..
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 36
Liczba wątków: 17
Dołączył: Dec 2021
Reputacja:
1
Witam
spróbowałem tak zrobić i przechodzi mi kompilację poprawnie się kompiluje lecz nie działa. Oto fragment kodu, proszę o podpowiedz co robię źle?
"
void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
}
void LED1a(){
if (ledPin1 == HIGH){
LED1b();
}
if (buttonState1 == HIGH) {
digitalWrite(ledPin1, LOW);
} else
{
digitalWrite(ledPin1, HIGH);
}
}
void LED1b()
{
if (buttonState2 == HIGH) {
digitalWrite(ledPin2, LOW);
}
else {
digitalWrite(ledPin2, HIGH);
}
}
Liczba postów: 2,375
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
W loop masz wywołane do wykonania funkcje standardowe, a tych swoich nigdzie nie używasz, może w tym jest problem.
Czyli gdzieś tu powinno być wywołanie tych funkcji, np.:
void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
LED1a();
}
I tak samo każda inna funkcja, albo wrzucasz ją do wykonania w SETUP, albo w LOOP, albo w inną funkcję, która jest wykonywana w tych sekcjach. Może też być wywołanie przerwaniem. Natomiast czy twoje funkcje mają jakikolwiek sens też nie wiadomo, program jest nierozłącznie związany ze schematem, którego tu nie pokazujesz. Stan niski na buttonPin może oznaczać wciśnięcie, albo jego brak, zależy co i jak się podłączy, jakie Arduino, jak się ustawi w setup uC. Stan niski na LED może oznaczać brak świecenia lub świecenie, zależy jak jest podłączony LED.
Kolejna sprawa, to szybkość działania, 16MHz oznacza, że uC wykonuje czynności w tempie 16mln/s. Czyli możesz nie zauważyć, że coś zostało włączone na 1us, a wciśnięty przycisk generuje tysiące niskich i wysokich stanów. Eliminuje się to odpowiednio programowo lub znowu schemat i jak masz do wszystko podłączone sprzętowo. Bez tego coś będzie działać, ale raczej nie tak jak się oczekuje.
Liczba postów: 36
Liczba wątków: 17
Dołączył: Dec 2021
Reputacja:
1
Wcześniej wstawiłem tylko część kodu, aby skupić się tylko na istotnej części. Oto cały kod:
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int ledPin1 = 13;
const int ledPin2 = 12;
int buttonState1 = 0;
int buttonState2 = 0;
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
}
void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
}
void LED1a(){
if (ledPin1 == HIGH){
LED1b();
}
if (buttonState1 == HIGH) {
digitalWrite(ledPin1, LOW);
} else
{
digitalWrite(ledPin1, HIGH);
}
}
void LED1b()
{
if (buttonState2 == HIGH) {
digitalWrite(ledPin2, LOW);
}
else {
digitalWrite(ledPin2, HIGH);
}
}
Wszystko działało tak jak należy do czasu wstawienia instrukcji VOID LED...
Chodzi mi o to że jak wciskam P1 to w czasie trzymania przycisku P1 świeci mi dioda LED1 i tak samo odnośnie drugiego przycisku i LED2.
Tą nową instrukcją chcę sprawić aby jak się świeci LED1 to LED2 się nie zapali i na odwrót.
Liczba postów: 884
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
43
27-12-2021, 00:59
(Ten post był ostatnio modyfikowany: 27-12-2021, 01:01 przez Jarewa0606.)
Nie zrozumiałeś mnie nadal popełniasz błędy dlatego nie działa bo nie rozumiesz tego .
Kod:
viod loop(){
tort() // zrób tort odwołaj się do tej funkcji
ciastko() // zrób ciastko odwołaj się do funkcji ciastka
}
viod tort(){
//przepis na totra
}
viod ciastko(){
// a dupa zrób mi torta
tort();
return; // opuści po zrobieniu torta nie wykona ciastka
// przepis na ciastko
}
A w twoim przypadku powinno być tak mniej więcej
Kod:
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int ledPin1 = 13;
const int ledPin2 = 12;
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
}
void loop() {
LED1a(digitalRead(buttonPin1));
LED1b(digitalRead(buttonPin2));
}
void LED1a(int buttonState1){
if (ledPin2 == HIGH){
return;
}
if (buttonState1 == HIGH) {
digitalWrite(ledPin1, LOW);
} else
{
digitalWrite(ledPin1, HIGH);
}
}
void LED1b(int buttonState2)
{
if (ledPin1 == HIGH){
return;
}
if (buttonState2 == HIGH) {
digitalWrite(ledPin2, LOW);
}
else {
digitalWrite(ledPin2, HIGH);
}
}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.