Witam
Mam pewien problem z jednym programem, który ma wykrywać wciśnięcie switcha.
Chodzi o to, że gdy nacisnę obojętnie jaki switch i go puszcze to wyświetla się informacja, że switch 1 jest ciągle wciśnięty.
Nie mam pojęcia o co w tym chodzi.
Spójżcie na mój kod może coś tu pomieszałem, ale wydaje mi się że wszystko jest ok
Nie sugerujcie się do końca komentarzami, bo mogą i na pewno w nie których miejscach są nie poprawne.
Umieszczam jeszcze schemat układu, może być pomocny
Dodano po 4 [minuty]:
Wylutowałem nawet switcha, bo myślałem że może jakieś bardzo długie drgania albo że switch coś się wiesza, ale niestety nic to nie dało
Dodano po 3 [minuty]:
Podczas kompilacji otrzymjuę taki błąd:
../lcd+sw+led.c:27: warning: large integer implicitly truncated to unsigned type
co on oznacza
Dodano po 3 [minuty]:
Ok, znalazłem błąd w kodzie. I jak na razie się nie wykrzacza
Mam pewien problem z jednym programem, który ma wykrywać wciśnięcie switcha.
Chodzi o to, że gdy nacisnę obojętnie jaki switch i go puszcze to wyświetla się informacja, że switch 1 jest ciągle wciśnięty.
Nie mam pojęcia o co w tym chodzi.
Spójżcie na mój kod może coś tu pomieszałem, ale wydaje mi się że wszystko jest ok
//Program LCD+Switch+LED - ATMega8
//
//Obsługa wyświetlacza LCD, przycisków oraz diod LED
//Na pewno działa
// a) wyświetlacz LCD
// b) przyciski
// c) dioda
//Podłączenie
//- LCD - według pliku HD44780
//- przyciski - do portu PC1 i PC2
//- dioda - do portu PC0
// Wejście = 0 -> switch
// Wyjście = 1 -> dioda
#include <avr/io.h>
#include <inttypes.h>
#include <util/delay.h>
#include <hd44780.c>
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
int main(void)
{
DDRC=0x11110000; // PortC Pin1 i Pin 2 - Wejście , pozostałe Wyjścia
PORTC=0xFF; // Włączenie podciągania wejść P1 i P2
LCD_Initalize();
LCD_Clear();
LCD_WriteText("Test LCD");
int i =0 ;
while(1)
{
while (bit_is_clear(PINC, 0)) // Jeśli na wejściu 2 portu D (PD2) jest stan niski to,
{
_delay_ms(250);
LCD_Clear();
LCD_WriteText("Wcisnieto przycisk 1");
i = 1;
}
while (bit_is_clear(PINC, 1)) // Jeśli na wejściu 2 portu D (PD2) jest stan niski to,
{
_delay_ms(250);
LCD_Clear();
LCD_WriteText("Wcisnieto przycisk 2");
i = 1;
}
while (bit_is_clear(PINC, 2)) // Jeśli na wejściu 2 portu D (PD2) jest stan niski to,
{
sbi(PORTC,0);
_delay_ms(250);
LCD_Clear();
LCD_WriteText("Wcisnieto przycisk 3");
i = 1;
}
while (bit_is_clear(PINC, 3)) // Jeśli na wejściu 2 portu D (PD2) jest stan niski to,
{
_delay_ms(250);
LCD_Clear();
LCD_WriteText("Wcisnieto przycisk 4");
i = 1;
}
if (i==1)
{
cbi(PORTC,0);
LCD_Clear();
LCD_WriteText("Zwolniono przycisk");
i = 0;
}
}
}
Nie sugerujcie się do końca komentarzami, bo mogą i na pewno w nie których miejscach są nie poprawne.
Umieszczam jeszcze schemat układu, może być pomocny
Dodano po 4 [minuty]:
Wylutowałem nawet switcha, bo myślałem że może jakieś bardzo długie drgania albo że switch coś się wiesza, ale niestety nic to nie dało
Dodano po 3 [minuty]:
Podczas kompilacji otrzymjuę taki błąd:
../lcd+sw+led.c:27: warning: large integer implicitly truncated to unsigned type
co on oznacza
Dodano po 3 [minuty]:
Ok, znalazłem błąd w kodzie. I jak na razie się nie wykrzacza