$regfile = "attiny85.dat" $crystal = 8000000 Dim Colour(3) As Single Dim Black(3) As Single Dim White(3) As Single Dim Eblack(3) As Eram Single Dim Ewhite(3) As Eram Single Dim Colourout(3) As Byte Dim Sensinput As Byte Dim Sensoutput As Byte Dim Samples As Byte Dim Modus As Byte Dim Rest As Byte '10ms/LSB Dim Acclim As Byte '1ms/LSB Dim Settings(6) As Byte Dim I As Byte Dim J As Byte Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portb.4 = Input Config Adc = Single , Prescaler = Auto Start Adc Declare Function Getreading(byval Times As Byte) As Single Declare Sub Setbalance Declare Sub Getcolour Declare Sub Outputcolour Modus = 0 Portb.0 = 1 Portb.1 = 1 Portb.2 = 1 Do Select Case Modus Case 0: Serin Settings(1) , 6 , B , 3 , 9600 , 0 , 8 , 1 If Settings(6) = Crc8(settings(1) , 5) Then Modus = Settings(1) Samples = Settings(2) D Acclim = Settings(3) Rest = Settings(4) * 10 Sensoutput = &HAA Else Sensoutput = &HAB End If Serout Sensoutput , 1 , B , 5 , 9600 , 0 , 8 , 1 If Sensoutput = &HAA And Settings(5) = 1 Then Call Setbalance End If Case 1: Call Getcolour Call Outputcolour Wait Rest Case 2: Serin Sensinput , 1 , B , 3 , 9600 , 0 , 8 , 1 If Sensinput = &HBB Then Call Getcolour Call Outputcolour End If End Select Loop End Function Getreading(byval Times As Byte) As Single Local Tally As Single Tally = 0 Local Reading As Integer Reading = 0 For J = 1 To Times Reading = Getadc(2) Tally = Tally + Reading Waitms 10 Next Getreading = Tally / Times End Function Sub Getcolour Local Greydiff As Single For I = 0 To 2 Toggle Portb.i Waitms Acclim Colour(i + 1) = Getreading(samples) Toggle Portb.i White(i + 1) = Ewhite(i + 1) Black(i + 1) = Eblack(i + 1) Greydiff = White(i + 1) - Black(i + 1) Colour(i + 1) = Colour(i + 1) - Black(i + 1) Colour(i + 1) = Colour(i + 1) / Greydiff Colour(i + 1) = Colour(i + 1) * 255 Colour(i + 1) = Round(colour(i + 1)) If Colour(i + 1) < 0 Then Colour(i + 1) = 0 If Colour(i + 1) > 255 Then Colour(i + 1) = 255 Colourout(i + 1) = Colour(i + 1) Waitms Acclim Next End Sub Sub Outputcolour For I = 1 To 3 Serout Colourout(i) , 1 , B , 5 , 9600 , 0 , 8 , 1 Next End Sub Sub Setbalance Sensoutput = &HAC Serout Sensoutput , 1 , B , 5 , 9600 , 0 , 8 , 1 Wait 5 For I = 0 To 2 Toggle Portb.i Waitms Acclim White(i + 1) = Getreading(samples) Ewhite(i + 1) = White(i + 1) Toggle Portb.i Waitms Acclim Next Serout Sensoutput , 1 , B , 5 , 9600 , 0 , 8 , 1 Wait 5 For I = 0 To 2 Toggle Portb.i Waitms Acclim Black(i + 1) = Getreading(samples) Eblack(i + 1) = Black(i + 1) Toggle Portb.i Waitms Acclim Next Sensoutput = &HAA Serout Sensoutput , 1 , B , 5 , 9600 , 0 , 8 , 1 End Sub