Prosty program, trudne zadanie

Odpowiedz Nowy wątek
2015-09-01 10:39
0

Witam. Jestem nowy i zaczynam z językiem C. Posiadam kontroler i spory zasób wiedzy na temat elektroniki, ale nie programowania. Proszę was o pomoc jak napisać program który po podaniu na wejście stanu wysokiego, na wyjście poda stan wysoki i po X czasie wyłączy stan wysoki, pomimo stanu wysokiego na wejściu? Pozdrawiam

Pozostało 580 znaków

2015-09-01 10:47
0

Musisz ogarnać dokumentację sprzętu elektronicznego, który używasz. Gdzieś tam powinny być opisane różne funkcje logiczne, które będą Ci potrzebne do twojego programu.
Generalnie nie podałeś żadnych danych więc raczej trudno będzie Ci pomóc.

Pozostało 580 znaków

2015-09-01 11:20
0

Jest to najprostsze arduino. Jakich danych potrzeba?

Pozostało 580 znaków

2015-09-01 11:40
1

Zależy w czym piszesz. Arduino IDE czy zwykłe C.
Tak z głowy pisane (nie testowane), to to by wyglądało mniej więcej tak.
Aczkolwiek to tylko tak z głowy, od razu mówie, w praktyce pewnie napotkasz problemy typu drgania styków, jeśli to jakiś button stykowy (ale to da sie programowo wyeliminować).
Odsyłam do dokumentacji Arduino IDE
Tutaj

// Arduino IDE
#define PIN 9
#define DELAY_IN_MS 3000
int val = 0;
void setup()
{

    pinMode(PIN, INPUT);
}
void loop()
{
    val = digitalRead(PIN);
    if(val == HIGH)
    {
        delay(DELAY_IN_MS);
        pinMode(PIN, OUTPUT);
        digitalWrite(PIN, HIGH);
    }
}

// C
#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU <cz.kwarca>
#define PIN PD2
#define PINDEF PIND
int main(void)
{
    // portb = out
    DDRB = 0xFF;
    DDRD &= ~(1 << PIN);
    while(1)
    {
               // Input high
        if(PINDEF & (1 << PIN)){
            PORTB |= (1 << PB2);
                        _delay_ms(3000);
                        PORTB &= ~(1 << PB2);
               }
        else
            PORTB &= ~(1 << PB2);
    }
}
edytowany 3x, ostatnio: Proxima, 2015-09-01 11:44

Pozostało 580 znaków

2015-09-01 11:55
0

Bardzo dziękuje za zainteresowanie lecz mam problem z konfiguracją tego programu i identyfikacją pinów. Mogę liczyć na pomoc?

Pozostało 580 znaków

2015-09-01 11:57
0

To tylko przykład. Spójrz do manuala, tam masz wszystko na temat pinów napisane.
Z której wersji korzystasz, C czy Ardu IDE?
Jeśli jesteś zielony jak trawa to nie baw sie z C tylko użyj ide.

edytowany 1x, ostatnio: Proxima, 2015-09-01 11:59

Pozostało 580 znaków

2015-09-01 12:13
0

Korzystam z IDE i dużo da się w tym na logikę wziąć dlatego pod tym kątem szukam pomocy.

No to teraz konkretnie. Szukasz pomocy - z czym dokładnie masz problem? Bo ja już nie wiem co ty chcesz ;p - Proxima 2015-09-01 12:23

Pozostało 580 znaków

2015-09-01 13:50
1

@Proxima dobre rozwiązanie, ale nie do końca zgodne z założeniami autora:

// Arduino IDE
#define PIN 9
#define DELAY_IN_MS 3000

void setup()
{
    pinMode(PIN, INPUT);
}
void loop()
{
    if(digitalRead(PIN))
    {
/*Proxima:  w tym fragmencie, procesor najpierw odczeka założony czas, potem zaświeci diodę*/
        /*delay(DELAY_IN_MS);
        pinMode(PIN, OUTPUT);
        digitalWrite(PIN, HIGH);*/
/*Rozwiązanie:*/
        pinMode(PIN, Output);
        digitalWrite(PIN, High);
        delay(DELAY_IN_MS);
        /*Plus ustawienie pinu znów jako wejścia!*/
        digitalWrite(PIN, Low);
        pinMode(PIN, Input);
  }
}

Przy czym taktowanie procesora lepiej definiować w opcjach projektu, robienie tego dyrektywą może trochę namieszać.

Autorze tematu, co znaczy "problem z konfiguracją programu"? Jeśli masz problem z identyfikacją pinów (a piszesz w IDE) to spójrz na to tak:
Na początku programu masz zdefiniowany PIN jako liczbę 9, to oznacza (na chłopski rozum), że tam gdzie na płytce masz napisaną liczbę 9, tam masz swój PIN, na który podajesz, lub otrzymujesz stan wysoki. Dodatkowo, kolega @Proxima zrobił to tak, że podanie stanu wysokiego na jeden pin daje stan wysoki na TYM SAMYM pinie, (w rozwiązaniu w C jest odwrotnie) zastanów się którą opcję wolisz i pamiętaj o tym.
Pozdrawiam :)

Oczywiście masz racje, tam jest błąd, aczkolwiek to poglądowo z głowy było, i mam nadzieje że autor wątku potrafi zmienić kolejność wywołań funkcji :P - Proxima 2015-09-01 14:00

Pozostało 580 znaków

2015-09-01 17:34
0

Może wyjaśnię to w inny sposób. Zależy mi na takim programie który po podaniu na np. PIN 9 stanu wysokiego to na pinie 13 też poda stan wysoki i po 200ms go wyłączy pomimo stanu wysokiego na pinie 9.

Pozostało 580 znaków

2015-09-01 17:50
0

No ale to przecież masz przykład mój i @Bartosz36, z czym masz problem w tych kodach?

Jak nie umiesz ich przerobić to mów z czym konkretnie masz problem. Bo wiemy że masz problem, ale uparcie od samego rana nie chcesz powiedzieć, z czym dokładnie masz problem : D

Jak chcesz gotowca, to troche lipa, bo akurat embedded to na tyle ciekawa sprawa że nawet chyba nie warto prosić o gotowce ; ]

Natomiast jeśli nie rozumiesz z kodu nic a nic, wróć do manuala, przecież to bagatela wywołanie kilku funkcji.

Protip, to co chcesz zrobić to kwestia dopisania jednej funkcji do programu @Bartosz36. No padawan, los jest w twoich rękach.

Protip-Niemalże-Spoiler, ta druga funkcja to delay.
Protip3. W której linii nie powiem, pomyśl sam.

edytowany 4x, ostatnio: Proxima, 2015-09-01 17:57

Pozostało 580 znaków

2015-09-01 22:55
0

To i ja dodam Protip'a: Zwróć uwagę na linijki:

#define PIN 9
digitalWrite(PIN, High); 

Pobaw się tym co się w nich znajduje, pokombinuj. Arduino właśnie od tego jest ;)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0