Sida 1 av 1

Raspberry Pi styr en tvåfärgad LED

Postat: 7 oktober 2019, 09:32:53
av cazz
Ok detta känns som en enkel sak men får inte till det i mina tankar hur man bäst sätter upp det.
Det finns olika guider hur man med en tryck knapp kan tända och släcka en LED med en Raspberry Pi och Python.
Ex https://www.sunfounder.com/learn/super_ ... rrypi.html

Tanken är nu är att använda de tvåfärgad LED som jag har liggande att styra LED via knappen.
Så man tycker på knappen så lyser det rött och trycker man igen så lyser det grönt.

Rent basic men nu är det så de tvåfärgade LED jag har har en gemensam Anod (+) och var sin Kadod (-) och då måste man tänka om.
Hade det varit tvärtom så hade det varit enkelt men nu får jag inte riktigt till det hur jag ska koppla och programmera Python.

Jag ska även har totalt 4 st LED och 4 st knappar som sköter var sin knapp så det gäller har det i tankarna.

Re: Raspberry Pi styr en tvåfärgad LED

Postat: 7 oktober 2019, 11:50:06
av DeVille
Om jag tolkat dig rätt så behöver du ha 2st utgångar per diod och en ingång per knapp.

Exempel:
Tryck på knapp A -> Aktivera utgång X (Lysdiod 1 lyser Rött)
Tryck på knapp A -> Deaktivera ytgång X + Aktivera utgång Y (Lysdiod 1 lyser Grönt)
Tryck på knapp A -> Deaktivera ytgång Y + Aktivera utgång X (Lysdiod 1 lyser Rött)


Upprepa för andra knappar och utgångar.

/DeVille

Re: Raspberry Pi styr en tvåfärgad LED

Postat: 7 oktober 2019, 12:25:42
av Icecap
Det är en enkel sak och kan i grunden göras på en del sätt.

Vi utgår ifrån att knapparna är "debounced" och därmed ger tydliga signal.

Alternativ A: En räknare för varje knapp. Räknaren räknas upp med 1 för varje knapptryck och LED'na styrs efter det:
- 0: båda utgångar avaktiverade.
- 1: Ena utgången aktiverat, den andra avaktiverat.
- 2: Ena utgång avaktiverat, den andra aktiverat.
- 3: och alla värden över: räknaren nollställas.

Alternativ B: använder utgångarnas status för att gå vidare. OBS: Vid för hård belastning på en utgång kan detta sätt fallera!
- Vid tryck växlar man status på utgång A.
- Om utgång A nu är '0' OCH utgång B är '0' ska utgång B ställas till '1'.
I annat fall ska båda utgångar nollas.

Re: Raspberry Pi styr en tvåfärgad LED

Postat: 7 oktober 2019, 13:05:20
av cazz
Tack för era snabba svar och det ni skriver är helt rätt och det är den vägen jag tänker på.

Det jag liksom fastnad på är detta att exemplet som visas är simpel

Tryck på knappen och den skickar +3.3v till LED (via motstånd)
Tryck på knappen igen och den slutar skicka +3.3v.


Eftersom de LED jag har har en gemensam Anod och två olika Kadod så är det inte så enkelt.
Hade det varit tvärtom att den hade en gemensam Kadod och två olika Anod så hade jag bara satt Kadod i minus och sedan skicka ström antingen till den ena eller andra Anod.

Det är det som jag fastnar lite på.

Re: Raspberry Pi styr en tvåfärgad LED

Postat: 7 oktober 2019, 14:18:33
av limpan4all
De flesta utgångar driver bättre mot jord/nollvolt. Bara att koppla ett motstånd mellan I/O pinnen och kathoden (två motstånd). Sedan lägga anoden till samma spänning som I/O pinnen har som sin höga nivå (och hoppas att den är tillräckligt hög för att lysdioden skall lysa). Tänk på att du får negativ logik på I/O pinnen nolla tänder lysdioden etta släcker lysdioden.

Re: Raspberry Pi styr en tvåfärgad LED

Postat: 7 oktober 2019, 14:29:30
av Icecap
Grejen är att det är i grunden likgiltigt om det är en '1' eller en '0' som tänder en LED - och det var därför att jag skrev 'aktivera' hhv. 'avaktivera'.

Rent programmässigt är det likgiltigt om du skriver att en pinne ska ställas till '1' istället för '0' eller motsatt, det viktiga är att de ställs rätt.

Själv har jag ett antal gångar skapad ett par definitioner:
#define TURN_ON false
#define TURN_OFF true

I programmet anger jag sedan:
pin = TURN_ON; eller
pin = TURN_OFF;

Skulle jag komma fram till att jag vill koppla en transistor som inverterande drivsteg kan jag enkelt ändra definitionen till de motsatta värden och saken är biff.

Och programförståelsen är enklare när man skriver programrader typ:
Pin_LED_Green = TURN_ON;
Pin_LED_Red = Turn_Off;

Det är rimligt enkelt att fatta vad de gör helt enkelt.