Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal.h>
- #include<math.h>
- const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
- LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
- int nrGrade;
- void setup(){
- DDRC &= ~0x30;
- DDRD |= 0xFF;
- lcd.begin(16, 2);
- PORTD = 0x00;
- adc_init();
- }
- void Switch(char a){
- switch(a){
- case 0: PORTD = 0x7E; break;
- case 1: PORTD = 0x30; break;
- case 2: PORTD = 0x6D; break;
- case 3: PORTD = 0x79; break;
- case 4: PORTD = 0x33; break;
- case 5: PORTD = 0x5B; break;
- case 6: PORTD = 0x5F; break;
- case 7: PORTD = 0x70; break;
- case 8: PORTD = 0x7F; break;
- case 9: PORTD = 0x73; break;
- }
- delay(1000);
- }
- void AfisGrade(){
- PORTD = 0x63;
- delay(1000);
- PORTD = 0x4E;
- delay(1000);
- }
- void loop(){
- nrGrade =(int) (((unsigned long int)read_adc(5) * 5000 / 1023) - 500) / 10;
- lcd.print(nrGrade);
- delay(1000);
- if(nrGrade < 0){
- PORTD = 0x01;
- delay(1000);
- nrGrade = - nrGrade;
- }
- if(nrGrade < 10) Switch(nrGrade);
- else if (nrGrade < 100){
- Switch(nrGrade / 10);
- Switch(nrGrade % 10);
- }
- else {
- Switch(nrGrade / 100);
- Switch(nrGrade / 10 % 10);
- Switch(nrGrade % 10);
- }
- AfisGrade();
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- }
- void adc_init()//adc initialization
- {
- ADCSRA |= ((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0));//set division factor between system clock frequency and the input clock to the ADC- 128
- ADMUX |= (1 << REFS0);//AVcc with external capacitor at Aref pin
- ADCSRA |= (1 << ADEN);//enable ADC
- ADCSRA |= (1 << ADSC);//ADC start conversion
- }
- uint16_t read_adc(uint8_t channel)
- {
- ADMUX &= 0xF0;//set input AO to A5
- ADMUX |= channel;//select chanel AO to A5
- ADCSRA |= (1 << ADSC);//start conversion
- while(ADCSRA & (1 << ADSC));//wait wile adc conversion are not updated
- return ADCW;//read and return voltage
- }
Advertisement
Add Comment
Please, Sign In to add comment